这是我的场景:
我创建了一个debootstrap ubuntu maverick(64位)环境.我将它/env/mav/放在我的ubuntu(64位)清晰系统上.我可以chroot进入/env/mav,可以完美地利用特立独行系统.
我甚至可以在chrooted环境之外使用清晰的程序.那/env/mav/bin/ls将是运行.
但是,我注意到如果我修改LD_LIBRARY_PATH为/env/mav/lib[1] [2]
我运行的每一个程序(清醒和特立独行)都会立即崩溃.(例如ls导致段错误).kern.log显示:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
Run Code Online (Sandbox Code Playgroud)
但是,如果我chroot进入/env/mav,每个程序运行正常.并不是所有的库都只是从jailed(/env/mav)中读取的/lib?那么在这种情况下有什么区别chroot和修改LD_LIBRARY_PATH呢?
此外,如果我:
mount -B /env /env/mav/env
Run Code Online (Sandbox Code Playgroud)
然后chroot /env然后设置LD_LIBRARY_PATH为/env/mav/lib,一切仍然运行良好.
我对这里内部发生的事情感到茫然.是否有某些ld内部存储在某处?chroot是否做了一些神奇的事情?
[1]用例是从正确绑定的特立独行环境中运行程序,以便在特立独行的监狱外设置动态链接库.
[2]这只是一个简略的例子.实际上/usr/lib,等等都包括在内.包括特立独行的环境/ lib"毒药"的一切; 使用其他特立独行的库目录没有问题.