~~META: date created = 2007-08-03 13:45 &date modified =2007-08-03 13:47 ~~ ====== 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 [[http://www.skype.com/download/skype/linux/|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. {{tag>debian linux 64bits}} ~~DISCUSSION~~