为什么`rpm`显示3个httpd包,哪一个提供了真正的httpd?

为什么`rpm`显示3个httpd包,哪一个提供了真正的httpd?

yum update几天前,我在我的 CentOS5 网络服务器上运行了它。今天我才注意到我有 3 个 httpd-* rpm!

我怎么会得到三个 httpd RPM(我的其他服务器只有一个 httpd rpm)。我想确保我的服务器有一个修补过的、更新过的版本/usr/sbin/httpd。我如何知道这些包中的哪一个提供了 httpd 二进制文件/usr/sbin/httpd

[root@node1 ~]# rpm -q httpd
httpd-2.2.3-76.el5.centos
httpd-2.2.3-78.el5.centos
httpd-2.2.3-83.el5.centos

[root@node1 ~]# /usr/sbin/httpd -V |grep version
Server version: Apache/2.2.3

[root@node1 ~]# rpm -q httpd-2.2.3-76.el5.centos --list |grep -w /usr/sbin/httpd
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
[root@node1 ~]# rpm -q httpd-2.2.3-78.el5.centos --list |grep -w /usr/sbin/httpd
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
[root@node1 ~]# rpm -q httpd-2.2.3-83.el5.centos --list |grep -w /usr/sbin/httpd
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
[root@node1 ~]# 

root@node1 ~]# rpm -q --provides httpd |grep -w httpd
config(httpd) = 2.2.3-76.el5.centos
httpd-mmn = 20051115
httpd = 2.2.3-76.el5.centos
config(httpd) = 2.2.3-78.el5.centos
httpd-mmn = 20051115
httpd = 2.2.3-78.el5.centos
config(httpd) = 2.2.3-83.el5.centos
httpd-mmn = 20051115
httpd = 2.2.3-83.el5.centos

更新:回答马克·瓦格纳的问题:

[root@node1 ~]# rpm -q -f /usr/sbin/httpd 
httpd-2.2.3-76.el5.centos
httpd-2.2.3-78.el5.centos
httpd-2.2.3-83.el5.centos
[root@node1 ~]# rpm -V httpd-2.2.3-83.el5.centos
S.5.....  c /etc/logrotate.d/httpd
S.5.....  c /etc/rc.d/init.d/httpd
....L...    /var/www

更新2:尝试重建 RPM 数据库,但没有成功

[root@node1 ~]# cd /var/lib
[root@node1 lib]# tar zcvf /var/preserve/rpmdb-`date +"%d%m%Y"`.tar.gz rpm
[root@node1 lib]# cd /var/lib/rpm
[root@node1 rpm]# rm -f __db*
[root@node1 rpm]# /usr/lib/rpm/rpmdb_verify Packages
[root@node1 rpm]# mv Packages Packages.orig
[root@node1 rpm]# /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load P
ackages
[root@node1 rpm]# /usr/lib/rpm/rpmdb_verify Packages
[root@node1 rpm]# rpm -qa 1> /dev/null
[root@node1 rpm]# rpm -v --rebuilddb
[root@node1 rpm]# rpm -q httpd
httpd-2.2.3-76.el5.centos
httpd-2.2.3-78.el5.centos
httpd-2.2.3-83.el5.centos
[root@node1 rpm]# 

答案1

我也会重建 rpm 数据库。我通常这样做:

cd /var/lib/rpm
rm __db*
rpm --rebuilddb

但这里有更长、更安全、更官方的方法:

http://www.rpm.org/wiki/Docs/RpmRecovery

答案2

这看起来像是中断更新的典型案例。更新分为两个阶段:安装新文件并将新软件包添加到数据库,然后删除所有旧文件并将旧软件包从数据库中删除。如果更新在这两个步骤之间中断,就会出现这种不一致的情况。

针对这种情况我会采取以下措施(这需要一个短暂的维护期):

  1. 保存配置文件的副本。RPM 无论如何都会执行此操作,并.rpmsave为您修改的任何文件添加扩展名,但最好再三确认。

  2. 强行移除全部软件包:

    rpm -e --allmatches httpd
    
  3. 重新安装包:

    yum -y install httpd
    
  4. 恢复您的配置文件。

相关内容