sexta-feira, março 05, 2010

[Dicas-L] Resolvendo dependências de pacotes Ubuntu no Debian

[Dicas-L] - Resolvendo dependências de pacotes Ubuntu no Debian

Caso não consiga visualizar esta mensagem, clique aqui.
URL deste artigo: http://www.Dicas-L.com.br/dicas-l/20100305.php

Logotipo Dicas-L, por Ricardo Burile

Acompanhe a Dicas-L no twitter

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

+ comente esta mensagem

Aprenda inglês em casa
Curso estruturado com o que existe de melhor e mais rápido em estratégias e técnicas de aprendizado para adultos.
Conheça as aulas experimentais.

Dicas-L: Uma dica por dia desde 3 de março de 1997
As mensagens da lista Dicas-L são veiculadas diariamente
para 29558 assinantes.
Newsfeed RSS: http://www.dicas-l.com.br/index.xml
Caso não queira mais receber estas mensagens clique aqui.

Apoio
A Dicas-L tem o apoio da Locaweb

Nenhum comentário: