Extraindo o conteúdo de formatos .deb

Esse post mostra como extrair o conteúdo de um arquivo no formato deb, sem gerenciadores como o dpkg e os utilitários apt/aptitude. O formato deb foi originalmente desenvolvido para o Debian e, devido a distribuições como o Ubuntu, tem se tornado bem popular.

Informações acerca formato deb

O problema

Recentemente eu precisei do binário de um programa (o software pré-compilado) para utilizar no Gentoo. Esse programa era o make [1]. Logo, não era possível utilizar o emerge e muito menos acessar o repositório do projeto GNU, fazer o download do código-fonte e compilá-lo manualmente. Como, normalmente o desenvolvedor não oferece pacotes pré-compilados, eu tinha duas opções. A primeira, entrar com o Live CD e copiar o respectivo arquivo, a outra seria utilizar algum arquivo pré-compilado de outras distribuições, como o Debian, Ubuntu, etc. Por razões práticas optei pela segunda.

Procedimento

Para o processo, utilizaremos basicamente programas no canivete suíço no UNIX, principalmente os utilitários dos pacote binutils [2]. Depois de efetuar o download:

# wget http://ftp.br.debian.org/debian/pool/main/m/make-dfsg/make_3.81-2_i386.deb
# file make_3.81-2_i386.deb
make_3.81-2_i386.deb: Debian binary package (format 2.0)

Para listar os símbolos desse arquivo, utilizaremos o nm:

# nm -s make_3.81-2_i386.deb
nm: debian-binary: File format not recognized
nm: control.tar.gz: File format not recognized
nm: data.tar.gz: File format not recognized

Podemos ver que existem 3 arquivos: debian-binary, control.tar.gz e data.tar.gz. Vamos extraí-los com o ar, uma ferramenta para criar, modificar e extraír de arquivos, mais informações nas páginas do man ou aqui.

# ar -x make_3.81-2_i386.deb

Analisando cada arquivo temos:

# cat debian-binary
2.0

Que são informações da versão do binário, o próximo arquivo (control.tar.gz) armazena informações sobre o pacote

# tar zxvf control.tar.gz
./
./control
# cat control
Package: make
Version: 3.81-2
Section: devel
Priority: standard
Architecture: i386
Depends: libc6 (>= 2.3.6-6)
Suggests: make-doc-non-dfsg
Installed-Size: 1572
Maintainer: Manoj Srivastava
Source: make-dfsg
Description: The GNU version of the “make” utility.
GNU Make is a program that determines which pieces of a large
program need to be recompiled and issues the commands to recompile
them, when necessary. More information about GNU Make can be found in
the `make’ Info page. The upstream sources for this package are
available at the location ftp://ftp.gnu.org/gnu/make/. The
documentation for this package does not meet the Debian Free Software
Guidelines, and has been removed from this package.

Faltando apenas o programa propriamente dito, no arquivo data.tar.gz, eu recomendo descarregar os arquivos em um pasta separada e depois copiar apenas o que interessa, em outras palavras, você pode descarregar os arquivos na raíz do sistema e ele ficar nas pastas do sistema ou então criar um diretório qualquer (mkdir ~/teste) e fazer tudo lá. No meu caso eu copiei apenas o executável para a pasta /usr/bin do sistema.

# tar zxvf data.tar.gz
./
./usr/
./usr/bin/
./usr/bin/make
./usr/lib/
./usr/share/
./usr/share/man/
(…)

Pronto! No meu caso eu pude recuperar o make no meu sistema.

Conclusões

Há programas que fazem isso automaticamente como o deb2targz, o objetivo é apresentar o conceito por trás do formato .deb. Esse método é uma solução paliativa, pode não funcionar em casos de programa com muitas dependências, exceto se você arrumá-las, mas aí é preferível usar o gerenciador de pacotes da sua distribuição (apt, emerge, yum). Em posts futuros apresentarei outros formatos de arquivos, como o rpm, e maneiras de trabalhar com seu conteúdo.

Referências
http://www.gnu.org/software/make/
http://www.gnu.org/software/binutils/
http://www.miketaylor.org.uk/tech/deb/

Uma resposta

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: