Estou usando o RHEL 5 (64 bits) e me deparei com uma inconsistência com o rpm / yum. Quando tento instalar um RPM de 32 bits, sou informado de que o RPM já está instalado quando apenas a versão de 64 bits existe no disco:
$ rpm -Uvh ./libsysfs-2.1.0-1.el5.i386.rpm
Preparing... ########################### [100%]
package libsysfs-2.1.0-1.el5.i386 is already installed
$ rpm -q libsysfs --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n
libsysfs-2.1.0-1.el5.x86_64
Eu tentei reconstruir o banco de dados, mas recebo o mesmo erro.
Eu verifiquei que o RPM não está realmente instalado. Quando executo rpm -qp ./libsysfs-2.1.0-1.el5.i386.rpm
, posso confirmar que os arquivos listados não existem no sistema.
O que estou perdendo? Há algo mais que o RPM analise para ver se um RPM já está instalado?
Editar 1
Não tenho certeza se isso é algo a ver com o próprio RPM ou não. Depois de executar updatedb
, apagando o RPM com rpm -e libsysfs
e tentando instalar os dois simultaneamente, recebo um erro que o pacote já foi adicionado:
$ rpm -e libsysfs
$ rpm -Uvh ./libsysfs-2.1.0-1.el5.i386.rpm ./libsysfs-2.1.0-1.el5.x86_64.rpm
warning: package libsysfs = 2.1.0-1.el5 was already added, skipping libsysfs < 2.1.0-1.el5
Preparing... ########################### [100%]
1:libsysfs ########################### [100%]
Existem 19 outros RPMs que estão fazendo a mesma coisa.
Editar 2
O pacote de 32 bits ainda não será instalado.
Ao tentar descobrir o que está acontecendo, eu pude instalar forçosamente o rpm rpm -Uvh --force libsysfs-2.1.0-1.el5.i386.rpm
e ele foi instalado com sucesso.
Posso verificar se os arquivos listados dentro do RPM de 32 bits e de 64 bits agora existem no sistema de arquivos.
No entanto, rpm
e yum
agora ambos pensam que somente a versão de 32 bits está no disco:
$ rpm -q libsysfs --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n
libsysfs-2.1.0-1.el5.i386
Eu posso apagar com sucesso o RPM de 32 bits, mas o comando rpm
agora não reconhece mais a variante de 64 bits, mesmo que todos os arquivos estejam no lugar:
$ rpm -e libsysfs.i386
$ rpm -q libsysfs --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n
package libsysfs is not installed
$ rpm -qpl ./libsysfs-2.1.0-1.el5.x86_64.rpm
/usr/lib64/libsysfs.so.2
/usr/lib64/libsysfs.so.2.0.1
...
/usr/share/doc/libsysfs-2.1.0/libsysfs.txt
$ ls /usr/lib64/libsysfs.so.2
/usr/lib64/libsysfs.so.2
Reconstruindo o banco de dados RPM, o RPM libsysfs ainda não foi encontrado.
$ cd /var/lib/rpm
$ rm -f __db*
$ /usr/lib/rpm/rpmdb_verify Packages
$ mv Packages Packages.orig
$ /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load Packages
$ /usr/lib/rpm/rpmdb_verify Packages
$ rpm -v --rebuilddb
Estou chegando à conclusão de que deve haver algum tipo de corrupção do banco de dados RPM, mas não tenho idéia de onde ir a partir daqui.
Editar 3
Para tentar entender melhor o que está acontecendo, eu apaguei o libsysfs e tentei a opção yum localinstall
, mas ainda parece que o instalador vê as opções de 32 e 64 bits como a mesma coisa:
$ yum localinstall ./libsysfs-2.1.0-1.el5.x86_64.rpm ./libsysfs-2.1.0-1.el5.i386.rpm
...
Resolving Dependencies
--> Running transaction check
---> Package libsysfs.i386 0:2.1.0-1.el5 set to be updated
---> Package libsysfs.x86_64 0:2.1.0-1.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
Packages Arch Version Repository Size
===============================================================================
Installing:
libsysfs i386 2.1.0-1.el5 /libsysfs-2.1.0-1.el5.i386 140 k
libsysfs x86_64 2.1.0-1.el5 /libsysfs-2.1.0-1.el5.x86_64 141 k
Transaction Summary
===============================================================================
Install 2 Package(s)
Upgrade 0 Package(s)
Total Size: 281 k
...
Running Transaction:
Installing : libsysfs 1/1
Installed products updated.
Installed:
libsysfs.i386 0:2.1.0-1.el5 libsysfs.x86_64 0:2.1.0-1.el5
Complete!
Eu noto que em todos os lugares, mas onde ela realmente faz a instalação, ambas as arquiteturas são mencionadas, mas a instalação ainda faz apenas uma.