これが私が持っているシナリオです:
debootstrap ubuntu maverick(64ビット)環境を作成しました。私はそれを/env/mav/
私のubuntu(64ビット)lucidシステムに配置しました。私は異端者のシステムに完全にchroot
入ることができ、それを利用することができます。/env/mav
私は、chrootされた環境の外でも、明快なプログラムをうまく使用することができます。それが/env/mav/bin/ls
実行されます。
しかし、 [1][2]に変更LD_LIBRARY_PATH
すると気づきました/env/mav/lib
私が実行するすべてのプログラム(lucidとmaverickの両方)は即座にクラッシュします。(たとえば、lsはセグメンテーション違反になります)。kern.logは次のことを示しています。
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
ただし、明らかに、私がにchroot
入る/env/mav
と、すべてのプログラムが正常に実行されています。そして、すべてのライブラリがjailed(/env/mav
)から読み取られているだけではありません/lib
か?では、このコンテキストでのchroot
変更と変更の違いは何ですか?LD_LIBRARY_PATH
さらに、私が:
mount -B /env /env/mav/env
その後chroot /env
、に設定LD_LIBRARY_PATH
しても/env/mav/lib
、すべてが正常に実行されます。
私はここで内部的に起こっていることに途方に暮れています。どこかに保存されている古い内部構造はありますか?chrootは魔法のようなことをしますか?
[1]ユースケースは、マーベリック刑務所の外にあるマーベリックダイナミックリンクライブラリに正しくバインドされたマーベリック環境からプログラムを実行することです。
[2]これは単なる簡略化された例です。実際/usr/lib
には、などがすべて含まれています。異端者の環境の/libを含めるとすべてが「毒」になります。他のマーベリックライブラリディレクトリを使用しても問題はありません。