Sto scrivendo la creazione di jroot jail e parte di quella automazione include la copia di vari eseguibili e le loro dipendenze nella jail. Sto usando la seguente riga bash per analizzare i percorsi dei file da un elenco di dipendenze (ad esempio per 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
Funziona benissimo per Node.js e Python, ma quando provo ad eseguire java
dall'interno del carcere, ricevo un errore:
java: errore durante il caricamento delle librerie condivise: libjli.so: impossibile aprire il file oggetto condiviso: nessun file o directory
Si scopre che il percorso libjli.so manca dall'elenco delle dipendenze ... almeno quelle che ldd
ci mostrano (riga 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)
Ho trovato il file ...
$ 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
... ma vorrei sapere perché non è stato elencato ldd
. Apparentemente è una dipendenza nota, ma il percorso è sconosciuto? Qualsiasi aiuto è apprezzato!