Je scénarise la création de prisons chroot et une partie de cette automatisation comprend la copie de divers exécutables et de leurs dépendances dans la prison. J'utilise la ligne bash suivante pour analyser les chemins de fichiers d'une liste de dépendances (pour java, par exemple):
$ 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
Cela fonctionne très bien pour Node.js et Python, mais lorsque j'essaie de l'exécuter java
depuis la prison, j'obtiens une erreur:
java: erreur lors du chargement des bibliothèques partagées: libjli.so: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type
Il s'avère que le chemin libjli.so est absent de la liste des dépendances ... du moins celles qui ldd
nous le montrent (ligne 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)
J'ai trouvé le fichier ...
$ 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
... mais j'aimerais savoir pourquoi il ne figure pas dans la liste ldd
. Il s'agit apparemment d'une dépendance connue, mais le chemin est inconnu? Toute aide est appréciée!