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 ter a biblioteca de objetos compartilhados para ext2fs
( libext2fs.so.2
) ser 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 esse comportamento codificado, certo. No entanto, 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) 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 btw. quebra
e2fsck
)
Sua biblioteca provavelmente foi renomeada por engano em algum momento de
/usr/lib/libselinux.1
para/usr/lib/libext2fs.so.2
. Isso não impede que o ldconfig encontre o nome esperado no conteúdo da biblioteca (em vez do nome do arquivo da biblioteca) e, assim, vincule o nome "correto". Isso pode ser verificado copiando qualquer biblioteca para algum diretório e pedindo ao ldconfig para atualizar (somente) este diretório.Aqui o equivalente no Debian 9:
A propósito, libselinux é uma biblioteca comum para software que lida com SELinux . Mesmo os comandos
ls
,cp
,mv
,ps
geralmente são vinculados a ele (para sua respectiva-Z
opção).