У меня есть несколько серверов под управлением 32-разрядной версии CentOS 5.3. Все они были установлены примерно в одно время с использованием одного и того же метода установки (с компакт-диска или по сети).
Недавно я заметил проблему с одним из хостов, который при попытке проверить пакет 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 ~]$
Сообщение prelink - это первое, что привлекло мое внимание. Это часто появляется при попытке выполнить какие-либо операции, связанные с RPM. Но также команда verify сообщает, что существует несоответствие размера для пакета mkdir, чего я не понимаю.
Я попытался запустить ту же команду на некоторых других серверах, и ни у одного из них нет такой проблемы. Размер / bin / mkdir и версия coreutils идентичны на проблемном сервере и на всех других хостах, например:
[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 ~]$
Но MD5 / bin / mkdir на каждом хосте разный:
server1 f62677e910d9a3fc3605be5e3e59bb4f /bin/mkdir
server2 7678ac9fdf01a80e4dc45cb8a6929e2b /bin/mkdir
server3 4fe934b9ebd16ba773cf347ebf803225 /bin/mkdir
server4 24800902f32af19879ed5fda0f3ea9d0 /bin/mkdir
server5 a0a02615022c7f607709792a5ceaad0e /bin/mkdir
И так далее. / bin / mkdir - это всего лишь образец, я сталкивался с одной и той же проблемой с каждой проверенной мной утилитой.
Поэтому у меня есть два вопроса: 1. Почему MD5 одного и того же файла на разных машинах может отличаться? 2. В чем может быть причина упомянутого выше сообщения prelink?
Обновление: мне удалось избавиться от ошибок предварительной ссылки, вручную запустив скрипт /etc/cron.daily/prelink. Я до сих пор не понимаю, в чем причина разных MD5.
Prelink делает именно это. Он проходит через все библиотеки, динамически связанные с приложением, и модифицирует двоичный файл, чтобы процесс связывания во время выполнения был более эффективным. Поэтому, если вы обновите одну из связанных библиотек, вам придется повторно запустить предварительную ссылку. Предупреждение просто сообщало вам, что это так.
Кстати, в prelink есть опция --md5, которую вы можете использовать. Вывод этой команды должен быть одинаковым на всех ваших хостах.
Цитирование prelink
страница руководства:
prelink - это программа, которая изменяет Общие библиотеки ELF и динамически подключаемые двоичные файлы ELF […]