Convertendo pacotes binários de 32 para 64 bits

Hoje vou descrever o que eu faço quando um pacote binário só é distribuído para 32 bits. Vou usar como exemplo o Skype. Baixe o pacote e salve o mesmo em alguma pasta apropriada (Pacotes, por exemplo). Primeiro vamos extrair o conteúdo do pacote binário em uma pasta temporária:

$ mkdir tmp
$ dpkg -x skype-1.4.0.74.deb tmp
$ dpkg -e skype-1.4.0.74.deb tmp/DEBIAN
A pasta tmp conterá todos os arquivos que seriam instalados. No caso do Skype teremos
$ ls -l tmp/
total 0
drwxr-xr-x 2 tjpp tjpp 50 2007-06-12 05:51 DEBIAN
drwxr-xr-x 3 tjpp tjpp 19 2007-06-12 06:00 etc
drwxr-xr-x 4 tjpp tjpp 28 2007-06-12 06:00 usr
$ ls -l tmp/usr/
total 0
drwxr-xr-x 2 tjpp tjpp 18 2007-06-12 06:00 bin
drwxr-xr-x 7 tjpp tjpp 73 2007-06-12 06:00 share
Instale as bibliotecas de 32 bits disponíveis na sua distribuição:
$ apt-cache search ia32-libs
ia32-libs - ia32 shared libraries for use on amd64 and ia64 systems
ia32-libs-gtk - gtk+ ia32 shared libraries for with OpenOffice.org
...
Instale todas ;-) Algumas bibliotecas estão disponíveis como lib32xxx (lib32asound2 para ALSA, lib32bz2-1.0 para bzip,etc.). Pode ser interessante instalar algumas destas, mas não se preocupe pois podemos tratar delas depois.

Vamos verificar agora que bibliotecas de 32 bits que nós não possuímos. Para isto, precisamos reconhecer o programa binário. No caso do Skype, ele está em tmp/usr/bin/skype, veja:

$ file tmp/usr/bin/skype 
tmp/usr/bin/skype: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), stripped
Vejamos as bibliotecas que ele vai usar
$ ldd tmp/usr/bin/skype 
        linux-gate.so.1 =>  (0xffffe000)
        libasound.so.2 => /usr/lib32/libasound.so.2 (0xf7ee7000)
        librt.so.1 => /lib32/librt.so.1 (0xf7ede000)
        libQtDBus.so.4 => not found
        libQtGui.so.4 => not found
        libQtNetwork.so.4 => not found
        libQtCore.so.4 => not found
        libpthread.so.0 => /lib32/libpthread.so.0 (0xf7ec6000)
        libsigc-2.0.so.0 => not found
        libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf7de0000)
        libm.so.6 => /lib32/libm.so.6 (0xf7db9000)
        libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7dae000)
        libc.so.6 => /lib32/libc.so.6 (0xf7c6d000)
        libX11.so.6 => /usr/lib32/libX11.so.6 (0xf7b7b000)
        libdl.so.2 => /lib32/libdl.so.2 (0xf7b77000)
        /lib/ld-linux.so.2 (0xf7fc9000)
        libXau.so.6 => /usr/lib32/libXau.so.6 (0xf7b74000)
        libXdmcp.so.6 => /usr/lib32/libXdmcp.so.6 (0xf7b6f000)
Portanto, não temos libQtDBus.so.4, libQtGui.so.4, libQtNetwork.so.4, libQtCore.so.4 e libsigc-2.0.so.0. Esta que vou descrever é apenas uma das saídas: vá para http://packages.debian.org, e na seção Procurar o conteúdo dos pacotes, digite o nome da biblioteca que você precisa e Pesquisar. Por exemplo, no caso da libsigc-2.0.so.0, o pacote é libs/libsigc++-2.0-0c2a. Clique na descrição do pacote e vá para a sessão i386. Clique e escolha um mirror para baixar. Salve o pacote no diretório em que você está trabalhando. Abra o pacote da biblioteca, como anteriormente
$ mkdir tmp2
$ dpkg -x libsigc++-2.0-0c2a_2.0.17-2_i386.deb tmp2
Vamos colocar a biblioteca no pacote do Skype.
$ mkdir tmp/usr/lib32
$ cp tmp2/usr/lib/libsigc-2.0.so.* tmp/usr/lib32
As bibliotecas sempre tem links associados, assim copiamos os links também. Repita o processo para todas as bibliotecas.

Agora edite o arquivo tmp/DEBIAN/control. Substitua i386 por amd64 :-) Remova as dependências das bibliotecas que você baixou: libqt4-core, libqt4-gui e libsigc++-2.0-0c2a. Remova as outras dependências e adicione ia32-libs e as lib32 que eventualmente você instalou. Estamos quase lá. Como por mágica, faça, no diretório tmp

$ dpkg-buildpackage -rfakeroot
E aguarde seu pacote amd64 ser criado na pasta Pacotes. Instale-o com dpkg -i. Anuncie que você tem uma pacote novo e distribua. Colabore com a proliferação de Linux 64 bits.

blog/entradas/convertendo-pacotes-binarios-de-32-para-64-bits.txt · Última modificação: 27/Mar/2010 23:52 (edição externa)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0