systemadmin.es > Utilidades > Instalación y desinstalación de paquetes RPM transaccional (rollback de actualizaciones)

Instalación y desinstalación de paquetes RPM transaccional (rollback de actualizaciones)

Una de las opciones más interesantes, y a la vez más comunmente ignoradas, es la possibilidad de hacer la instalación y actualización de un sistema basado en paquetes RPM mediante transacciones.

Si una actualización vemos que ha causado problemas, podemos indicar al sistema que vuelva atras en el tiempo en lo que refiere a paquetes RPM, por ejemplo “una hora”.

Para hacer uso de esta característica se debería usado la opción repackage:

# rpm -Uvh --repackage jwhois-3.2.3-8.el5.x86_64.rpm
Preparing...                ########################################### [100%]
Repackaging...
   1:jwhois                 ########################################### [100%]
Upgrading...
   1:jwhois                 ########################################### [100%]
Evidentemente resulta tanto incomodo escribir --repackage como fácil de olvidar, por lo que podemos assegurarnos que se usa automáticamente editando el fichero /etc/rpm/macros y añadiendo la siguiente linea:
%_repackage_all_erasures 1

De esta manera cada vez que se actualize un paquete hará el repackage sin que se le tenga que indicar explícitamente.

Para hacer el rollback de la actualización a 1 hora antes solo tenemos que indicar la opción rollback al comando rpm con la diferéncia de tiempo que queremos. Por ejemplo:

# rpm -Uvh --rollback '1 hour ago'
Rollback packages (+1/-1) to Tue Dec  9 09:33:47 2008 (0x493e2d6b):
Preparing...                ########################################### [100%]
   1:jwhois                 ########################################### [ 50%]
Cleaning up repackaged packages:
        Removing /var/spool/repackage/jwhois-3.2.2-6.EL4.1.x86_64.rpm:

Otra característica opcional és la forma de tratar los paquetes instalados (no los actualizados). Por defecto si se instala un paquete y se hace un rollback, éste no se desinstala. Para cambiar este comportamiento se debe añadir de nuevo en el fichero /etc/rpm/macro la opción %_unsafe_rollbacks.

Para esta opción le debemos especificar el timestamp desde el cual consideramos nuestra instalación base, por lo que más atras ya no se va a hacer rollbacks. Por ejemplo, calculamos el timestamp mediante date:

# date --date="8/12/2008" +%s
1218492000

Y lo añadimos en el fichero /etc/rpm/macros:

%_repackage_all_erasures 1
%_unsafe_rollbacks 1218492000

También puede resultar útil cambiar el path donde se guardan los rpm para hacer los rollbacks. Por defecto se encuentran en /var/spool/repackage/, pero con la opción %_repackage_dir podemos especificar cualquier otro sitio. Por ejemplo:

%_repackage_all_erasures 1
%_unsafe_rollbacks 1218492000
%_repackage_dir /var/spool/rpm/repackage

Por otro lado, en sistemas basados en paquetes RPM como CentOS, RHEL o Fedora lo más común para actualizar los paquetes es usar yum, por lo que también se tiene que configurar para usar el repackage añadiendo en el fichero /etc/yum.conf lo siguiente:

tsflags=repackage

Así, si realizamos un update mediante yum:

# yum update -y
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * epel: www.mirrorservice.org
 * base: centose.centos.org
 * updates: centosh.centos.org
 * addons: centosj.centos.org
 * extras: centosh.centos.org
epel                      100% |=========================| 2.1 kB    00:00
base                      100% |=========================| 1.1 kB    00:00
updates                   100% |=========================|  951 B    00:00
addons                    100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
Excluding Packages in global exclude list
Finished
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package jwhois.x86_64 0:3.2.3-8.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Updating:
 jwhois                  x86_64     3.2.3-8.el5      base               95 k

Transaction Summary
=============================================================================
Install      0 Package(s)
Update       1 Package(s)
Remove       0 Package(s)

Total download size: 95 k
Downloading Packages:
(1/1): jwhois-3.2.3-8.el5 100% |=========================|  95 kB    00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Repackagin: jwhois                       ######################### [0/2]
  Updating  : jwhois                       ######################### [1/2]
  Cleanup   : jwhois                       ######################### [2/2]

Updated: jwhois.x86_64 0:3.2.3-8.el5
Complete!

Podremos realizar el rollback de la misma manera mediante rpm:

# rpm -Uvh --rollback '1 hour ago'
warning: /var/spool/repackage/jwhois-3.2.2-6.EL4.1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 443e1821
Rollback packages (+1/-1) to Tue Dec  9 10:24:43 2008 (0x493e395b):
Preparing...                ########################################### [100%]
   1:jwhois                 ########################################### [ 33%]
Cleaning up repackaged packages:
        Removing /var/spool/repackage/jwhois-3.2.2-6.EL4.1.x86_64.rpm:

Relacionados

2 comments to “Instalación y desinstalación de paquetes RPM transaccional (rollback de actualizaciones)”

  1. Hola,

    ¿Sabes si existe alguna forma de listar los rollbacks + timestamps disponibles que se hacen con el método –repackage? El comando up2date tiene la opción “–list-rollbacks” pero parece que está ya deprecated ;-(

    Hasta ahora lo venía usando listando los RPMs disponibles en “/var/spool/repackage”, pero resulta un poco “coñazo” en algunos casos trabajar manualmente si son muchos los paquetes implicados y tienes varios “timestamps”.

    Spacewalk tiene esta opción.. aunque todavía no la he probado, pero sería interesante poder realizar estas operaciones desde el propio servidor, con algún plugin para Yum, directamente con RPM, etc..

    Saludos!

  2. Hola,
    En la versión actual de RHEL 5 (o CentOS 5) creo que no hay esta opción (o realmente esta muy bien escondida o sin documentar). La verdad es que lo encuentro bastante absurdo, por lo que supongo que la volveran a incluir en la proxima versión, ya sea en el rpm o en el yum.

    La única opción que se me ocurre es mirar en los logs la instalación y actualización de paquetes. Por ejemplo:

    # zcat messages.*.gz | grep yum
    Dec  9 08:34:41 inf14 yum: Updated: glibc-common - 2.5-24.el5_2.2.x86_64
    Dec  9 08:34:52 inf14 yum: Updated: glibc - 2.5-24.el5_2.2.x86_64
    Dec  9 08:34:54 inf14 yum: Updated: glibc - 2.5-24.el5_2.2.i686
    Dec  9 08:34:55 inf14 yum: Updated: glibc-headers - 2.5-24.el5_2.2.x86_64
    Dec  9 08:34:56 inf14 yum: Updated: glibc-devel - 2.5-24.el5_2.2.x86_64
    Dec  1 09:37:24 inf14 yum: Updated: vim-common - 2:7.0.109-4.el5_2.4z.x86_64
    Dec  1 09:37:25 inf14 yum: Updated: dmraid - 1.0.0.rc13-15.el5_2.1.x86_64
    Dec  1 09:37:25 inf14 yum: Updated: vim-minimal - 2:7.0.109-4.el5_2.4z.x86_64
    Dec  1 09:37:25 inf14 yum: Updated: vim-enhanced - 2:7.0.109-4.el5_2.4z.x86_64
    Dec  1 10:03:35 inf14 yum: Installed: libart_lgpl - 2.3.17-4.i386
    Dec  1 10:03:35 inf14 yum: Installed: rrdtool - 1.2.27-3.el5.x86_64
    Dec  1 10:03:35 inf14 yum: Installed: rrdtool - 1.2.27-3.el5.i386
    

    saludos!

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>