Arquivo da tag: yum

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.

Utilizando o DVD do Red Hat Enterprise como repositório para o yum

Quando se usa uma distribuição Red Hat like tem-se uma vantagem de usar o yum para instalar pacotes e suas dependências de maneira fácil. Basta executar yum install pacote para que o pacote seja baixado da Internet e instalado juntamente com suas dependências.

O “problema” é que muitas vezes se deseja utilizar os pacotes que estão no DVD de instalação do Red Hat e não os da Internet (nem todos tem uma assinatura da RHN) e o yum não está configurado para utilizar o DVD como repositório.

Não é algo muito difícil de se fazer, basta criar um repositório e adicionar o caminho correto para o DVD.

Então crie o arquivo /etc/yum.repos.d/dvd.repo (não é necessário que o nome seja dvd.repo, pode-se escolher qualquer nome desde que a extensão seja mantida) e adicione o seguinte conteúdo:
[dvd]
mediaid=1250663123.136977*
name=DVD do RHEL5
baseurl=file:///media/RHEL_5.4%20i386%20DVD/Server
enabled=1
gpgcheck=0

Feito isto, o yum irá reconhecer o DVD como repositório de pacotes de instalação. As únicas observações são que valor para o mediaid está contido no arquivo .discinfo que está na raiz do DVD de instalação e que a baseurl eventualmente precisará ser ajustada, dependendo da versão do Red Hat que se tem disponível.

Como configurar o yum para utilizar somente um repositório?

Como configurar o yum para utilizar somente um repositório?

Primeiro, o que gerou esta motivação?

Acompanho a lista fedora-users-br e vi este email do Ricardo Vendramini: http://lists.fedoraproject.org/pipermail/br-users/2010-November/013615.html

Para reduzir o uso de banda, surgiu a ideia de se configurar um proxy squid. Quando uma máquina for se atualizar, ela baixa os pacotes e o squid os armazena em cache. Quando uma segunda máquina buscar esta mesma atualização, o squid irá entregar o arquivo do cache ao invés de baixar novamente, economizando tempo (rede interna provavelmente é mais rápida que Internet) e banda.

O problema: o yum tem uma lista de mirrors possíveis e, a cada vez, ele pode utilizar um mirror diferente da última. Com isso, o squid terá diversas cópias de um mesmo arquivo mas vindo de domínios diferentes. Assim, além de não reduzir o uso da banda (ideia inicial) ainda se ocupa espaço de disco do cache que poderia ser melhor utilizado com outros arquivos.

Solução? “Forçar” o yum a baixar sempre de um mesmo mirror.
Para isso, deve-se configurar os repositórios “updates” e “fedora” (assim tanto os updates como eventuais instalações de pacotes serão armazenados no cache do squid). Então, edite o arquivo “/etc/yum.repos.d/fedora-updates.repo“, comente a linha “mirrorlist” e descomente “baseurl“. Em “baseurl“, coloque o endereço de um dos mirrors. Como sugestão, estou utilizando o mirror da Universidade Federal do Paraná que normalmente é bem rápido para usuários no Brasil.

[updates]
name=Fedora $releasever – $basearch – Updates
failovermethod=priority
baseurl=http://fedora.c3sl.ufpr.br/linux/updates//$releasever/$basearch/
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

Também deve-se editar o “/etc/yum.repos.d/fedora.repo“:

[fedora]
name=Fedora $releasever – $basearch
failovermethod=priority
baseurl=http://fedora.c3sl.ufpr.br/linux/releases/$releasever/Everything/$basearch/os/
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

Repita o procedimento em todas as máquinas com Fedora na rede. Feito isto, basta utilizar novamente o comando “yum update” para que todas as instalações e atualizações venham sempre do mesmo mirror.

Outra ideia para melhorar o desempenho, desabilitar o uso do plugin “yum-presto”. O presto utiliza o conceito de deltarpm para reduzir o tamanho dos pacotes de atualização. O deltarpm é um diff binário entre duas versões de rpm. Basicamente você baixa somente a diferença entre duas versões de um mesmo pacote e não mais o pacote todo. Ex: é liberada uma atualização do OpenOffice onde apenas um arquivo foi modificado. Este arquivo tem 1 Mbyte enquanto o pacote todo tem 50. O deltarpm teria aproximadamente 1 Mbyte e se teria uma economia de 49 Mbytes de download. Veja um outro artigo que escrevi sobre o yum presto aqui.

Mas como desabilitar o yum-presto melhora o desempenho? Como você terá todos os pacotes (ou pelo menos os mais utilizados) no cache do squid, você não estará fazendo o download de um pacote grande, você estará utilizando uma cópia localizada no cache na rede interna. Assim, o download será rápido e não precisará de tempo para reconstruir os pacotes de atualização, o que normalmente leva alguns minutos. Só para reforçar, yum-presto economiza muito download, mas aumenta o tempo de atualização devido a reconstrução do pacote. Se o tempo de download é muito baixo (rede interna), provavelmente não compensa o tempo de reconstrução, por isso a sugestão de desabilitar o yum-presto.

E como fazer isso? Basta editar o arquivo “/etc/yum/pluginconf.d/presto.conf” e configurar “enabled=0“. Pronto, da próxima vez que utilizar o yum, o plugin presto não será carregado.

Dica 18: Usando yum-presto no Fedora 7 e no CentOS 5

Dica 18 – Usando o yum-presto no Fedora 7 e no CentOS 5
Mesmo em dias como hoje, onde uma conexão banda larga de alguns Mbps está custando relativamente pouco (pelo menos aqui em São Paulo), economizar no tamanho dos downloads de atualizações é muito importante. Eu pelo menos prefiro esperar um minuto ao invés de meia hora para atualizar meu sistema.

Continue lendo Dica 18: Usando yum-presto no Fedora 7 e no CentOS 5

Dica 15: Como fazer upgrade do Fedora Core 5 para Fedora Core 6 usando yum

Dica 15 – Como fazer upgrade do Fedora Core 5 para Fedora Core 6 usando yum
Neste tutorial explicarei como fazer upgrade do Fedora Core 5 para Fedora Core 6 usando o yum. Para fins de ter o tutorial pronto na data do lançamento da versão final, fiz este procedimento utilizando a versão test 3.

Continue lendo Dica 15: Como fazer upgrade do Fedora Core 5 para Fedora Core 6 usando yum