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.