GNU/Linux >> Tutoriels Linux >  >> Linux

Gestion des correctifs Linux :Comment annuler un correctif ayant échoué

Maintenir les serveurs à jour est l'une des principales responsabilités d'un administrateur système. Cependant, les mises à jour ne fonctionnent pas toujours comme prévu, il est donc tout aussi important que vous sachiez a) rétablir un correctif pour ramener le serveur à l'état précédent et b) appliquer des correctifs dans des sous-ensembles pour obtenir plus de flexibilité.

Cet article se concentre sur les correctifs au niveau du système d'exploitation effectués à l'aide des outils de gestion de packages YUM/DNF sur Red Hat Enterprise Linux (RHEL). Pour cette démonstration, un serveur RHEL 7.7 en cours d'exécution est mis à jour vers RHEL 7.9 à l'aide de yum , puis est revenu à la version RHEL 7.7. Il est toujours recommandé d'effectuer des sauvegardes périodiques de vos serveurs et les démonstrations fournies dans cet article sont uniquement à des fins éducatives.

Vérifiez le serveur pour les correctifs/mises à jour en attente

À moins que vous n'utilisiez un outil de gestion de systèmes tel que Red Hat Satellite, vous devez tester manuellement les serveurs pour toute mise à jour.

Pour cet article, considérez un serveur RHEL 7.7 :

[root@rhel77 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)

Utilisez le check-update commande pour vérifier de manière non interactive les mises à jour en attente sur votre serveur :

[root@rhel77 ~]# yum check-update
Loaded plugins: product-id, search-disabled-repos, subscription-manager

NetworkManager.x86_64                                        1:1.18.4-3.el7                          rhel-7-server-rpms
NetworkManager-config-server.noarch                          1:1.18.4-3.el7                          rhel-7-server-rpms
NetworkManager-libnm.x86_64                                  1:1.18.4-3.el7                          rhel-7-server-rpms
NetworkManager-team.x86_64                                   1:1.18.4-3.el7                          rhel-7-server-rpms
kernel-tools-libs.x86_64                                     3.10.0-1127.19.1.el7                    rhel-7-server-rpms
kexec-tools.x86_64                                           2.0.15-43.el7                           rhel-7-server-rpms
kmod.x86_64                                                  20-28.el7                               rhel-7-server-rpms
kmod-libs.x86_64                                             20-28.el7                               rhel-7-server-rpms
kpartx.x86_64                                                0.4.9-131.el7                           rhel-7-server-rpms
krb5-libs.x86_64                                             1.15.1-46.el7                           rhel-7-server-rpms
….
….
….
systemd.x86_64                                               219-73.el7_8.9                          rhel-7-server-rpms
systemd-libs.x86_64                                          219-73.el7_8.9                          rhel-7-server-rpms
systemd-sysv.x86_64                                          219-73.el7_8.9                          rhel-7-server-rpms
tcpdump.x86_64                                               14:4.9.2-4.el7_7.1                      rhel-7-server-rpms
teamd.x86_64                                                 1.29-1.el7                              rhel-7-server-rpms
tuned.noarch                                                 2.11.0-8.el7                            rhel-7-server-rpms
tzdata.noarch                                                2020a-1.el7                             rhel-7-server-rpms
util-linux.x86_64                                            2.23.2-63.el7                           rhel-7-server-rpms
yum.noarch                                                   3.4.3-167.el7                           rhel-7-server-rpms
yum-utils.noarch                                             1.1.31-54.el7_8                         rhel-7-server-rpms
Obsoleting Packages
iwl7260-firmware.noarch                                      25.30.13.0-76.el7                       rhel-7-server-rpms
    iwl7265-firmware.noarch                                  22.0.7.0-72.el7                         installed     

[ Vous pourriez également aimer : Red Hat Insights :Gestion des vulnérabilités ]

Lorsque cet article a été écrit, RHEL 7.9 était la version la plus récente de RHEL 7 et effectuait une yum update prendrait ce serveur RHEL 7.7 vers RHEL 7.9 :

[root@rhel77 ~]# yum -y update
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.18.0-5.el7 will be updated
---> Package NetworkManager.x86_64 1:1.18.8-1.el7 will be an update
---
Complete!

Après un redémarrage réussi, vérifiez la version de RHEL pour confirmer que le serveur est mis à jour vers la version 7.9 :

[root@rhel77 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)

Annuler les mises à jour

Tout d'abord, vérifiez l'historique de la transaction avec le yum commande :

[root@rhel77 ~]# yum history
Loaded plugins: product-id, search-disabled-repos, subscription-manager
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     8 | root <root>              | 2020-11-01 23:10 | I, O, U        |  157 EE

Les colonnes Action(s) et Altered donnent des informations sur les changements qui se sont produits avec cette transaction.

Action(s) :

  • I - Nouveau package installé
  • O - Le package est obsolète
  • U - Le package est mis à jour

Modifié :

  • 157 paquets ont été modifiés
  • EE - Il y a eu des erreurs/avertissements dans la transaction

Utilisation de yum history packages-list montre les changements qui se sont produits du point de vue de ce paquet.

Comme systemd est le premier processus lancé dans les versions 7 et supérieures de RHEL, ce package est protégé par /etc/yum/protected.d/systemd.conf :

[root@rhel77 ~]# cat /etc/yum/protected.d/systemd.conf
systemd

Annulez la dernière transaction avec yum history undo :

[root@rhel77 ~]# yum history undo last
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Undoing transaction 8, from Sun Nov  1 23:10:56 2020
    Updated     NetworkManager-1:1.18.0-5.el7.x86_64                        @?rhel-7-server-rpms
    Update                     1:1.18.8-1.el7.x86_64                        @rhel-7-server-rpms
    Updated     NetworkManager-config-server-1:1.18.0-5.el7.noarch          @?rhel-7-server-rpms
    Update                                   1:1.18.8-1.el7.noarch          @rhel-7-server-rpms
    Updated     NetworkManager-libnm-1:1.18.0-5.el7.x86_64                  @?rhel-7-server-rpms
....
Resolving Dependencies
--> Running transaction check
…
--> Finished Dependency Resolution
Error: Trying to remove "systemd", which is protected

Attention :Le processus suivant n'est ni pris en charge ni testé. Résolvez tous les problèmes résultant de la rétrogradation en récupérant à partir d'une sauvegarde ou d'une réinstallation.

Déplacez le yum fichier de configuration, qui protège systemd:

[root@rhel77 ~]# mv /etc/yum/protected.d/systemd.conf /etc/yum/protected.d/systemd.conf.bak

Réexécutez le yum history undo last commande :

[root@rhel77 ~]# yum history undo last
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Undoing transaction 8, from Sun Nov  1 23:10:56 2020
....
Skipping the running kernel: kernel-3.10.0-1160.2.2.el7.x86_64
....

Dependencies Resolved

=======================================================================================================================
 Package                                    Arch       Version                           Repository               Size
=======================================================================================================================
Installing:
 iwl7265-firmware                           noarch     22.0.7.0-72.el7                   rhel-7-server-rpms      7.3 M
Removing:
 bc                                         x86_64     1.06.95-13.el7                    @rhel-7-server-rpms     215 k
 iwl7260-firmware                           noarch     25.30.13.0-79.el7                 @rhel-7-server-rpms      87 M
 linux-firmware                             noarch     20200421-79.git78c0348.el7        @rhel-7-server-rpms     394 M
Downgrading:
 NetworkManager                             x86_64     1:1.18.0-5.el7                    rhel-7-server-rpms      1.9 M
 NetworkManager-config-server               noarch     1:1.18.0-5.el7                    rhel-7-server-rpms      149 k
 NetworkManager-libnm    
…

Transaction Summary
=======================================================================================================================
Install      1 Package
Remove       3 Packages
Downgrade  152 Packages
…
Running transaction
  Installing : libgcc-4.8.5-39.el7.x86_64                                                                        1/308
  Installing : 1:grub2-common-2.02-0.80.el7.noarch                                                               2/308
  Installing : redhat-release-server-7.7-10.el7.x86_64                                                           3/308
warning: /etc/os-release saved as /etc/os-release.rpmsave
  Installing : setup-2.8.71-10.el7.noarch                                                                        4/308
warning: /etc/shadow created as /etc/shadow.rpmnew
  Installing : 1:grub2-pc-modules-2.02-0.80.el7.noarch   
....
yum-utils.noarch 0:1.1.31-52.el7                   

Complete!

Redémarrer le serveur

Vérifiez la version de RHEL et du noyau :

[root@rhel77 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)

[root@rhel77 ~]# rpm -q kernel
kernel-3.10.0-1062.el7.x86_64
kernel-3.10.0-1160.2.2.el7.x86_64

[root@rhel77 ~]# uname -r
3.10.0-1160.2.2.el7.x86_64

Le serveur utilise la dernière version du noyau de RHEL 7.9. Vous pouvez changer le noyau par défaut en utilisant grub2-set-default commande.

Appliquez le correctif par sous-ensembles pour obtenir une plus grande flexibilité de restauration

Épingler RHEL à une version spécifique est un moyen d'empêcher la mise à jour du système vers la dernière version mineure. Le gestionnaire d'abonnement peut être utilisé pour définir la version de RHEL :

[root@rhel77 ~]# subscription-manager release --list
+-------------------------------------------+
          Available Releases
+-------------------------------------------+
7.0
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7Server

Vérifiez les mises à jour disponibles et l'état du référentiel avant d'épingler la version :

[root@rhel77 ~]# yum update
...
Transaction Summary
=======================================================================================================================
Install    2 Packages (+2 Dependent packages)
Upgrade  152 Packages


[root@rhel77 ~]# subscription-manager repos --list-enabled
Repo ID:   rhel-7-server-rpms
Repo Name: Red Hat Enterprise Linux 7 Server (RPMs)
Repo URL:  https://cdn.redhat.com/content/dist/rhel/server/7/latest/$basearch/os
Enabled:   1

Épinglez la version à RHEL 7.8, effacez le yum cache et vérifiez les dépôts activés :

[root@rhel77 ~]# subscription-manager release --set=7.8

[root@rhel77 ~]# yum clean all

[root@rhel77 ~]# subscription-manager repos --list-enabled
Repo ID:   rhel-7-server-rpms
Repo Name: Red Hat Enterprise Linux 7 Server (RPMs)
Repo URL:  https://cdn.redhat.com/content/dist/rhel/server/7/7.8/$basearch/os
Enabled:   1

C'est évident à partir de l'URL du référentiel sortie ci-dessus qu'il utilise maintenant 7.8 et pas latest .

Exécutez yum update et vérifiez s'il y a des changements dans les mises à jour disponibles :

[root@rhel77 ~]# yum update
....
Transaction Summary
=======================================================================================================================
Install    2 Packages (+1 Dependent package)
Upgrade  136 Packages

Correction dans des sous-ensembles

L'historique option avec yum utilise la transaction pour annuler/annuler l'opération. Ainsi, la mise à jour des packages en tant que sous-ensembles donne la possibilité de les restaurer. Il s'agit d'une meilleure approche que de mettre à jour le système dans son ensemble.

Mettez à jour le package 'device-mapper' avec update device-mapper .

[root@rhel77 ~]# yum update device-mapper

Loaded plugins: product-id, search-disabled-repos, subscription-manager
Resolving Dependencies
--> Running transaction check
---> Package device-mapper.x86_64 7:1.02.158-2.el7 will be updated
--> Processing Dependency: device-mapper = 7:1.02.158-2.el7 for package: 7:device-mapper-libs-1.02.158-2.el7.x86_64
---> Package device-mapper.x86_64 7:1.02.170-6.el7 will be an update
--> Running transaction check
---> Package device-mapper-libs.x86_64 7:1.02.158-2.el7 will be updated
---> Package device-mapper-libs.x86_64 7:1.02.170-6.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================
 Package                        Arch               Version                        Repository                      Size
=======================================================================================================================
Updating:
 device-mapper                  x86_64             7:1.02.170-6.el7               rhel-7-server-rpms             297 k
Updating for dependencies:
 device-mapper-libs             x86_64             7:1.02.170-6.el7               rhel-7-server-rpms             325 k

Transaction Summary
=======================================================================================================================
Upgrade  1 Package (+1 Dependent package)

Total download size: 621 k
Is this ok [y/d/N]:

Vérifiez l'historique avec yum history .

[root@rhel77 ~]# yum history
Loaded plugins: product-id, search-disabled-repos, subscription-manager
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     2 | root <root>              | 2020-11-02 15:25 | Update         |    2   
     1 | System <unset>           | 2020-09-14 04:25 | Erase          |    1 EE
history list

Obtenez des détails plus spécifiques sur l'ID de transaction 2 à l'aide de yum history info 2 .

[root@rhel77 ~]# yum history info 2
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Transaction ID : 2
Begin time     : Mon Nov  2 15:25:12 2020
Begin rpmdb    : 345:fc299a705f95203fda639ed1153803ad6771d7fb
End time       :            15:25:14 2020 (2 seconds)
End rpmdb      : 345:f8faef254573c0653a624c30ee393b08bb365ab2
User           : root <root>
Return-Code    : Success
Command Line   : update device-mapper
Transaction performed with:
    Installed     rpm-4.11.3-40.el7.x86_64                  installed
    Installed     subscription-manager-1.24.13-1.el7.x86_64 installed
    Installed     yum-3.4.3-163.el7.noarch                  installed
Packages Altered:
    Updated device-mapper-7:1.02.158-2.el7.x86_64      @?rhel-7-server-rpms
    Update                7:1.02.170-6.el7.x86_64      @rhel-7-server-rpms
    Updated device-mapper-libs-7:1.02.158-2.el7.x86_64 @?rhel-7-server-rpms
    Update                     7:1.02.170-6.el7.x86_64 @rhel-7-server-rpms
history info

Enfin, annulez la dernière transaction en utilisant yum history undo last .

[root@rhel77 ~]# yum history undo last

Loaded plugins: product-id, search-disabled-repos, subscription-manager
Undoing transaction 2, from Mon Nov  2 15:25:12 2020
    Updated device-mapper-7:1.02.158-2.el7.x86_64      @?rhel-7-server-rpms
    Update                7:1.02.170-6.el7.x86_64      @rhel-7-server-rpms
    Updated device-mapper-libs-7:1.02.158-2.el7.x86_64 @?rhel-7-server-rpms
    Update                     7:1.02.170-6.el7.x86_64 @rhel-7-server-rpms
Resolving Dependencies
--> Running transaction check
---> Package device-mapper.x86_64 7:1.02.158-2.el7 will be a downgrade
---> Package device-mapper.x86_64 7:1.02.170-6.el7 will be erased
---> Package device-mapper-libs.x86_64 7:1.02.158-2.el7 will be a downgrade
---> Package device-mapper-libs.x86_64 7:1.02.170-6.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================
 Package                        Arch               Version                        Repository                      Size
=======================================================================================================================
Downgrading:
 device-mapper                  x86_64             7:1.02.158-2.el7               rhel-7-server-rpms             294 k
 device-mapper-libs             x86_64             7:1.02.158-2.el7               rhel-7-server-rpms             322 k

Transaction Summary
=======================================================================================================================
Downgrade  2 Packages

Total download size: 616 k
Is this ok [y/d/N]:

[ Un guide gratuit de Red Hat :5 étapes pour automatiser votre entreprise. ] 

Ce n'est pas la fin

Être proactif est le meilleur moyen d'éviter de revenir en arrière sur un correctif défaillant. Il est recommandé d'effectuer des sauvegardes périodiques au niveau du système d'exploitation et au niveau de l'application pour annuler les modifications en toute confiance. Lisez mon article Activer Sysadmin sur l'utilisation de ReaR pour la sauvegarde et la restauration basées sur des images.

Pour plus d'informations sur l'annulation des mises à jour dans Red Hat Enterprise Linux, assurez-vous de consulter le portail client Red Hat.


Linux
  1. Comment trouver la liste de tous les ports ouverts sous Linux

  2. Quelle version de Linux suis-je en cours d'exécution ? Voici comment le savoir

  3. Comment vérifier les tentatives de connexion échouées ou incorrectes sous Linux

  4. Comment zoomer et dézoomer la console du terminal sous Linux

  5. Comment déterminer la version d'Intel Management Engine sous Linux ?

Comment trouver une adresse IP publique à partir de la ligne de commande sous Linux

Comment connaître l'état de connexion d'un câble réseau sous Linux

Comment savoir à quels groupes un utilisateur appartient sous Linux

Comment convertir un PDF en images PNG et inversement sous Linux

Comment déconnecter un utilisateur de SSH sous Linux

Comment répertorier les packages installés sous Linux à l'aide de la gestion des packages