> On Oct 29, 2024, at 10:09 AM, David E. Wheeler <da...@justatheory.com> wrote:
> 
> On Oct 29, 2024, at 12:23, Paul Ramsey <pram...@cleverelephant.ca> wrote:
> 
>> Thanks for this, David,
> 
> 🤘🏻
> 
>> This of course is the area that worries the heck out of me, as someone with 
>> extensions that includes not just single system dependencies but long chains 
>> of them (depending on GDAL draws in a huge tree).
> 
> Yeah. I cited pgsql-http as a simple place to start, on the assumption that 
> once we figure out how to properly configure things for one DSO, it the 
> pattern should work for any of them in a tree.

An apposite choice, since it not only demonstrates depending on a common system 
library, it also demonstrates the way these things loop on each other, as curl 
then depends on libssl, which postgres also depends on.

> I’m unsure if it will work, but I have wondered if building out the 
> dependencies to install right next to the DSO, and giving the DSO an rpath of 
> “.” would achieve the effect we are looking for.
> 
> Given the security issues with library paths, I’d guess that relative paths 
> are verboten. But also, Postgres does not `cd` into an extension directory 
> before loading it, AFAIK.

Relative rpaths as I have seen them are relative to the executable or library 
in which they are defined (as far as I know, I’m not a dylib expert by any 
stretch). The implication is that extension.so <http://extension.so/> could 
have an rpath=. and dependent dylibs sitting next to it. This is how, for 
example, cmake out-of-tree builds can run tests against the newly built library 
before it’s installed,.. the test execs have an rpath of ../lib on them.

> 
>> It’s unfortunate (DY)LD_LIBRARY_PATH is dead and dying, but there we are. 
>> The trouble I see with somehow coercing the system to load a local copy of 
>> system libraries is for (a) common system libs that PostgreSQL itself might 
>> be linking (libssl, for example) that then will end up with symbol 
>> collisions between the copy loaded by postgres and the copy loaded by the 
>> DSO and (b) same thing but for different extensions with the same 
>> dependencies.
> 
> Yeah, this is why people tend to depend on system dependencies loaded from 
> well-known paths, so libssl will always load the same DSO. I imagine the use 
> of LD_LIBRARY_PATH can cause issues today.
> 
>> I guess I cannot shake the idea that a lot of interesting extensions are 
>> going to have interesting system dependencies, that “exposing an interesting 
>> library to postgres” has a high value for an integration system like 
>> PostgreSQL.
> 
> Yeah, I think the issue will be to figure out how to manage OS 
> package-provided system dependencies in immutable environments like a Docker 
> container. I suspect some combination of -rpath compiled into Postgres and 
> mounting individual DSO files not included in the base image will be the way 
> to go.

Do you see immutable images as the main deployment path going forward? I’m not 
container-pilled yet, so it still feels like a niche concern. Meanwhile being 
able to “add an extension that my cloud provider doesn’t support yet” feels 
quite vital.

ATB,

P

Reply via email to