Java JDKの依存関係リスト、Debianのlibjli.soパスがありません。

Java JDKの依存関係リスト、Debianのlibjli.soパスがありません。

私はchroot Jailを生成するためのスクリプトを作成していますが、自動化の一部にはさまざまな実行可能ファイルとその依存関係を刑務所にコピーすることが含まれています。次のbash行を使用して、依存関係リスト(Javaなど)からファイルパスを解析します。

$ ldd `which java` | grep -o '/[^()]*'
/lib/x86_64-linux-gnu/libz.so.1
/lib/x86_64-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libdl.so.2
/lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2

これはNode.jsとPythonではうまく機能しますが、刑務所内で実行しようとするとjavaエラーが発生します。

java:共有ライブラリロードエラー:libjli.so:共有オブジェクトファイルを開けませんでした:そのファイルまたはディレクトリがありません。

それが明らかになったlibjli.so依存関係リストにパスがありません。少なくとも、ldd私たちに示されているパスは次のとおりです(5行目)。

$ ldd `which java`
linux-vdso.so.1 =>  (0x00007ffff7f4d000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7ac3928000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7ac370c000)
libjli.so => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7ac3507000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7ac317c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7ac3b48000)

このファイルが見つかりました。

$ find /usr/lib -name libjli.so
/usr/lib/jvm/java-6-openjdk-amd64/lib/amd64/jli/libjli.so
/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/jli/libjli.so

...しかし、なぜリストにないのか疑問に思いますldd。明らかに、これは既知の依存関係ですが、パスがわかりませんか?助けてくれてありがとう!

ベストアンサー1

/etc/ld.so.conf* または ldconfig を台無しにせずにすぐに動作する必要があり、非常に簡単に行われます。 chrootに/ procをマウントするだけです。実際のルートfsの/ etc / fstabで、次の行を使用してこれを行います。

/proc /var/chroot/ia32/proc バインディングなし

したがって、実際の/procにバインドします。

すべてhttps://github.com/cedric-vincent/PRoot/issues/9、ld-linux.so(私の意見では)/proc/self/exeを調べて、$ ORIGINがobjdump -pのRPATHエントリに置き換えられていることを確認します。

私は何度もこれに刺され、それを再発見しなければなりませんでしたか?ああ、強くて賢いGoogleだから、次はできるだけ早く私をここに連れて行ってください。未来の私が過去の膝の上で再び学ぶことができるように!

おすすめ記事