usando strace
he encontrado un comportamiento de ldconfig
(glibc), no puedo entenderlo
lstat("/usr/lib/libext2fs.so.2", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
unlink("/usr/lib/libext2fs.so.2") = 0
symlink("libselinux.so.1", "/usr/lib/libext2fs.so.2") = 0
¿Existe alguna necesidad de tener la biblioteca de objetos compartida para que ext2fs
( libext2fs.so.2
) sea un enlace simbólico libselinux.so.1
?
¿Cómo sabe ldconfig qué hacer? No me parece lógico que este binario estático /usr/bin/ldconfig
tenga ese comportamiento codificado, ¿verdad? Sin embargo su archivo de configuración /etc/ld.so.conf
no me ayuda mucho a despejar ese misterio.
Lo que hace que todo esto sea aún más confuso/sospechoso con las herramientas de mi distribución (Arch Linux) es que no puedo encontrar ningún paquete al que pertenezca el archivo.
$ pkgfile /usr/lib/libselinux.so.1
no muestra ningún paquete, mientras que $ pkgfile /usr/lib/libext2fs.so
salidascore/e2fsprogs
Entonces mi pregunta es específicamente:
- cuál es el papel de este libselinux.so.1 aquí
- cómo ldconfig decide crear ese enlace simbólico (que por cierto se rompe
e2fsck
)
Respuesta1
Probablemente en algún momento se cambió el nombre de su biblioteca por error de /usr/lib/libselinux.1
a /usr/lib/libext2fs.so.2
. Esto no impideldconfigpara encontrar el nombre esperado del contenido de la biblioteca (en lugar del nombre del archivo de la biblioteca) y así vincular el nombre "correcto". Esto se puede verificar copiando cualquier biblioteca a algún directorio y preguntandoldconfigpara actualizar (únicamente) este directorio.
Aquí el equivalente en Debian 9:
$ mkdir /tmp/foo
$ cp -aL /lib/x86_64-linux-gnu/libselinux.so.1 /tmp/foo/libmytest.so.2
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24 2017 /tmp/foo/libmytest.so.2
$ /sbin/ldconfig -v -n /tmp/foo
/tmp/foo:
libselinux.so.1 -> libmytest.so.2 (changed)
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24 2017 /tmp/foo/libmytest.so.2
lrwxrwxrwx 1 test test 14 Jun 5 23:33 /tmp/foo/libselinux.so.1 -> libmytest.so.2
Por ciertolibselinuxes una biblioteca común para software que trata con SELinux. Incluso los comandos ls
, cp
, mv
, ps
suelen estar vinculados con él (para su respectiva -Z
opción).