Eu reconstruiria o banco de dados rpm também. Eu costumo apenas fazer:
cd /var/lib/rpm
rm __db*
rpm --rebuilddb
mas aqui está o método oficial mais seguro:
Corri yum update
no meu servidor do CentOS5 há alguns dias. Hoje só reparei que tenho 3 httpd- * rpms!
Como posso acabar com três RPMs para o httpd (Meus outros servidores têm apenas um httpd rpm). Quero garantir que meu servidor tenha uma versão atualizada e corrigida de /usr/sbin/httpd
. Como posso saber qual desses pacotes fornece o binário httpd em /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
Atualizar : respondendo às perguntas de Mark Wagner:
[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 : tentando reconstruir o banco de dados RPM, sem sorte
[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]#
Eu reconstruiria o banco de dados rpm também. Eu costumo apenas fazer:
cd /var/lib/rpm
rm __db*
rpm --rebuilddb
mas aqui está o método oficial mais seguro:
Isso parece um caso clássico de atualizações interrompidas. Uma atualização é feita em dois estágios: os novos arquivos são instalados e os novos pacotes são adicionados ao banco de dados; em seguida, todos os arquivos antigos são removidos e o pacote antigo é removido do banco de dados. Se a atualização for interrompida entre essas duas etapas, você terá esse tipo de inconsistência.
O que eu faria com essa situação é (isso exigirá uma breve janela de manutenção):
Salve uma cópia de seus arquivos de configuração. O RPM fará isso de qualquer maneira com uma extensão .rpmsave
para todos os arquivos que você modificou, mas é melhor ter certeza disso.
Remova todos todos dos pacotes:
rpm -e --allmatches httpd
Reinstale o pacote:
yum -y install httpd
Restaure seus arquivos de configuração.