Rollback de atualizações de pacotes utilizando yum

O YUM (Yellowdog Updater Modified) é o gerenciador de pacotes utilizado por diversas distribuições Linux, como Fedora e Red Hat por exemplo.

Como gerenciador de pacotes, é possível utilizá-lo para instalar, remover ou atualizar pacotes, por exemplo.

Uma característica dele, implementada desde a versão 3.2.25, é a possibilidade de se fazer rollback de transações, ou seja, é possível reverter uma ação realizada anteriormente. Exemplo:

Vamos supor que atualizamos o sistema com o yum e, após isso, verificamos que algum tipo de incompatibilidade ocorreu. Como fazer para voltar os pacotes instalados no sistema para o estado anterior a este update? Ou ainda, instalo alguma ferramenta (que muitas vezes vem com trocentas dependências junto) e decido removê-la, como fazer para remover tudo de uma vez sem ter que pesquisar manualmente todas as dependências?

Como teste, instalei o GNOME via yum:

# yum groupinstall “GNOME Desktop”

[…]

Transaction Summary
==========================================================
Install  77 Packages (+209 Dependent packages)

Total download size: 211 M
Installed size: 791 M
Is this ok [y/N]:

 

E então resolvi removê-lo. Quase trezentos pacotes para remover (286 para ser mais exato), como fazer de maneira “indolor”?

Primeiro devemos listar todas as transações realizadas, isto pode ser feito com os parâmetros “history list” do yum:

# yum history list
Loaded plugins: langpacks, presto, refresh-packagekit
ID     | Login user               | Date and time    | Action(s)      | Altered
——————————————————————————-
5 |  <gustavo>               | 2013-02-22 10:45 | Install        |  286
4 |  <gustavo>               | 2013-02-22 10:20 | E, I, O, U     |  136 EE
3 |  <gustavo>               | 2013-02-06 17:55 | I, O, U        |  127  <
2 |  <gustavo>               | 2013-01-25 16:26 | I, O, U        |  246 >E
1 | System <unset>           | 2013-01-16 15:00 | Install        | 1044
history list

 

Pela data e hora, vi que o que desejo desfazer provavelmente possui ID 5, como confirmar?

Basta executar o yum com os parâmetros “history info”:

# yum history info 5
Loaded plugins: langpacks, presto, refresh-packagekit
Transaction ID : 5
Begin time     : Fri Feb 22 10:45:03 2013
Begin rpmdb    : 1061:186cde8ef6ee4dfdaba2f2d21f79f9f5702ce554
End time       :            10:49:24 2013 (261 seconds)
End rpmdb      : 1347:1316b52e0ebd064d4a657da17bf311f6e5d2d059
User           :  <gustavo>
Return-Code    : Success
Command Line   : groupinstall GNOME Desktop
Transaction performed with:
Installed     rpm-4.10.3.1-1.fc18.i686 @updates
Installed     yum-3.4.3-49.fc18.noarch @updates
Packages Altered:
Dep-Install OpenEXR-libs-1.7.1-1.fc18.i686                                                 @fedora
Install     PackageKit-command-not-found-0.8.7-1.fc18.i686                                 @updates

[…]

E ali no meio tem o segredo: “Command Line   : groupinstall GNOME Desktop”

É exatamente esta a transação que desejo desfazer. Então, basta executar o undo o ID correspondente:

# yum history undo 5
[…]
Transaction Summary
==========================================================
Remove  286 Packages

Installed size: 791 M
Is this ok [y/N]:

 

E pronto, rollback realizado.

Curiosidade: Tem como refazer o que desfizemos? (AKA rollback do rollback).

O próprio rollback gerou uma nova transação onde os 286 pacotes foram removidos. Basta fazer um “history list” para ver que surgiu um ID 6:

# yum history list
Loaded plugins: langpacks, presto, refresh-packagekit
ID     | Login user               | Date and time    | Action(s)      | Altered
——————————————————————————-
6 |  <gustavo>               | 2013-02-22 11:47 | Erase          |  286
5 |  <gustavo>               | 2013-02-22 10:45 | Install        |  286
4 |  <gustavo>               | 2013-02-22 10:20 | E, I, O, U     |  136 EE
3 |  <gustavo>               | 2013-02-06 17:55 | I, O, U        |  127  <
2 |  <gustavo>               | 2013-01-25 16:26 | I, O, U        |  246 >E
1 | System <unset>           | 2013-01-16 15:00 | Install        | 1044
history list

E então, para refazer o que desfizemos, basta executar um “history undo 6”:

# yum history undo 6

[…]

Transaction Summary
==========================================================
Install  286 Packages

Total download size: 211 M
Installed size: 791 M
Is this ok [y/N]:
Pronto, agora podemos testar ferramentas/atualizações novas com “menos medo”, se algo sair errado, basta executar yum history undo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *