Почему «rpm» показывает 3 пакета httpd, и какой из них предоставляет настоящий httpd?

Несколько дней назад я запустил yum update на моем веб-serverе CentOS5. Сегодня я только заметил, что у меня есть 3 httpd- * rpms!

Как я могу get три RPM для httpd (у моих других serverов есть только один httpd rpm). Я хочу убедиться, что у моего serverа есть исправленная, обновленная версия /usr/sbin/httpd . Как я могу определить, какой из этих пакетов предоставляет binary file 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 Версия serverа: Apache / 2.2.3 [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 ~] # [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 

Update2 : попытка восстановить базу данных 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]# 

2 Solutions collect form web for “Почему «rpm» показывает 3 пакета httpd, и какой из них предоставляет настоящий httpd?”

Я бы восстановил базу данных rpm. Обычно я просто делаю:

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

но вот более длинный, более безопасный, официальный метод:

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

Это похоже на classический случай прерванных обновлений. Обновление выполняется в два этапа: новые fileы устанавливаются и новые пакеты добавляются в базу данных, затем удаляются старые fileы и удаляется старый пакет из базы данных. Если обновление прерывается между этими двумя шагами, вы получаете такую ​​несогласованность.

Что бы я сделал с этой ситуацией (для этого потребуется короткое window обслуживания):

  1. Сохраните копию fileов конфигурации. RPM будет делать это в любом случае с расширением .rpmsave для любых fileов, которые вы изменили, но лучше всего быть вдвойне уверенными.

  2. Принудительно удалите все пакеты:

     rpm -e --allmatches httpd 
  3. Переустановите пакет:

     yum -y install httpd 
  4. Восстановите конфигурационные fileы.

  • Обновление версии mysql
  • Установка пакетов CentOS на Fedora из репозитория
  • Запретить перезагрузку после обновления yum
  • Проблемы с конфигурацией репозитория Centos Yum
  • Можно ли добавить mod_ssl на существующий server Apache с yum?
  • Centos: Как установить все пакеты одного serverа на другой?
  • Установка репозиториев yum, указанных в fileе кикстарта
  • yum update rpm пакеты, установленные вручную
  • Yum "Ошибка сегментации" в centos
  • Обновление Python, сломал yum и python
  • Обновления yum - это fileы .rpmnew, когда-либо критические / важные, чтобы действовать?