Recherche de site Web

Comment reconstruire une base de données RPM corrompue dans CentOS


La base de données RPM est composée de fichiers situés dans le répertoire /var/lib/rpm/ de CentOS et d'autres distributions Linux d'entreprise telles que RHEL, openSUSE, Oracle Linux et plus encore.

Si la base de données RPM est corrompue, RPM ne fonctionnera pas correctement, les mises à jour ne pourront donc pas être appliquées à votre système, vous rencontrerez des erreurs lors de la mise à jour des packages sur votre système via le gestionnaire de packages YUM. Le pire des cas est de ne pouvoir exécuter aucune commande rpm et yum avec succès.

Lire aussi : 20 exemples pratiques de commande RPM sous Linux

Un certain nombre de facteurs peuvent conduire à la corruption de la base de données RPM, tels que des transactions précédentes incomplètes, l'installation de certains logiciels tiers, la suppression de packages spécifiques et bien d'autres.

Dans cet article, nous allons montrer comment reconstruire une base de données RPM corrompue ; de cette façon, vous pouvez récupérer d'une corruption de base de données RPM dans CentOS. Cela nécessite les privilèges de l'utilisateur root, sinon utilisez la commande sudo pour obtenir ces privilèges.

Reconstruire la base de données RPM corrompue dans CentOS

Commencez par sauvegarder votre base de données RPM actuelle avant de continuer (vous pourriez en avoir besoin à l'avenir), à l'aide des commandes suivantes.

mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

Ensuite, vérifiez l'intégrité du fichier de métadonnées du package maître /var/lib/rpm/Packages ; c'est le fichier qui doit être reconstruit, mais supprimez d'abord les fichiers /var/lib/rpm/__db* pour éviter les verrous obsolètes à l'aide des commandes suivantes.

rm -f /var/lib/rpm/__db*		
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

Si l'opération ci-dessus échoue, ce qui signifie que vous rencontrez toujours des erreurs, vous devez alors vider et charger une nouvelle base de données. Vérifiez également l'intégrité du fichier Packages fraîchement chargé comme suit.


cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages

Maintenant, pour vérifier les en-têtes de la base de données, interrogez tous les packages installés à l'aide des indicateurs -q et -a, et essayez d'observer attentivement toute(s) erreur(s) envoyée(s) au erreur standard.


rpm -qa >/dev/null	#output is discarded to enable printing of errors only

Enfin et surtout, reconstruisez la base de données RPM à l'aide de la commande suivante, l'option -vv permet d'afficher de nombreuses informations de débogage.

rpm -vv --rebuilddb

Utilisez l'outil dcrpm pour détecter et corriger la base de données RPM

Nous avons également découvert l'outil de ligne de commande dcrpm (détecter et corriger rpm) utilisé pour identifier et corriger les problèmes bien connus liés à la corruption de la base de données RPM. C'est un outil simple et facile à utiliser que vous pouvez exécuter sans option. Pour une utilisation efficace et fiable, vous devez l'exécuter régulièrement via cron.

Vous pouvez l'installer à partir des sources ; téléchargez l'arborescence des sources et installez-la à l'aide de setup.py (qui devrait également récupérer la dépendance psutil de pypi), comme indiqué.

git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install

Une fois que vous avez installé dcrpm, exécutez-le comme indiqué.

dcrpm

Enfin, essayez à nouveau d’exécuter votre commande rpm ou yum qui a échoué pour voir si tout fonctionne correctement.

Dépôt Github dcrpm : https://github.com/facebookincubator/dcrpm
Vous pouvez trouver plus d'informations sur la page de récupération de la base de données RPM.

C'est tout! Dans cet article, nous avons expliqué comment reconstruire une base de données RPM corrompue dans CentOS. Pour poser des questions ou partager vos réflexions sur ce guide, utilisez le formulaire de commentaires ci-dessous.