Citando prelink
manpage:
prelink is a program that modifies ELF shared libraries and ELF dynamically linked binaries […]
Eu tenho um monte de servidores rodando o CentOS 5.3 de 32 bits. Eles foram todos instalados mais ou menos ao mesmo tempo usando o mesmo método de instalação (CD ou net install).
Recentemente, notei um problema com um dos hosts, que relata erros como os seguintes ao tentar verificar um pacote RPM:
[sagi@server3 ~]$ rpm -qV coreutils 2>&1| grep mkdir
prelink: /bin/mkdir: at least one of file's dependencies has changed since prelinking
S.?..... /bin/mkdir
[sagi@server3 ~]$
A mensagem de prelink é a que primeiro me chamou a atenção. Aparece frequentemente ao tentar fazer qualquer tipo de operações relacionadas ao RPM. Mas também, o comando verify reporta que há uma incompatibilidade de tamanho para o pacote mkdir, o que eu não entendo.
Eu tentei executar o mesmo comando em alguns dos outros servidores e nenhum deles tem o mesmo problema. O tamanho de / bin / mkdir e a versão de coreutils são idênticos no servidor problemático e em todos os outros hosts, por exemplo:
[sagi@server3 ~]$ rpm -q coreutils
coreutils-5.97-19.el5
[sagi@server3 ~]$ ls -l /bin/mkdir
-rwxr-xr-x 1 root root 29852 Jan 21 2009 /bin/mkdir
[sagi@server3 ~]$
[sagi@server4 ~]$ rpm -q coreutils
coreutils-5.97-19.el5
[sagi@server4 ~]$ ls -l /bin/mkdir
-rwxr-xr-x 1 root root 29852 Jan 21 2009 /bin/mkdir
[sagi@server4 ~]$
Mas o MD5 do / bin / mkdir é diferente em cada host:
server1 f62677e910d9a3fc3605be5e3e59bb4f /bin/mkdir
server2 7678ac9fdf01a80e4dc45cb8a6929e2b /bin/mkdir
server3 4fe934b9ebd16ba773cf347ebf803225 /bin/mkdir
server4 24800902f32af19879ed5fda0f3ea9d0 /bin/mkdir
server5 a0a02615022c7f607709792a5ceaad0e /bin/mkdir
E assim por diante. / bin / mkdir é apenas uma amostra, eu encontrei o mesmo problema com todos os utilitários que eu verifiquei.
Portanto, tenho duas perguntas: 1. Por que o MD5 do mesmo arquivo seria diferente em diferentes máquinas? 2. Qual pode ser a causa da mensagem de pré-toque mencionada acima?
Atualização: Eu consegui me livrar dos erros de prelink executando manualmente o script /etc/cron.daily/prelink. Eu ainda não entendo qual é a causa do diferente MD5.
Prelink faz exatamente isso. Ele é executado em todas as bibliotecas vinculadas dinamicamente a um aplicativo e modifica o binário para que o processo de vinculação em tempo de execução seja mais eficiente. Portanto, se você atualizar uma das bibliotecas vinculadas, precisará executar novamente o prelink. O aviso foi apenas avisando que era esse o caso.
BTW, o prelink tem uma opção '--md5' que você pode usar. A saída desse comando deve ser a mesma em todos os seus hosts.