Here's the scenario I'm having:
I've created a debootstrap ubuntu maverick (64-bit) environment. I placed it at /env/mav/ on my ubuntu (64-bit) lucid system. I can chroot into /env/mav and can utilize a maverick system perfectly.
I can even use the lucid programs fine outside the chrooted environment. That is /env/mav/bin/ls will run.
However, I noticed that if I modify LD_LIBRARY_PATH to be /env/mav/lib [1] [2]
every single program (both lucid and maverick) I run will crash instantly. (e.g. ls results in a segfault). kern.log shows:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
However, clearly if I chroot into /env/mav, every program is running fine. And aren't all libraries just being read from the jailed (/env/mav) /lib? So what is the difference between chroot and modifying LD_LIBRARY_PATH in this context?
Furthermore, if I:
mount -B /env /env/mav/env
and then chroot /env and then set LD_LIBRARY_PATH to be /env/mav/lib, everything still runs fine.
I'm at at a loss for what's going internally here. Are there some ld internals stored somewhere? Does chroot do something magical?
[1] Use case is to run programs from the maverick environment bound correctly to maverick dynamically linked libraries outside the maverick jail.
[2] This is just an abridged example. In reality /usr/lib, etc. are all included. Including the maverick environment's /lib "poisons" everything; there are no problems using the other maverick library directories.