Parte 3

Por:

Resolvendo problemas com o apt-get

O apt-get é uma ferramenta desenvolvida para ser usada em servidores e outras aplicações importantes. Isto significa que ele foi desenvolvido para ser o mais confiável possível e nunca realizar nenhuma modificação potencialmente perigosa para o
sistema, a menos que autorizado por você. Quando qualquer coisa inesperada acontece, ele pára e fica esperando sua confirmação antes de fazer qualquer outra coisa.

O problema desta abordagem é que às vezes um defeito em algum pacote ou um download corrompido pode fazer com que o apt fique “travado”, sem concluir a instalação de um determinado pacote por causa de um erro qualquer e sem aceitar instalar outros
antes que o problema inicial seja resolvido.

Este tipo de problema é relativamente raro, mas pode acontecer. Veja um caso particularmente feio que aconteceu certa vez ao tentar atualizar o k3b usando o comando “apt-get install k3b”. Neste caso ele precisou atualizar algumas bibliotecas do KDE
antes de atualizar o programa, mas uma delas estava com um defeito bobo que fazia ela tentar substituir duas associações de arquivos do K3B. Isto passaria despercebido se o apt-get não entrasse em pânico:

Descompactando substituto kdelibs-data …
dpkg: erro processando /var/cache/apt/archives/kdelibs-data_4%3a3.1.4-2_all.deb (–unpack):

tentando sobrescrever `/usr/share/mimelnk/application/x-cue.desktop’,
que também está no pacote k3b

dpkg-deb: subprocesso paste morto por sinal (Broken pipe)
Erros foram encontrados durante processamento de:
/var/cache/apt/archives/kdelibs-data_4%3a3.1.4-2_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

A partir daí o apt-get se recusava a instalar qualquer outro pacote, pois sempre tentava terminar a instalação do pacote “kdelibs-data” o que sempre acabava no mesmo erro. Como o tal arquivo a ser substituído não tem importância nenhuma, é apenas uma
associação de arquivos, a solução foi simplesmente forçar a instalação do pacote kdelibs manualmente (usando o arquivo salvo na pasta com o cache do apt-get), usando a opção do dpkg que ignora erros:

# dpkg -i –force-all /var/cache/apt/archives/kdelibs-data_4%3a3.1.4-2_all.deb

Depois disso, bastou usar o comando “apt-get -f install” que conclui a instalação de todos os pacotes pendentes, incluindo a atualização do K3B, que era meu objetivo inicial. Lembre-se de que você pode usar o botão do meio para colar a
localização do arquivo a partir da mensagem de erro, sem precisar ficar digitando tudo.

Dependendo da situação, você pode remover o pacote com problemas ao invés de forçar sua instalação. Isso é útil em casos de pacotes que realmente estão com problemas mais graves e estão bloqueando a instalação de outros. Neste caso, use o comando “dpkg
-r”, como em:

# dpkg -r k3b

Basicamente, quando encontrar este tipo de problema, você deve:

a) Rodar o “apt-get update” para ter certeza de que a lista de pacotes do apt está atualizada

b) Rode o comando “apt-get -f install” para usar o sistema de resolução de problemas do apt.

c) Caso ele não resolva, experimente usar o “dpkg -i –force-all” para forçar a instalação do pacote com problemas, como no meu exemplo, ou use o “dpkg -r pacote” caso prefira desistir da
instalação.

d) Rode o comando “dpkg –configure -a“, que verifica pendências na configuração dos pacotes.

e) Rode novamente o “apt-get -f install“. Caso ele não resolva, experimente o “apt-get -f remove“, que tem uma função similar à do “-f install”, mas dá preferência a remover
os pacotes com problemas, ao invés de tentar corrigir a instalação.

Chaves de autenticação

O GPG é um sistema de encriptação composto de duas chaves, uma chave pública, que é distribuída abertamente, e uma chave privada, que é secreta. A chave privada pode ser utilizada para “assinar” arquivos, cuja autenticidade pode ser comprovada usando a
chave pública. Isto é feito através de um truque matemático: a chave privada é uma espécie de equação extremamente complexa, que embaralha o conteúdo dos arquivos. A chave pública é um antídoto para ela, que permite reverter os dados a seu estado
original. Porém, é impossível descobrir o conteúdo da chave privada usando a chave pública e, devido à sua complexidade, é também impossível fazê-lo via força bruta.

A partir da versão 0.6, incluída no Debian Etch, o apt-get passou a operar em modo seguro, onde o desenvolvedor usa sua chave GPG privada para assinar seus pacotes e o apt-get usa a chave pública para verificar se o pacote que está sendo instalado não
sofreu modificações. Este é um processo extremamente seguro, que visa ter certeza de que o pacote que está sendo instalado na sua máquina é exatamente o mesmo que foi disponibilizado pelo desenvolvedor, eliminando qualquer possibilidade de alguém de má-fé
alterar o conteúdo pelo caminho.

Este é um nível se segurança que não possui similar no mundo Windows. Mesmo que alguém consiga invadir o servidor onde os pacotes estão hospedados, ou consiga dar upload de pacotes falsos usando uma senha roubada, não terá como falsificar também a
assinatura dos pacotes, fazendo com que você seja avisado ao tentar instalar e o problema seja detectado instantaneamente.

A desvantagem é que isto tornou o uso do apt um pouco mais complexo, já que agora, além de rodar o “apt-get update” para atualizar a lista dos pacotes, você precisará muitas vezes atualizar também a lista com as chaves públicas, usadas para verificar
os pacotes. Naturalmente, o apt-get já vem corretamente configurado tanto no Kurumin 7, quanto no Debian Etch, mas é importante entender como o sistema funciona para poder corrigir os pequenos problemas que eventualmente podem surgir.

Em primeiro lugar, a nova versão do apt usa o “gnupg” para fazer a verificação das chaves, por isso é importante que este pacote nunca seja removido do sistema. Se você estiver atualizando alguma instalação antiga, não esqueça de
instalá-lo.

Sempre que você adicionar novos repositórios do arquivo “/etc/apt/sources.list“, passará a receber um erro como este ao rodar o apt-get update:

Lendo lista de pacotes… Pronto

W: GPG error: http://www.debian-multimedia.org etch Release: As assinaturas a seguir não puderam ser verificadas devido a chave pública não estar disponível: NO_PUBKEY 07DC563D1F41B907

Aqui o apt-get está reclamando que não possui a chave de verificação para o endereço que você acabou de adicionar, de forma que não tem como verificar a autenticidade dos pacotes. Se você tentar instalar qualquer coisa a partir dele, recebe uma
mensagem como:

AVISO: Os pacotes a seguir não podem ser autenticados!
Mplayer-nogui
Instalar estes pacotes sem verificação [s/N]?

Note que você consegue fazer a instalação normalmente se pressionar “s” (o default é N, de forma que se você simplesmente pressionar Enter, aborta a instalação), mas estas mensagens acabam se tornando irritantes.

Para resolver o problema definitivamente, basta adicionar a chave, cuja identificação são os 8 dígitos finais do número fornecido na primeira mensagem. No nosso caso, a mensagem é “NO_PUBKEY 07DC563D1F41B907“, de forma que o número da
chave é “1F41B907

Para adicioná-la, usamos os dois comandos abaixo, especificando o código de identificação

# gpg --keyserver pgpkeys.mit.edu --recv-key 1F41B907
# gpg -a --export 1F41B907 | sudo apt-key add -

O primeiro baixa a chave a partir do servidor público, enquanto o segundo a adiciona no gnupg. No Kurumin 7, você pode também usar o comando “k-add-key”, um script que inclui os dois comandos, como em:

# k-add-key 1F41B907

Continue adicionando as chaves até que o “apt-get update” seja concluído sem erros. Você precisa adicionar as chaves sempre que adicionar um novo repositório no arquivo “/etc/apt/sources.list”. Algumas das chaves possuem datas de validade, de forma que
você pode precisar atualizá-las (usando o mesmo processo) a cada um ou dois anos. Você não precisa se preocupar muito com isso, pois o apt-get te avisa quando é hora de atualizar alguma das chaves :).

Outra dica é manter o relógio do micro com a data correta, pois caso o relógio esteja muito atrasado (com a data default que é usada ao resetar o CMOS usando o jumper na placa-mãe, por exemplo), o apt-get pode passar a exibir erros ao checar os pacotes
devido a erros gerados pelo gpg, como em:

W: GPG error: http://archive.progeny.com sid Release: Unknown error executing gpg

A solução nesse casso é simplesmente acertar o relógio ;).

Se, por outro lado, você acha que o aumento na segurança não compensa a complicação, pode desativar o secure apt através de uma opção dentro do arquivo “/etc/apt/apt.conf“. Abra o arquivo como root e substitua a linha:

APT::Get::AllowUnauthenticated 0 ;

Por:

APT::Get::AllowUnauthenticated 1 ;

A partir daí, ele passa a exibir um aviso ao instalar cada pacote, avisando que eles não estão sendo autenticados, mas apesar disso baixa e instala todos os pacotes normalmente. Usando esta opção, você não precisa se preocupar em adicionar as chaves ao
adicionar novos repositórios.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X