这是我遇到的情况:
我创建了一个 debootstrap ubuntu 特立独行(64 位)环境。我把它/env/mav/
放在我的 ubuntu(64 位)Lucid 系统上。我可以chroot
进入/env/mav
并且可以完美地利用一个特立独行的系统。
我什至可以在 chrooted 环境之外使用 lucid 程序。那就是/env/mav/bin/ls
会运行。
但是,我注意到如果我修改LD_LIBRARY_PATH
为/env/mav/lib
[1] [2]
我运行的每个程序(清晰和特立独行)都会立即崩溃。(例如 ls 导致段错误)。kern.log 显示:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
但是,很明显,如果我chroot
进入/env/mav
,每个程序都运行良好。不是所有的图书馆都只是从被监禁的 ( /env/mav
)中读取的/lib
吗?那么在这种情况下chroot
修改和修改有什么区别呢?LD_LIBRARY_PATH
此外,如果我:
mount -B /env /env/mav/env
然后chroot /env
再设置LD_LIBRARY_PATH
为/env/mav/lib
,一切仍然运行良好。
我对这里的内部情况不知所措。是否有一些 ld 内部存储在某处?chroot 会做一些神奇的事情吗?
[1] 用例是运行从maverick 环境正确绑定到maverick 监狱外的maverick 动态链接库的程序。
[2] 这只是一个删节的例子。在现实/usr/lib
中,等等都包括在内。包括特立独行的环境的 /lib “毒药”一切;使用其他特立独行的库目录没有问题。