为什么用yum两次安装相同的软件包不给我相同的文件?

我所面对的情况是:我build立了一个CentOS 5.9机器,该机器应该尽可能地靠近另一个CentOS 5.9机器的副本,但不是克隆机器。 使用yum,我(尽可能)安装了目标机器上的所有软件包,这些软件包也安装在源计算机上(由yum list installedyum list installedrpm -qa )。 之后,我使用md5deep来查找目标机器上仍然丢失的文件。 我发现比我预期的更多的丢失文件,从而发现我目前的问题。

在目标和源机器上,软件包traceroute-3:2.0.1-6.el5.i386被安装(说yum list installed )。 在两台机器上repoquery --info --show-duplicates traceroute只列出这个版本的软件包,并告诉我它可以在基本库中find。 在这两台机器上rpm -ql traceroute-2.0.1-6.el5.i386列出了相同的文件。 在这两台机器上rpm -V traceroute-2.0.1-6.el5.i386告诉我,安装进行顺利(没有文件修改/丢失)。 traceroute-2.0.1-6.el5.i386.rpm的快速浏览只显示了一个二进制文件(/ bin / traceroute),符号链接和文档,所以我不希望编译发生在我安装该包(但我不是一个RPM专家,它只是快速查看,不是一个彻底的考试)。 file /bin/traceroute告诉我: /bin/traceroute: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped在两台机器上/bin/traceroute: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped 。 / bin / traceroute在两台机器上具有相同的大小。

然而,当我在两台机器上执行md5sum /bin/traceroute ,我得到不同的结果。 xxd和diff显示几十个字节不同,差异似乎在实际的代码中(还没有反汇编,但更改的部分不是人类可读的string)。 traceroute只是一个随机的例子,在/ bin,/ sbin&/ lib中有几十个不同的文件。

任何想法是怎么回事? 我一直觉得,安装相同的软件包两次会导致完全相同的文件,只要编译/编辑不是安装的一部分。 至less我希望rpm -V会告诉我有关被篡改的文件。 如果yum有一个工具来告诉我它从哪个版本库下载了RPM文件,这将有所帮助,但据我所知,这个工具在我的yum(3.2.22)版本中不存在。 要清楚:repoquery不告诉我一个包已经从哪个版本库下载,它只告诉我它在哪里可用。 如果在两个或多个启用的存储库中提供相同的软件包,则repoquery会列出所有软件包。 百胜餐饮可以决定它想要的重复,并且它似乎不logging任何日志文件中的这个决定。

我之前在RHEL发行版中运行过。 比我聪明的人确定了行为的来源:预先链接

要对其进行testing,请在以前识别不同散列的两个系统上运行以下内容,并比较输出。

 /usr/sbin/prelink -y /bin/traceroute | md5sum