você está aqui: Home  → Arquivo de Mensagens

Resolvendo dependências de pacotes Ubuntu no Debian

Colaboração: Conrado Pinto Rebessi

Data de Publicação: 05 de março de 2010

Apesar do Ubuntu ser baseado em Debian, tem sido muito comum encontrar pacotes .deb compilados para Ubuntu/Debian, mas que certamente não foram testados no Debian, simplesmente assumindo que funcionando no Ubuntu funcionariam no Debian.

Na verdade os binários funcionam no Debian, mas o problema é para instalá-los, pois os pacotes muitas vezes tem nomes diferentes nas duas distribuições, então as dependências ficam quebradas.

Por exemplo, fui tentar instalar a versão mais atual do devede, baixado do site do desenvolvedor http://www.rastersoft.com/programas/devede.html, e recebi o erro:

  $ sudo dpkg -i devede_3.16.4-0~rastersoft1_all.deb
   (Lendo banco de dados ... 268103 arquivos e diretórios atualmente instalados).
   Preparando para substituir devede 3.16.0-0.0 (usando devede_3.16.4-0~rastersoft1_all.deb) ...
  Desempacotando substituto devede ...
  dpkg: problemas de dependência impedem a configuração de devede:
   devede depende de libavformat-extra-52; porém:
    Pacote libavformat-extra-52 não está instalado.
  dpkg: erro processando devede (--install):
   problemas de dependência - deixando desconfigurado
  Processando gatilhos para gnome-menus ...
  Processando gatilhos para desktop-file-utils ...
  Erros foram encontrados durante o processamento de:
   devede

O interessante é que eu tenho o pacote libavformat instalado, e na versão certa, pude ver isto com um simples:

  $ dpkg -l | grep libavformat
  ii  libavformat52                         5:0.5+svn20100208-0.1          ffmpeg file format library

Ou seja, eu tenho CERTEZA que, em termos de sistema, a dependência está resolvida, mas para dpkg, não está, e ponto. Normalmente, quando nos deparamos com um problema deste tipo, podemos usar o velho e bom

  $ dpkg -i --force-depends devede_3.16.4-0~rastersoft1_all.deb

Isto vai resolver, e o programa vai funcionar perfeitamente, mas a base do apt vai ficar quebrada, afinal, existe uma dependência não-resolvida, então, toda a facilidade de utilizar o apt para instalar programas e gerenciar as atualizações do sistema estará perdida, ou seja, não rola....

Procurando nos fóruns descobri um "workaround" (modo bonito de chamar gambiarra :-) ), que se chama equivs! Basicamente, com o equivs, você pode criar um pseudo-pacote debian, só para resolver dependências. Bom, chega de blábláblá e vamos trabalhar!

1. Instalando

    $ sudo apt-get install equivs

2. Utilizando

  $ cd /tmp
  $ equivs-control libavformat-extra-52

Será criado um arquivo com o nome do pacote que pedimos para criar. Então, precisamos editar o arquivo e colocar os parâmetros necessários

  $ vi libavformat-extra-52

Arquivo alterado

  # Commented entries have reasonable defaults.
  # Uncomment to edit them.
  Section: misc
  Priority: optional
  # Homepage: < enter URL here; no default>
  Standards-Version: 3.6.2
  Package: libavformat-extra-52
  Version: 1
  # Maintainer: Your Name < yourname@example.com>
  # Pre-Depends: < comma-separated list of packages>
  Depends: libavformat52
  # Recommends: < comma-separated list of packages>
  # Suggests: < comma-separated list of packages>
  # Provides: < comma-separated list of packages>
  # Replaces: < comma-separated list of packages>
  # Architecture: all
  # Copyright: < copyright file; defaults to GPL2>
  # Changelog: < changelog file; defaults to a generic changelog>
  # Readme: < README.Debian file; defaults to a generic one>
  # Extra-Files: < comma-separated list of additional files for the doc directory>
  # Files: < pair of space-separated paths; First is file to include, second is destination>
  #  < more pairs, if there's more than one file to include. Notice the starting space>
  Description: Dummy package to satisfy devede dependencies
  Dummy package to satisfy devede dependencies

Deixei a maior parte do arquivo comentada mesmo, já que não fazia diferença, e editei as que precisei, assim:

  Package: < nome do pacote faltante>

Aqui eu defini o nome do pacote que vou criar, é o pacote que está faltando.

  Depends: < nome do pacote real>

Para diminuir o perigo de quebrar todo o sistema mais tarde e não fazer a menor ideia porquê, Coloquei o pacote real como dependência do virtual, assim não perco a cadeia de dependências.

  Description: < descrição sucinta em uma linha>
   < Descrição completa em quantas linhas e parágrafos forem necessários.>

É sempre interessante saber porquê criamos um pseudo-pacote

3. Criamos então o pacote

  $ equivs-build libavformat-extra-52
  
  dh_testdir
  dh_testroot
  dh_clean -k
  dh_clean: Compatibility levels before 5 are deprecated.
  dh_testdir
  dh_testroot
  dh_install
  dh_install: Compatibility levels before 5 are deprecated.
  dh_installdocs
  dh_installdocs: Compatibility levels before 5 are deprecated.
  dh_installchangelogs
  dh_installchangelogs: Compatibility levels before 5 are deprecated.
  dh_compress
  dh_compress: Compatibility levels before 5 are deprecated.
  dh_fixperms
  dh_fixperms: Compatibility levels before 5 are deprecated.
  dh_installdeb
  dh_installdeb: Compatibility levels before 5 are deprecated.
  dh_gencontrol
  dh_gencontrol: Compatibility levels before 5 are deprecated.
  dh_md5sums
  dh_md5sums: Compatibility levels before 5 are deprecated.
  dh_builddeb
  dh_builddeb: Compatibility levels before 5 are deprecated.
  dpkg-deb: construindo pacote 'libavformat-extra-52' em '../libavformat-extra-52_1_all.deb'.
  
  The package has been created.

4. E o instalamos

  $ sudo dpkg -i libavformat-extra-52_1_all.deb

5. Agora podemos instalar o devede sem problemas

  $ sudo dpkg -i devede_3.16.4-0~rastersoft1_all.deb
  (Lendo banco de dados ... 268013 arquivos e diretórios atualmente instalados).
  Preparando para substituir devede 3.12c-0.0 (usando devede_3.16.4-0~rastersoft1_all.deb) ...
  Desempacotando substituto devede ...
  Configurando devede (3.16.4-0~rastersoft1) ...
  Processando gatilhos para gnome-menus ...
  Processando gatilhos para desktop-file-utils ...

Apenas lembrando, utilize este processo apenas aonde você tiver CERTEZA que as dependências estão REALMENTE resolvidas, ou seja, valem as mesmas ressalvas de quando você usa um dpkg --force-depends, ou o seu sistema pode se tornar instável e você não vai lembrar dos pseudo-pacotes que você criou, vai?

Conrado Pinto Rebessi é Formado em Ciência da computação, é especialista em Linux e Software Livre desde 1998, e possui certificações LPIC-1 e RHCE


Veja a relação completa dos artigos de Conrado Pinto Rebessi

 

 

Opinião dos Leitores

Wanderson Barcelos
12 Mai 2014, 14:30
Excelente! Objetivo, direto e extremamente útil, muito obrigado por compartilhar.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script