Rollback de transaction yum sur CentOS 7
I. Présentation
Il arrive parfois qu’après une installation de packages avec des dépendances, on s’aperçoive que l’opération provoque des erreurs sur certaines applications. Je vous propose dans ce billet de détailler comment effectuer un retour arrière (aussi appelé rollback en base de données) sur la transaction d’installation effectuée à l’aide du gestionnaire de package yum de CentOS7.
II. Le gestionnaire de packages yum
Comme on le sait, le gestionnaire de package de la distribution CentOS est très riche et permet de nombreuses opérations. Il est possible d’installer de nombreux packages en s’appuyant sur les dépôts officiels.
Un dépôt (ou repository), se déclare dans le fichier /etc/yum.repos.d et possède (généralement) le format suivant (ici, pour le repository EPEL):
[RepoEpel7] name= EPEL 7 $releasever - $basearch baseurl=http://myrepo/mirrors.ircam.fr/pub/fedora/epel/7Server/$basearch/ enabled=1 gpgcheck=0
Le premier champ fournit un descriptif complet du dépôt et pointe sur l’adresse web mentionnée par le champ baseurl. Le champ enabled permet de préciser que l’on vérifie la cohérence des packages se trouvant à cette adresse.
Le dernier champ stipule que l’on n’effectue aucune vérification de signature GPG des packages.
REMARQUE : dans le cadre d’un dépôt mis en production, il est fortement conseillé de toujours effectuer la vérification GPG en activant l’option gpgcheck à 1.
Il est alors facile d’installer un package. Il suffit simplement d’exécuter la commande ci-dessous :
# yum install <Package>
Le <Package> correspond alors à n’importe quel paquetage se trouvant dans le dépôt précédemment généré. On peut alors lister le nombre de packages présent dans un dépôt :
# yum repolist RepoEpel7 Loading mirror speeds from cached hostfile id du dépôt nom du dépôt statut RepoEpel7/x86_64 EPEL 7 7 - x86_64 42 494 repolist: 42 494
On peut bien sûr effectuer une recherche de package sur un dépôt en particulier :
# yum search --disablerepo=* --enablerepo=RepoEpel7
III. Scénario catastrophe
Imaginons, maintenant que l’on souhaite installer un package particulier : redhat-lsb. On va donc devoir exécuter la commande ci-dessous :
# yum install redhat-lsb
Jusque-là, tout va bien. Soudain, on s’aperçoit que certaines applications qui jusque-là fonctionnaient, après redémarrage du service (voire du serveur), ne fonctionnent plus. Que faire ? Comment régler ce problème ? On ne peut quand même pas supprimer un à un les packages précédemment installés (d’autant qu’il y a des dépendances et que cela risque de casser encore un peu plus le système).
La solution est pourtant très simple. En effet, le gestionnaire de package gère également un historique des transactions effectuées. Pour le visualiser, il suffit d’exécuter la commande suivante :
# yum history Modules complémentaires chargés : fastestmirror, langpacks ID | Ident utilisateur | Date et heure | Action | Modifié -------------------------------------------------------------------------- 45 | <phil> | 2019-01-22 08:56 | Install | 37 … 29 | root <root> | 2018-06-29 09:41 | I, U | 14 28 | root <root> | 2018-06-29 09:14 | Install | 9 27 | root <root> | 2018-06-28 13:26 | Install | 1 history list
On voit clairement ici, que la dernière transaction porte le numéro d’identification 45. Il ne reste plus qu’à annuler celle-ci via la commande ci-dessous :
# yum history undo 45
Ainsi, lorsque l’on vérifie à nouveau l’historique des transactions on devrait voir apparaître la liste suivante :
# yum history Modules complémentaires chargés : fastestmirror, langpacks ID | Ident utilisateur | Date et heure | Action | Modifié -------------------------------------------------------------------------- 46 | <phil> | 2019-01-22 11:04 | Erase | 37 45 | <phil> | 2019-01-22 08:56 | Install | 37 … 29 | root <root> | 2018-06-29 09:41 | I, U | 14 28 | root <root> | 2018-06-29 09:14 | Install | 9 27 | root <root> | 2018-06-28 13:26 | Install | 1 history list
IV. Conclusion
Grâce à ce genre de commande on peut ainsi revenir en arrière dans le temps et annuler des actions désastreuses ou jugées comme telles. Plus de stress ou de panique. On peut gérer finement les transactions yum réalisées.
Bien évidemment, cela implique qu’il faut toujours s’assurer à chaque modification : update, upgrade ou ajout de nouveaux packages, que le système reste cohérent. Dans le cas contraire, on peut toujours avoir recours à l’annulation des transactions précédentes, en procédant comme on vient de le décrire.