Índice - Tutoriais

Tutorial completo do apt-get

Por Carlos E. Morimoto em 26 de abril de 2007 às 07h57

7

Parte 3

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.

7 comentáriosPor Carlos E. Morimoto. Revisado 24 de fevereiro de 2011 às 16h06

Comentários

Obrigado!
por Daniel (anônimo) em 9 de fevereiro de 2012 às 00h22
Otimo tutorial, direto e sucinto.
Obrigado pela ajuda!
apt-get
por Valdeci Barreto (anônimo) em 21 de dezembro de 2011 às 08h54
Ótimo tutorial, direto no assunto.
Abraços!
Obrigado!
por Leandro de Souza (anônimo) em 10 de agosto de 2011 às 22h19
Quem usa sistemas baseados em linux sabe a importância que tem um tutorial bem explicado e detalhado como esse. Com certeza depois dessa meus dias de Windows estão contados... Vlw!
Congratulation!
por Afonso Yoshimura (anônimo) em 16 de fevereiro de 2011 às 14h59
Sempre fui fã dos seus Livros e Tutoriais.....parabens por mais este tutorial sobre o apt-get. Linguagem simples e fácil de entender.
Obrigado, Carlos! Ótimo tutorial!!!
por Paulo Correia (anônimo) em 6 de fevereiro de 2011 às 18h23
Caro Carlos E. Morimoto,

Muito obrigado por compartilhar seu conhecimento.
Ótimo tutorial, amigo, parabéns!

Abraços!!!
Muito bom
por Joel Backschat (anônimo) em 23 de novembro de 2010 às 12h33
Fantástico ótimo pra quem ta começando com essa ferramenta. Gostei demais pra mim foi ótimo que estou apredendo a trabalhar com apt-get parabéns!
Estava em gestação
por Luiz Marins (anônimo) em 10 de novembro de 2010 às 19h51
Ia nascer:

"...ou utilizar a versão de desenvolvimento do Kurumin 8 (mantenha-se informado através dos fóruns), que será baseado no Lenny, a próxima versão do Debian."