Por que o 'rpm' mostra 3 pacotes httpd e qual deles fornece o httpd real?

3

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]# 
    
por Stefan Lasiewski 31.10.2013 / 19:47

2 respostas

1

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:

link

    
por 20.11.2013 / 19:35
1

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):

  1. 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.

  2. Remova todos todos dos pacotes:

    rpm -e --allmatches httpd
    
  3. Reinstale o pacote:

    yum -y install httpd
    
  4. Restaure seus arquivos de configuração.

por 20.11.2013 / 22:01