Aquí está el escenario que estoy teniendo:¿Cómo afecta chroot a la vinculación dinámica?
He creado un entorno debootstrap ubuntu maverick (64-bit). Lo coloqué en /env/mav/
en mi sistema lúcido ubuntu (64 bits). Puedo chroot
en /env/mav
y puedo utilizar un sistema inconformista a la perfección.
Incluso puedo usar los programas lúcidos bien fuera del entorno chrooted. Eso es /env/mav/bin/ls
se ejecutará.
Sin embargo, me di cuenta de que si modifico LD_LIBRARY_PATH
sea /env/mav/lib
[1] [2]
cada programa (tanto lúcido y Maverick) corro se colgará al instante. (por ejemplo, ls da como resultado una segfault). kern.log muestra:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
Sin embargo, con claridad si chroot
en /env/mav
, cada programa está funcionando muy bien. ¿Y no se están leyendo todas las bibliotecas de los encarcelados (/env/mav
) /lib
? Entonces, ¿cuál es la diferencia entre chroot
y la modificación de LD_LIBRARY_PATH
en este contexto?
Por otra parte, si:
mount -B /env /env/mav/env
y luego chroot /env
y luego configurar LD_LIBRARY_PATH
a ser /env/mav/lib
, todo lo que todavía funciona muy bien.
No entiendo lo que está pasando aquí. ¿Hay algún elemento interno ld almacenado en algún lugar? ¿Chroot hace algo mágico?
[1] El caso de uso es para ejecutar programas desde el entorno inconformista enlazado correctamente para disolver bibliotecas dinámicamente vinculadas fuera de la cárcel inconformista.
[2] Esto es solo un ejemplo abreviado. En realidad, /usr/lib
, etc. están incluidos. Incluyendo los "venenos" del entorno inconformista/lib todo; no hay problemas al usar los otros directorios de la biblioteca Maverick.
Gracias por la explicación de cómo funciona el sistema de enlace de Linux. Funcionó perfectamente – UsAaR33
Desactiva el bloqueo producido al vincular libpthread.so a libc.so (utilizando LD_DEBUG). De nota para las personas que vienen en el futuro, ld.so --list, le permite hacer ldd con diferentes enlazadores. – UsAaR33