OpenSuse – Reconstruire la base corompue du gestionnaire RPM

Suite à un crash encore inexpliqué, la base RPM d’un de mes serveur s’est retrouvée totalement corompue !!! Que faire dans un tel cas ?

Il existe bien quelques option magiques telles que rpm –rebuilddb mais bien sure ce fu sans succès pour moi. Impact de ce problème : impossible de reinstaller des packages partis en morceau lors d’une mise à jour …. ennuyeux quand il s’agit de la JVM sur un serveur web j2ee … Bref… quand plus rien ne marche, il faut sortir l’artillerie lourde.
Attention, ce qui suit s’approche d’une opération de type arakiri … chacun assumera donc ses responabilités si ca venait à sateliser votre serveur …. Pour ma part ca m’a sauvé la vie.
Bon bref… c’est à vos risques et périls.

Donc, pour s’en sortir, il faut degager la base corompue et en installer un neuve. La base se trouvant dans /var/lib/rpm il faut commencer par une petite copie de sauvegarde :
cd /var/lib
cp -R rpm rpm.old

Ensuite créer un nouvel espace pour la base neuve :
mkdir rpm ; mkdir rpm/alternatives
Maintenant on cré la nouvelle base :
rpm –initdb –dbpath /var/lib/rpm

Il ne reste plus qu’a reinstaller les package en vrac dans la base d’origine… Mais bien sur, les dépendence n’etant plus dans la nouvelle base il faudra force un peu les choses avec les options suivantes :
rpm -i –nodeps –force nom_du_package.rpm
Cela ne fonctionne que si les packages etaient deja installé, je veux dire si les dépendences sont bien présentes sinon il faudra les reconstruire en installant tout à la main …

A la fin, il est plutot mieux de revenir à l’ancienne version de bdd en recopiant dans l’autre sens….

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.