22/12/2024

Commandes et SystèmeLinux

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.

author avatar
Philippe PIERRE
A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.