24/05/2013
Gestione package multipli su Rhel/Centos
Lavorando su server datati o che sono passati attraverso innumerevoli contratti o gruppi di lavoro può capitare tutto e il contrario di tutto.
Una casistica non proprio rara su sistemi linux a 64bit è la presenza di installazioni multiple degli stessi package sia in versione x86 che x64 (prima di mettere mano ad una macchina ricordate sempre di lanciare “uname -a” per verificare la versione del kernel e l’architettura).
Questo genera confusione e a volte può bloccare l’installazione o l’upgrade di alcuni package, a ciò si somma l’output non sempre chiaro del comando rpm che non aiuta certo a risolvere questo genere di conflitti.
Prendiamo il caso seguente, un server RedHat Enterprise 4 x64 sul quale è necessario effettuare l’upgrade del client mysql.
L’upgrade con “rpm -Uvh <nuovo package>” genera un sacco di errori causati da conflitti con la versione esistente di mysql, il bravo sistemista verifica quali rpm sono installati:
[root@columbia ~]# rpm -qa | grep mysql- mysql-4.1.7-4.RHEL4.1 mysql-4.1.7-4.RHEL4.1
Due versioni dello stesso package?!? Che diavolo stai dicendo Willis?!?! (cit)
Proviamo a disinstallare l’rpm (ovviamente solo dopo aver verificato che questo non risulti bloccante per altro):
[root@columbia ~]# rpm -e mysql-4.1.7-4.RHEL4.1 error: "mysql-4.1.7-4.RHEL4.1" specifies multiple packages
DAMN!! :\
Proviamo allora a verificare l’architettura dei singoli package installati utilizzando l’opzione –queryformat
[root@columbia ~]# rpm -q --queryformat "%{name}.%{arch}\n" mysql mysql.i386 mysql.x86_64
Ecco svelato l’arcano! Qualche premio Nobel ha pensato bene di installare il client mysql a 32bit oltre a quello a 64bit!
Nel 99% dei casi questo sarà successo per disattenzione, incompetenza o il solito cliente/capo progetto che vuole tutto “per ieri”, una volta verificato che il client sbagliato non sia stato installato per qualche ragione specifica si può procedere alla sua disinstallazione (con le opportune dipendenze da verificare)…
[root@columbia ~]# rpm -e mysql.i386 error: Failed dependencies: libmysqlclient.so.14 is needed by (installed) cyrus-sasl-sql-2.1.19-5.EL4.i386
[root@columbia ~]# rpm -e mysql.i386 cyrus-sasl-sql-2.1.19-5.EL4.i386
[root@columbia ~]# rpm -qa | grep mysql- mysql-4.1.7-4.RHEL4.1
… e procedere con l’upgrade o il resto del lavoro ;)