我所面临的情况是:我设置了一台CentOS 5.9机器,它应该尽可能接近另一台CentOS 5.9机器的副本,而不是克隆人。使用yum,我(尽可能)在目标机器上安装了所有也安装在源机器上的包(如yum list installed和rpm -qa所报告的)。之后,我使用md5deep查找目标机器上仍然缺少的文件。我发现了比我预期更多的丢失文件,从而发现了我当前的问题。
在目标和源计算机上都安装了traceroute-3:2.0.1-6.el5.i 386包(如yum list installed)。在这两台机器上,repoquery --info --show-duplicates traceroute只列出了包的这个版本,并告诉我可以在基本存储库中找到它。在这两台机器上,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在两台机器上的大小相同。
然而,当我在这两台机器上执行md5sum /bin/traceroute时,我得到了不同的结果。xxd & diff显示了几十个字节的不同,差异似乎存在于实际代码中(尚未将它们解压缩,但更改的部分不是人类可读的字符串)。traceroute只是一个随机的例子,在/bin、/sbin和/lib中还有几十个不同的文件。
知道怎么回事吗?我一直有这样的印象,只要编译/编辑不是安装的一部分,安装相同的软件包两次就会产生完全相同的文件。至少我希望rpm -V能告诉我那些被篡改的文件。如果yum有一个工具来告诉我它从哪个存储库下载了RPM-文件,这会有帮助,但据我所知,这个工具在我的yum版本中并不存在(3.2.22)。要明确的是: repoquery没有告诉我包是从哪个存储库下载的,它只告诉我它在哪里可用。如果相同的包在2个或更多启用的存储库中可用,repoquery将列出所有包。百胜可以决定它想要哪一个副本,而且它似乎没有将这个决定记录在任何日志文件中。
发布于 2013-10-05 00:54:58
我以前参加过RHEL发行版。一个比我聪明的人发现了这种行为的根源:预链接
要测试它,请在您的两个系统上运行以下命令,这些系统之前都标识了不同的散列,并比较了输出。
/usr/sbin/prelink -y /bin/traceroute | md5sumhttps://serverfault.com/questions/543775
复制相似问题