Ich schreibe Skripte für die Erstellung von Chroot-Gefängnissen und ein Teil dieser Automatisierung umfasst das Kopieren verschiedener ausführbarer Dateien und ihrer Abhängigkeiten in das Gefängnis. Ich verwende die folgende Bash-Zeile, um die Dateipfade aus einer Liste von Abhängigkeiten (zum Beispiel für Java) zu analysieren:
$ 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
Dies funktioniert gut für Node.js und Python, aber wenn ich versuche, java
aus dem Gefängnis heraus auszuführen , erhalte ich eine Fehlermeldung:
java: Fehler beim Laden von gemeinsam genutzten Bibliotheken: libjli.so: Datei für gemeinsam genutzte Objekte kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis
Es stellt sich heraus, dass der Pfad libjli.so in der Liste der Abhängigkeiten fehlt ... zumindest die, ldd
die uns zeigen (Zeile 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)
Ich habe die Datei gefunden ...
$ 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
... aber ich würde gerne wissen, warum es nicht mit aufgeführt ist ldd
. Es ist anscheinend eine bekannte Abhängigkeit, aber der Pfad ist unbekannt? Jede Hilfe wird geschätzt!