Rollback de instalaciones y actualizaciones con yum history

YumEn anteriores artículos de yum (véase por ejemplo 6 trucos útiles del gestor de paquetes yum) hemos visto como este gestor de paquetes nos facilita de manera asombrosa la instalación, actualización y manteniemiento de paquetes en sistemas Red Hat, CentOS, etc. Algunos trucos requieren de la instalación de plugins y otros están disponible por defecto. Hoy vamos a hablar de la característica history disponible sin plugins.

El comando yum history nos permite visualizar un listado con todas las transacciones realizadas a través de yum y a su vez, visualizar el detalle de cada una e incluso hacer un rollback de dicha instalación o actualización.

Lo primer que debemos ejecutar para verlo es directamente yum history:

# yum history
Loaded plugins: fastestmirror, presto
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    15 | root               | 2012-11-17 11:27 | Install        |    1   
    14 | root               | 2012-11-17 11:25 | Install        |    2   
    13 | root               | 2012-11-17 10:01 | Install        |    3  <
    12 | root               | 2012-11-10 12:00 | Install        |   18 > 
    11 | root               | 2012-08-29 20:44 | Install        |    2   
    10 | root               | 2012-08-06 21:11 | Install        |    1   
     9 | root               | 2012-08-06 20:47 | Install        |    6   
     8 | root               | 2012-08-06 19:17 | Install        |    1   
     7 | root               | 2012-08-06 19:08 | Install        |    1   
     6 | root               | 2012-08-06 19:03 | Install        |    1   
     5 | root               | 2012-08-06 19:02 | I, U           |    9   
     4 | root               | 2012-08-06 18:57 | I, U           |   12   
     3 | root               | 2012-08-06 18:49 | Install        |    1   
     2 | root               | 2012-08-06 18:49 | Install        |    1   
     1 | System             | 2012-08-06 18:20 | Install         |  212

Como podéis observar, se han realizado 15 transacciones en este sistema, todas por el usuario root a excepción de la número 1, realizada por el sistema ya que es la propia instalación del sistema operativo. Podemos ver también la fecha en la que se realizó, la acción (Install, Update, Erase…) y el número de paquetes involucrados en la transacción.

Si queremos ver el detalle de una de ellas ejecutamos el comando yum history info seguido del ID de transacción:

# yum history info 14
Loaded plugins: fastestmirror, presto
Transaction ID : 14
Begin time     : Sat Nov 17 11:25:40 2012
Begin rpmdb    : 267:fc61d14694f91e737d8e7f33fa67e85b45148978
End time       :            11:25:44 2012 (4 seconds)
End rpmdb      : 269:6c2a672fdb8f8966f43fc762c679fb88ab7e21d6
User           : root 
Return-Code    : Success
Command Line   : install crypto-utils
Transaction performed with:
    Installed     rpm-4.8.0-27.el6.i686                         @anaconda-CentOS-201207051201.i386/6.3
    Installed     yum-3.2.29-30.el6.centos.noarch               @anaconda-CentOS-201207051201.i386/6.3
    Installed     yum-plugin-fastestmirror-1.1.30-14.el6.noarch @anaconda-CentOS-201207051201.i386/6.3
    Installed     yum-presto-0.6.2-1.el6.noarch                 @anaconda-CentOS-201207051201.i386/6.3
Packages Altered:
    Install     crypto-utils-2.4.1-24.2.el6.i686 @base
    Dep-Install perl-Newt-1.08-26.el6.i686       @base
history info

Ahí tenemos toda la información de la transacción. Si quisieramos revertir el proceso de todo lo que se realizó en la transacción 14 ejecutamos el comando yum history undo seguido del ID:

# yum history undo 14
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
...
...

Undoing transaction 14, from Sat Nov 17 11:25:40 2012     Install     crypto-utils-2.4.1-24.2.el6.i686 @base
    Dep-Install perl-Newt-1.08-26.el6.i686       @base
Resolving Dependencies
--> Running transaction check
---> Package crypto-utils.i686 0:2.4.1-24.2.el6 will be erased
---> Package perl-Newt.i686 0:1.08-26.el6 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package             Arch         Version          Repository          Size
=============================================================================
Removing:
 crypto-utils         i686        2.4.1-24.2.el6       @base          169 k
 perl-Newt            i686        1.08-26.el6          @base          205 k

Transaction Summary
==============================================================================
Remove        2 Package(s)

Installed size: 373 k
Is this ok [y/N]:

Una vez finalizado el rollback, esta nueva transacción aparecería en el histórico de yum con el ID 16 y action ERASE:

# yum history
Loaded plugins: fastestmirror, presto
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    16 | root               | 2012-11-17 16:25 | Erase          |    2   
    15 | root               | 2012-11-17 11:27 | Install        |    1   
    14 | root               | 2012-11-17 11:25 | Install        |    2   
    13 | root               | 2012-11-17 10:01 | Install        |    3  <
    12 | root               | 2012-11-10 12:00 | Install        |   18 > 
    11 | root               | 2012-08-29 20:44 | Install        |    2   
    10 | root               | 2012-08-06 21:11 | Install        |    1   
     9 | root               | 2012-08-06 20:47 | Install        |    6   
     8 | root               | 2012-08-06 19:17 | Install        |    1   
     7 | root               | 2012-08-06 19:08 | Install        |    1   
     6 | root               | 2012-08-06 19:03 | Install        |    1   
     5 | root               | 2012-08-06 19:02 | I, U           |    9   
     4 | root               | 2012-08-06 18:57 | I, U           |   12   
     3 | root               | 2012-08-06 18:49 | Install        |    1   
     2 | root               | 2012-08-06 18:49 | Install        |    1   
     1 | System             | 2012-08-06 18:20 | Install        |  212   
history list

Pero esto no es todo, ya que si lo que quiero es rehacer una transacción, también puedo hacerlo con el comando yum history redo seguido del ID. En este caso, he borrado lo que se hizo en la transacción 14, generando la del ID 16. Podría hacer un rollback de la 16 para rehacerlo o un redo de la 14:

# yum history redo 14
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: ftp.udc.es
 * extras: ftp.udc.es
 * updates: ftp.udc.es
Repeating transaction 14, from Sat Nov 17 11:25:40 2012
    Install     crypto-utils-2.4.1-24.2.el6.i686 @base
    Dep-Install perl-Newt-1.08-26.el6.i686       @base
Resolving Dependencies
--> Running transaction check
---> Package crypto-utils.i686 0:2.4.1-24.2.el6 will be installed
--> Processing Dependency: perl(Newt) for package: crypto-utils-2.4.1-24.2.el6.i686
--> Running transaction check
---> Package perl-Newt.i686 0:1.08-26.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================
 Package                         Arch    Version           Repository   Size
==============================================================================
Installing:
 crypto-utils                     i686   2.4.1-24.2.el6     base         75 k
Installing for dependencies:
 perl-Newt                        i686   1.08-26.el6        base         72 k

Transaction Summary
===============================================================================
Install       2 Package(s)

Total download size: 147 k
Installed size: 373 k
Is this ok [y/N]:

Como podéis ver, yum nos ofrece una potente herramienta para llevar un control exhaustivo de las tareas de instalación, actualización y borrado de paquetes que se realizan en un sistema, desde la fecha, el usuario hasta el número de paquetes involucrados en la transacción.