sexta-feira, 13 de maio de 2011

Dicas de atualização do seu Gentoo Linux

Assim como a instalação, a atualização do Gentoo é um processo demorado. Isso deve-se ao fato de todos os pacotes serem compilados localmente.

A atualização é feita com o comando

# emerge --update world --deep

Depois de finalizar a atualização é importante executar dois comandos,

# revdep-rebuild


# etc-update

O segundo verifica se arquivos de configuração dos pacotes que foram instalados tiveram alguma alguma modificação em relação a versão anterior. Ele não verifica se o usuário alterou o arquivo, ou seja, caso alguma customização tenha sido feita, ela será retirada, e o arquivo instalado será o padrão do novo pacote.

O comando sempre lista os arquivos que serão alterados, e é possível ver as diferenças para as versões anteriores. Pode-se por exemplo, fazer um backup dos arquivos, deixar o comando sobrescrevê-los, e depois reconfigurá-los conforme a necessidade de cada um.

Já o revdep-rebuild é muito importante, pois ele verifica se, a versão antiga dos pacotes tem alguma dependência. Se tiver, esses pacotes dependentes serão recompilados.

Após a atualização é importante verificar as mensagens geradas (caso não consiga ver no terminal por algum motivo, é possível vê-las no arquivo /var/log/portage/elog/summary.log.

Alguns pacotes podem retornar uma mensagem que contenha uma informação como por exemplo:

Old versions of installed libraries were detected on your system.
In order to avoid breaking packages that depend on these old libs,
the libraries are not being removed. You need to run revdep-rebuild
in order to remove these old dependencies. If you do not have this
helper program, simply emerge the 'gentoolkit' package.


# revdep-rebuild --library '/usr/lib64/liblzma.so.0'


Once you've finished running revdep-rebuild, it should be safe to
delete the old libraries. Here is a copy & paste for the lazy:
# rm '/usr/lib64/liblzma.so.0'

É muito interessante executar esses comandos, pois isso irá recompilar as dependências somente desse pacote, e depois pode-se remover a versão antiga da biblioteca, que não será mais utilizada.

Ao realizar esses comandos deve-se ter paciência para que eles terminem, pois em alguns casos pode-se ter alguma conseqüência grave.

Outro dia, após atualizar meu Gentoo, fui executar o revdep-rebuild --library para uma das bibliotecas instaladas. Alguns dos pacotes dependentes iriam demorar muito para compilar, por isso resolvi interromper o processo antes de iniciar a compilação.

Como resultado, meu servidor X não carregou mais corretamente. Vendo seu log, verifiquei que o problema era uma biblioteca que havia sido corrompida. Tentei recompilar a biblioteca, mas algumas outras bibliotecas necessárias para o gcc também haviam sido corrompidas.

Para resolver o problema tive que baixar o stage e copiar algumas bibliotecas para substituir as que foram corrompidas. Com isso foi possível recompilar os pacotes.

Ainda não terminei a recuperação. Provavelmente ainda precisarei recompilar vários pacotes para resolver todos os problemas.

Com isso fica a dica: nunca interrompa o processo de atualização do Gentoo. Tanto para atualização/instalação de pacotes como para o revdep-rebuild sempre utilize o parâmetro -v para ver o que será executado. Execute os comandos somente quando tiver certeza que poderá esperar a finalização deles.

Aproveitando a oportunidade: atualize seu Gentoo periodicamente, caso contrário haverá muitas atualização a serem feitas de uma vez.