Use o dpkg e solucione problemas

editado julho 2012 em Dicas e Truques
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:
sudo 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


é isso, espero que tenham gostado do artigo, ele me ajudou muito, vale a pena compartilhar o conhecimento entre usuários que respeitam a ideia do software livre!
Tudo de bom pessoal

Rafael STS

Comentários

  • CretoCreto Paulo Benedito
    editado julho 2012
    Muito bom sim, mas isso poderia ter ido direto para a [url=http://www.linuxmint.com.br/modules/dokuwiki]Wiki Linux Mint Brasil[/url]

    O que diz? Da próxima quem sabe você já poste por lá.

    E mais, bom ver um conterrâneo paraense por aqui, participando.

    T+
  • editado julho 2012
    obrigado pessoal, é gratificante saber que gostaram, tudo de bom.
Entre ou Registre-se para fazer um comentário.