Ecco lo scenario che sto avendo:In che modo il chroot influisce sul collegamento dinamico?
Ho creato un ambiente debootstrap ubuntu maverick (64-bit). L'ho posizionato a /env/mav/
sul mio sistema lucido Ubuntu (64 bit). Posso chroot
in /env/mav
e posso utilizzare perfettamente un sistema anticonformista.
Posso perfino usare i programmi lucidi anche al di fuori dell'ambiente chroot. Questo è /env/mav/bin/ls
verrà eseguito.
Tuttavia, ho notato che se modifico LD_LIBRARY_PATH
di essere /env/mav/lib
[1] [2]
ogni singolo programma (sia lucido e anticonformista) corro in crash immediatamente. (ad esempio, ls ha come risultato un segfault). kern.log mostra:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
Tuttavia, chiaramente se chroot
in /env/mav
, ogni programma sta funzionando benissimo. E non tutte le biblioteche vengono lette dal carcere (/env/mav
) /lib
? Quindi qual è la differenza tra chroot
e la modifica di LD_LIBRARY_PATH
in questo contesto?
Inoltre, se io:
mount -B /env /env/mav/env
e quindi chroot /env
e quindi impostare LD_LIBRARY_PATH
di essere /env/mav/lib
, tutto funziona ancora bene.
Sono a corto per ciò che sta accadendo internamente qui. Ci sono alcuni diari interni memorizzati da qualche parte? Chroot fa qualcosa di magico?
[1] Il caso di utilizzo consente di eseguire programmi dall'ambiente maverick vincolato correttamente a librerie di linker dinamicamente esternamente al di fuori della prigione anticonformista.
[2] Questo è solo un esempio abbreviato. In realtà /usr/lib
, ecc. Sono tutti inclusi. Compreso tutto il "ambiente velenoso" dell'ambiente/libativo dell'ambiente; non ci sono problemi nell'usare le altre directory di libreria maverick.
Grazie per la spiegazione di come funziona il sistema di collegamento linux. Ha funzionato perfettamente – UsAaR33
Risulta l'arresto avvenuto con il collegamento di libpthread.so a libc.so (usando LD_DEBUG). Da notare per le persone future che arrivano, ld.so --list, ti permette di fare ldd con diversi linker. – UsAaR33