usando, strace
encontrei um comportamento de ldconfig
(glibc), não consigo entender
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 alguma necessidade de que a biblioteca de objetos compartilhados para ext2fs
( libext2fs.so.2
) seja um link simbólico para libselinux.so.1
.
Como o ldconfig sabe o que fazer? Não me parece lógico que esse binário estático /usr/bin/ldconfig
tenha tal comportamento codificado, certo. Porém seu arquivo de configuração /etc/ld.so.conf
não me ajuda muito a esclarecer esse mistério.
O que torna tudo isso ainda mais confuso/suspeito com minhas ferramentas de distribuição (Arch Linux) é que não consigo encontrar nenhum pacote ao qual o arquivo pertença.
$ pkgfile /usr/lib/libselinux.so.1
não mostra nenhum pacote, enquanto $ pkgfile /usr/lib/libext2fs.so
saídascore/e2fsprogs
Então minha pergunta é especificamente:
- qual é o papel deste libselinux.so.1 aqui
- como o ldconfig decide criar esse link simbólico (que aliás. quebra
e2fsck
)
Responder1
Sua biblioteca provavelmente foi renomeada por engano em algum momento de /usr/lib/libselinux.1
para /usr/lib/libext2fs.so.2
. Isto não impedeldconfigpara encontrar o nome esperado do conteúdo da biblioteca (em vez do nome do arquivo da biblioteca) e, assim, vincular o nome "correto". Isso pode ser verificado copiando qualquer biblioteca para algum diretório e perguntandoldconfigpara atualizar (apenas) este diretório.
Aqui o equivalente no 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 falar nissolibselinuxé uma biblioteca comum para software que lida com SELinux. Até mesmo os comandos ls
, cp
, mv
, ps
geralmente estão vinculados a ele (para sua respectiva -Z
opção).