INICIANDO NO APT-GET [parte 3]

Tutorias diversos sobre serviços e aplicações em servidores Linux
Avatar do usuário
dougsky
Administrator
Administrator
Mensagens: 223
Registrado em: 10 Jun 2013 12:44
Localização: Lagoa Santa - MG
Idade: 47
Status: Offline

INICIANDO NO APT-GET [parte 3]

Mensagem por dougsky »

Parte 3

[glow=red,2,300]Resolvendo problemas com o apt-get
[/glow]
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.

Fonte: hardware.com.br


Voltar para “Tutoriais”