Я побежал yum update
на моем веб-сервере CentOS5 несколько дней назад. Сегодня только заметил, что у меня 3 httpd- * rpms!
Как я могу получить три RPM для httpd (на других моих серверах только один 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]#
Это похоже на классический случай прерванных обновлений. Обновление выполняется в два этапа: новые файлы устанавливаются и новые пакеты добавляются в базу данных, затем все старые файлы удаляются, а старый пакет удаляется из базы данных. Если обновление будет прервано между этими двумя этапами, вы получите такую несогласованность.
Что бы я сделал в этой ситуации (это потребует короткого периода обслуживания):
Сохраните копию ваших файлов конфигурации. RPM все равно сделает это с .rpmsave
расширение для любых файлов, которые вы изменили, но лучше быть уверенным вдвойне.
Принудительно удалить все пакетов:
rpm -e --allmatches httpd
Переустановите пакет:
yum -y install httpd
Восстановите ваши файлы конфигурации.
Я бы также перестроил базу данных об / мин. Обычно я просто делаю:
cd /var/lib/rpm
rm __db*
rpm --rebuilddb
но вот более длинный, безопасный и официальный метод: