GNU/Linux >> Tutoriales Linux >  >> Linux

Gestión de parches de Linux:cómo revertir un parche fallido

Mantener los servidores actualizados es una de las principales responsabilidades de un administrador de sistemas. Sin embargo, las actualizaciones no siempre funcionan de la forma esperada, por lo que es igualmente importante que sepa cómo a) revertir un parche para que el servidor vuelva al estado anterior yb) aplicar parches en subconjuntos para obtener más flexibilidad.

Este artículo se centra en la aplicación de parches a nivel del sistema operativo con la ayuda de las herramientas de administración de paquetes YUM/DNF en Red Hat Enterprise Linux (RHEL). Para esta demostración, un servidor RHEL 7.7 en ejecución se actualiza a RHEL 7.9 usando yum y luego volvió a la versión RHEL 7.7. Siempre se recomienda hacer copias de seguridad periódicas de sus servidores y las demostraciones proporcionadas en este artículo son solo para fines educativos.

Compruebe el servidor en busca de parches/actualizaciones pendientes

A menos que esté utilizando una herramienta de administración de sistemas como Red Hat Satellite, debe probar los servidores en busca de actualizaciones manualmente.

Para este artículo, considere un servidor RHEL 7.7:

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

Usa la check-update comando para verificar de forma no interactiva si hay actualizaciones pendientes en su servidor:

[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     

[ También te puede interesar: Red Hat Insights:gestión de vulnerabilidades ]

Cuando se escribió este artículo, RHEL 7.9 era la versión más reciente de RHEL 7 y estaba realizando una yum update llevaría este servidor RHEL 7.7 a 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!

Después de un reinicio exitoso, verifique la versión de RHEL para confirmar que el servidor está actualizado a 7.9:

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

Revertir las actualizaciones

Primero, verifique el historial de la transacción con yum comando:

[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

Las columnas Acción(es) y Alterado brindan información sobre los cambios que ocurrieron con esta transacción.

Acción(es):

  • I - Nuevo paquete instalado
  • O - El paquete está obsoleto
  • U - El paquete está actualizado

Alterado:

  • 157 paquetes fueron alterados
  • EE:hubo algunos errores/advertencias en la transacción

Usando yum history packages-list muestra los cambios que ocurrieron desde el punto de vista de ese paquete.

Como systemd es el primer proceso iniciado en las versiones 7 y superiores de RHEL, ese paquete está protegido con /etc/yum/protected.d/systemd.conf :

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

Revertir la última transacción con 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

Precaución :El siguiente proceso no se admite ni se ha probado. Resuelva cualquier problema que surja de la degradación recuperándose de una copia de seguridad o reinstalando.

Mueva el yum archivo de configuración, que protege systemd:

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

Vuelva a ejecutar el yum history undo last comando:

[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!

Reiniciar el servidor

Compruebe la versión de RHEL y el kernel:

[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

El servidor está utilizando la última versión del kernel de RHEL 7.9. Puede cambiar el kernel predeterminado usando grub2-set-default comando.

Aplique el parche en subconjuntos para obtener más flexibilidad de reversión

Anclar RHEL a una versión específica es una forma de evitar que el sistema se actualice a la última versión secundaria. El administrador de suscripciones se puede usar para configurar la versión 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

Compruebe las actualizaciones disponibles y el estado del repositorio antes de fijar la versión:

[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

Fije la versión a RHEL 7.8, borre el yum caché y verifique los repositorios habilitados:

[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

Es evidente en la URL del repositorio salida anterior que ahora está usando 7.8 y no latest .

Ejecute yum update y verifique si hay cambios en las actualizaciones disponibles:

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

Patching en subconjuntos

La historia opción con yum utiliza la transacción para revertir/deshacer la operación. Por lo tanto, actualizar los paquetes como subconjuntos brinda la flexibilidad de revertirlos. Este es un mejor enfoque que actualizar el sistema en su totalidad.

Actualice el paquete 'device-mapper' con 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]:

Revisa el historial con 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

Obtenga detalles más específicos sobre la transacción ID 2 usando 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

Finalmente, deshaga la última transacción usando 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]:

[ Una guía gratuita de Red Hat:5 pasos para automatizar su negocio. ] 

No es el final

Ser proactivo es la mejor manera de evitar revertir un parche fallido. Realizar copias de seguridad periódicas del nivel del sistema operativo y de la aplicación es la forma recomendada de revertir los cambios con confianza. Lea mi artículo Habilitar administrador de sistemas sobre cómo usar ReaR para copia de seguridad y restauración basadas en imágenes.

Para obtener más información sobre cómo revertir las actualizaciones en Red Hat Enterprise Linux, asegúrese de consultar el Portal del cliente de Red Hat.


Linux
  1. Linux:¿cómo averiguar el espacio de nombres de un proceso en particular?

  2. Cómo verificar los intentos de inicio de sesión fallidos o incorrectos en Linux

  3. Cómo acercar y alejar la consola de terminal en Linux

  4. ¿Cómo configurar swappiness en Linux Memory Management?

  5. ¿Cómo saber el tipo de virtualización de un VPS Linux?

Cómo averiguar la dirección IP pública desde la línea de comandos en Linux

Cómo averiguar el estado conectado de un cable de red en Linux

Cómo saber a qué grupos pertenece un usuario en Linux

Cómo convertir PDF a imágenes PNG y viceversa en Linux

Cómo cerrar la sesión de un usuario fuera de SSH en Linux

Cómo enumerar los paquetes instalados en Linux mediante la administración de paquetes