Quantas vezes após adicionar novos repositórios ao sistema, não nos deparamos com a seguinte mensagem de erro ao atualizar a lista de pacotes
disponíveis?
Não apenas recebemos esta mensagem. Se tentarmos instalar algum pacote deste repositório, recebemos um alerta informando que os pacotes não
puderam ser autenticados.
Pois bem, esta dica visa explicar porque estas mensagens aparecem quando adicionamos repositórios novos e como resolver o
problema que as causa. Se aplica às distribuições Debian, Ubuntu e derivadas.
Ao instalar um pacote, o 'apt-get' verifica suas assinaturas usando o GNU Privacy Guard, conhecido abreviadamente por GnuPG ou GPG. Ele é um mecanismo
de criptografia de chave pública popular no mundo do Software Livre que permite, entre outras coisas, realizar assinaturas de autenticidade em arquivos.
Estas assinaturas nos permitem detectar falsificações nos arquivos que baixamos da Internet, causadas seja por ações maliciosas ou erros na rede, de
maneira análoga aos algoritmos MD5 e SHA-1 para mídias.
Antes de disponibilizar um pacote em um repositório, o mantenedor do pacote usa sua chave GPG privada para assinar seus pacotes e disponibiliza junto
com eles sua chave pública na Internet.
Quando um usuário baixa um desses pacotes para o seu computador, o 'apt-get' usa a chave pública para verificar se
o pacote que está sendo instalado foi realmente enviado por aquele desenvolvedor.
Estas mensagens são exibidas porque o 'apt-get' não possui a chave pública dos pacotes do repositório, e por isso não pode verificar sua autenticidade. É possível instalar pacotes sem realizar essa verificação, mas o comportamento padrão do 'apt-get' é alertar-nos sempre que não for possível realizá-la.
Vejamos alguns casos comuns onde isso acontece e como obter a chave em cada caso. Em seguida, mostrarei como desativar a autenticação dos pacotes
por parâmetros na hora de chamar o 'apt-get' ou pela sua configuração, caso alguém ache mais prático proceder desta maneira.
É comum nos depararmos com erros como estes quando, por exemplo, adicionamos o repositório oficial do VirtualBox e tentamos obter sua lista de
pacotes. Nesse caso, existem duas maneiras de instalar a chave.
A primeira delas é baixar a chave manualmente e usar a caixa de diálogo Canais de Software para importá-la. Usando um gerenciador de downloads, como
o Wget (via terminal, execute o comando abaixo) ou o KGet (gráfico, para usuários do KDE), ou um navegador, como o Firefox, você pode baixá-la pelo link
abaixo.
Quando o download terminar, abra o Synaptic, acesse o menu "Configuração" e clique em "Repositórios", em seguida acesse a aba "Autenticação" na caixa
de diálogo que se abre e clique em "Importar arquivo de chave...".
Finalmente, localize o arquivo que você baixou e clique em OK. Pronto, a chave foi adicionada.
# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | apt-key add -
Outra opção é adicionar a chave via linha de comando, usando os utilitários 'gpg' e 'apt-key'.
Os comandos são um pouco longos, mas a vantagem nesse caso é que você não precisa procurar pela chave, já que ela é baixada automaticamente pelo próprio GPG de um servidor público de chaves.
O primeiro passo é abrir um terminal e tentar recarregar a lista de pacotes dos repositórios usando o comando 'apt-get update'.
Será retornado um erro similar ao do gerenciador de atualizações, especificando o número da chave:
Reading package lists... Done
W: GPG error: http://download.virtualbox.org squeeze Release: The following signatures couldn't be verified because the public key is not available:
NO_PUBKEY 54422A4B98AB5139
Para adicioná-la, use o comando a seguir, especificando o número da chave fornecida pela mensagem de erro. Na verdade, para identificar a chave basta
apenas os 8 dígitos finais, mas não faz diferença se você simplesmente copiar o número inteiro:
# gpg --keyserver subkeys.pgp.net --recv-keys 54422A4B98AB5139 && gpg --export --armor 54422A4B98AB5139 | apt-key add -
A saída seria:
gpg: requesting key 98AB5139 from hkp server subkeys.pgp.net
gpg: /root/.gnupg/trustdb.gpg: banco de dados de confiabilidade criado
gpg: key 98AB5139: public key "Oracle Corporation (VirtualBox archive signing key) " imported
gpg: no ultimately trusted keys found
gpg: Número total processado: 1
gpg: importados: 1
OK
O primeiro comando se encarrega de baixar a chave a partir do servidor do 'pgp.net', enquanto o segundo (separado do primeiro por "&&") faz a
importação. Note que é usado um pipe ("|") para que a chave exportada pelo GPG seja lida pelo 'apt-key'.
Seja qual for a maneira escolhida de solucionar o problema, é necessário recarregar as informações sobre os pacotes disponíveis nos repositórios. Como
sabemos, isso pode ser feito pelo Synaptic ou através do terminal:
# apt-get update
Em outros casos, como ao adicionar os repositórios do Debian Multimedia (no caso de usuários de Debian) ou do Medibuntu (usuários de Ubuntu), existe
uma forma mais prática de adicionar a chave, que é simplesmente instalar um pacote que se encarrega de instalar a chave do repositório.
Se você utiliza Debian, experimente executar os seguintes comandos no terminal (isso também pode ser feito no Synaptic, o que esses comandos fazem é adicionar o
repositório do Debian Multimedia e recarregar as listas de pacotes):
# echo "deb http://ftp.br.debian.org/debian-multimedia stable main" >> /etc/apt/sources.list
# apt-get update
Eles devem produzir a seguinte saída (que também pode ser obtida utilizando-se o Synaptic):
Reading package lists... Done
W: GPG error: http://ftp.br.debian.org stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY
07DC563D1F41B907
Usar os utilitários GPG e 'apt-key' funcionam para este caso, mas podemos resolver todo o problema instalando o pacote não autenticado 'debian-
multimedia-keyring' (o que também pode ser feito sem dificuldades via Synaptic):
# apt-get --yes --allow-unauthenticated install debian-multimedia-keyring
Usuários do Ubuntu podem adicionar o repositório do Medibuntu e obter sua chave de maneira análoga, executando os seguintes comandos no terminal:
# echo "deb http://packages.medibuntu.org/ oneiric free non-free" >> /etc/apt/sources.list
# apt-get update
# apt-get --yes --allow-unauthenticated install medibuntu-keyring
# apt-get update
Algumas chaves como as tratadas acima possuem datas de validade, de forma que você pode precisar atualizá-las (usando os mesmos processos descritos)
a cada um ou dois anos. Você não precisa se preocupar muito com isso, pois você será avisado quando chegar a hora de atualizar alguma das chaves.
Se você decidir ignorar o processo de autenticação dos pacotes, pode responder sim toda vez que receber um alerta de instalação de pacote não
autenticado, ou executar o comando 'apt-get' da seguinte maneira:
# apt-get --allow-unauthenticated install <nome_do_pacote>
Se não quiser passar esse parâmetro toda vez que for instalar um pacote não autenticado, você pode realizar a seguinte modificação na configuração do
'apt' (procure em seu sistema pelo arquivo "/etc/apt/apt.conf", se ele não existir, crie-o e adicione a linha a seguir):
APT::Get::AllowUnauthenticated 1;
Com esta modificação em sua configuração, o 'apt-get' não pedirá mais sua permissão para instalar pacotes não autenticados.
Fontes
Essa dica foi publicada originalmente no meu Blog:
avmlinux.org - Resolvendo problemas de autenticidade de pacotes
Antônio Vinícius