você está aqui: Home  → Arquivo de Mensagens Curso Gratuito sobre Expressões Regulares, com o Prof.  Julio Neves

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