Usando o dpkg e solucionando problemas

O dpkg complementa o apt-get/aptitude, permitindo instalar pacotes .deb baixados manualmente, o que é comum ao instalar programas proprietários ou aplicativos muito recentes, que ainda não foram incluídos nos repositórios oficiais.

Na verdade, o dpkg é quem faz o trabalho pesado ao instalar ou remover qualquer pacote, já que ele é invocado pelo apt em cada operação. Entretanto, ao utilizá-lo manualmente, você deixa de contar com todas as funções de cálculo de dependências e resolução de problemas empregadas pelo apt. É justamente por isso que deixamos para utilizá-lo apenas em situações específicas.

Para instalar um único pacote, você usa o comando “dpkg -i“, seguido pelo nome do arquivo. Para instalar de uma vez vários pacotes, use o “dpkg -i *.deb” dentro da pasta com os arquivos.

O problema do dpkg é que ele apenas instala o pacote solicitado, sem instalar junto as dependências necessárias. Isso muitas vezes causa problemas relacionados às dependências, mas eles são geralmente fáceis de contornar. Veja um exemplo:

$ sudo dpkg -i skype-debian_2.0.0.72-1_i386.deb

Selecionando pacote previamente não selecionado skype. 
(Lendo banco de dados ... 126618 arquivos e diretórios atualmente instalados). 
Desempacotando skype (de skype-debian_2.0.0.72-1_i386.deb) ... 
dpkg: problemas de dependência impedem a configuração de skype: 
skype depende de libqt4-gui (>= 4.2.1); porém: 
Pacote libqt4-gui não está instalado. 
dpkg: erro processando skype (--install): 
problemas de dependência - deixando desconfigurado 
Erros foram encontrados durante o processamento de: 
skype

Como você pode ver, o pacote skype precisa do pacote “libqt4-gui”, uma biblioteca que está disponível via apt-get, mas que não está instalada. Para solucionar este tipo de problema, rode o comando “apt-get -f install” para que o apt-get possa verificar o que foi feito e corrigir qualquer problema que tenha aparecido durante a instalação. Em casos de pacotes quebrados ou conflitos, o apt-get sempre vai sugerir alguma solução, mesmo que ela seja simplesmente remover o novo pacote.

No exemplo, ao rodar o “apt-get -f install”, a biblioteca é instalada automaticamente e o problema resolvido:

# apt-get -f install

Lendo listas de pacotes... Pronto 
Construindo árvore de dependências
Lendo informação de estado... Pronto 
Corrigindo dependências... Pronto 
Os pacotes extra a seguir serão instalados: 
libqt4-gui 
Os NOVOS pacotes a seguir serão instalados: 
libqt4-gui 
0 pacotes atualizados, 1 pacotes novos instalados, 0 a serem removidos e 88 não atualizados. 
1 pacotes não totalmente instalados ou removidos. 
É preciso baixar 7552B de arquivos. 
Depois desta operação, 77,8kB adicionais de espaço em disco serão usados. 
Você quer continuar [S/n]?

Note que, em muitos casos, as dependências podem ser supridas por outros pacotes relacionados. Por exemplo, o pacote “nxserver”, que contém o servidor NX, precisa dos pacotes “nxnode” e “nxclient”, que também estão disponíveis no site do desenvolvedor (www.nomachine.com). Para instalar o nxserver, você precisaria instalar os três pacotes usando o dpkg e só depois rodar o “apt-get -f install”, para que o apt-get cuidasse das dependências externas.

Em casos onde o “apt-get -f install” não consiga resolver o problema, experimente o “apt-get -f remove”, como em:

$ sudo apt-get -f remove

Ele tem uma função similar, mas dá preferência a remover os pacotes com problemas, ao invés de tentar corrigir a instalação, resolvendo o problema em casos em que o pacote instalado manualmente dependa de outros que não estão disponíveis via apt.

Outro comando que pode ser útil em algumas situações é o “dpkg –configure -a”. Ele verifica pendências na configuração dos pacotes, concluindo a instalação em casos em que a instalação foi abortada no meio, como, por exemplo, quando o micro desliga por falta de energia:

$ sudo dpkg --configure -a

Além de instalar programas manualmente, o dpkg também permite removê-los, usando o parâmetro “-r”, como em “dpkg -r skype”. Em situações normais, seria melhor simplesmente usar o apt-get ou o aptitude, mas em algumas situações específicas o “dpkg -r” pode salvar o dia, como em casos onde pacotes extra-oficiais problemáticos tentam subscrever arquivos que fazem parte de outros pacotes.

Esse tipo de problema acontece normalmente apenas ao utilizar repositórios não-oficiais, ou ao utilizar versões de desenvolvimento, mas, de qualquer maneira, é importante saber lidar com eles. Aqui temos um exemplo, causado por um pacote do Acrobat Reader disponibilizado através do Medibuntu no Ubuntu 8.10:

(Lendo banco de dados ... 147830 arquivos e diretórios atualmente instalados). 
Desempacotando acroread-debian-files (de .../acroread-debian-files_0.0.24medibuntu1.1_i386.deb) ...

dpkg: erro processando /var/cache/apt/archives/acroread-debian-files_0.0.24medibuntu1.1_i386.deb (--unpack): 
tentando sobrescrever '/usr/bin/acroread', que também está no pacote adobereader-ptb 
Erros foram encontrados durante o processamento de: 
/var/cache/apt/archives/acroread-debian-files_0.0.24medibuntu1.1_i386.deb 
E: Sub-process /usr/bin/dpkg returned an error code (1)

Como pode ver, o pacote tenta subscrever o arquivo “/usr/bin/acroread” que, por erro de empacotamento, está incluído também no pacote “adobereader-ptb”, disponível no mesmo repositório. Nesse caso, o apt fica travado, repetindo a mensagem a cada instalação, impedindo que você faça qualquer coisa até solucionar o problema. A solução nesse caso é remover manualmente o pacote anterior, usando o dpkg, e em seguida deixar que o “apt-get -f install” coloque ordem na casa:

$ sudo dpkg -r adobereader-ptb 
$ sudo apt-get -f install

Se você receber erros de dependências, mas mesmo assim quiser forçar a instalação do pacote (o que nunca é uma boa ideia em sistemas baseados no Debian), pode usar o comando “dpkg -i –force-all pacote.deb”. Neste caso, tome cuidado com versões antigas ou conflitantes, pois este último comando não checa dependências nem conflitos, apenas instala tudo de uma vez, na marra, o que pode causar os mais diversos problemas.

O dpkg pode ser usado também para “desmontar” pacotes, permitindo que você examine os componentes ou simplesmente use algum arquivo de configuração ou outro componente específico sem precisar instalar todo o pacote. Para isso, crie uma pasta temporária e use o comando “dpkg -x”, especificando o pacote e em seguida a pasta onde ele será extraído, como em:

$ dpkg -x amora-server_1.1-1_i386.deb amora

Outro comando útil é o “apt-get install –reinstall”, que força a reinstalação do pacote (mesmo que ele já esteja instalado e atualizado), o que permite resolver casos de arquivos corrompidos devido a desligamentos incorretos ou problemas diversos. Basta descobrir de qual pacote o arquivo corrompido faz parte e em seguida reinstalá-lo, como em:

$ sudo apt-get install --reinstall evolution-common

Concluindo, o dpkg pode ser usado também para salvar uma lista de todos os pacotes instalados no seu PC e instalá-los todos de uma vez em outro PC com apenas três comandos. Esta dica é muito útil ao reinstalar o sistema, já que permite “clonar” sua instalação atual, fazendo com que a nova instalação contenha todos os softwares que você usa, sem precisar instalar pacote por pacote. Se você preservar os arquivos do seu diretório home, terá uma instalação do sistema virtualmente idêntica à atual.

O primeiro passo é salvar a lista dos pacotes atualmente instalados usando o “dpkg –get-selections”. Originalmente ele simplesmente escreveria a lista na tela, mas a seta faz com que ela seja salva no arquivo indicado:

$ sudo dpkg --get-selections > meubuntu.txt

Na hora de restaurar a instalação, use o “dpkg –get-selections” no diretório onde salvou o arquivo, invertendo a seta para que ele leia a lista a partir do arquivo:

$ sudo dpkg --set-selections < meubuntu.txt

O passo final é usar o “apt-get dselect-upgrade” para instalar os pacotes selecionados, restaurando a instalação:

$ sudo apt-get dselect-upgrade

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X