CentOS - bin/* MD5 在相同主机之间不同

sag*_*agi 3 centos rpm

我有一堆运行 CentOS 5.3 32 位的服务器。它们都是使用相同的安装方法(CD 或网络安装)同时安装的。

我最近注意到其中一台主机存在问题,它在尝试验证 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 ~]$
Run Code Online (Sandbox Code Playgroud)

链接前消息是第一个引起我注意的消息。在尝试执行任何类型的 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 ~]$
Run Code Online (Sandbox Code Playgroud)

但是 /bin/mkdir 的 MD5 在每个主机上是不同的:

server1  f62677e910d9a3fc3605be5e3e59bb4f  /bin/mkdir
server2  7678ac9fdf01a80e4dc45cb8a6929e2b  /bin/mkdir
server3  4fe934b9ebd16ba773cf347ebf803225  /bin/mkdir
server4  24800902f32af19879ed5fda0f3ea9d0  /bin/mkdir
server5  a0a02615022c7f607709792a5ceaad0e  /bin/mkdir
Run Code Online (Sandbox Code Playgroud)

等等。/bin/mkdir 只是一个示例,我检查的每个实用程序都遇到了相同的问题。

因此,我有两个问题: 1. 为什么完全相同的文件的 MD5 在不同的机器上会不同?2. 上面提到的预链接消息可能是什么原因?

更新:我通过手动运行 /etc/cron.daily/prelink 脚本设法摆脱了预链接错误。我仍然不明白不同 MD5 的原因是什么。

Cha*_*utt 6

Prelink 正是这样做的。它运行动态链接到应用程序的所有库并修改二进制文件,以便运行时的链接过程更加高效。因此,如果您更新链接库之一,则必须重新运行 prelink。警告只是让您知道情况确实如此。

顺便说一句,prelink 有一个您可以使用的“--md5”选项。该命令的输出在所有主机上都应该相同。


小智 5

引用手册prelink页:

prelink 是一个修改ELF 共享库和 ELF 动态链接二进制文件的程序 […]