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.

Discussão

leylelisleylelis, 03/Aug/2007 00:41

Consegui, depois de seguir suas instruções, instalar o skype e criar um pacote para o meu ubuntu feisty amd64bits. Comigo, aconteceram duas coisas diferentes do seu tutorial. Primeiro, surgiu uma nova dependência não prevista, mas bastou adicioná-la ao pacote. Depois, no final, usei o comando dpkg-deb para construir o arquivo, em vez de dpkg-buildpackage, que dava uma mensagem de erro.

Muito obrigado pelo tutorial. Abs,

jose geraldo s netojose geraldo s neto, 03/Oct/2007 12:05

Segui suas instruções, mas no comando final dpkg-buildpackage ele dá o seguinte erro: dpkg-parsechangelog: error:cannot open debian/changelog to find format dpkg-buildpackage: unable to determine source package is

Thadeu PennaThadeu Penna, 03/Oct/2007 14:36

Oi José Geraldo,

você tem que estar dentro do diretório tmp.

RodolfoRodolfo, 29/Dec/2007 11:10

Obtenho o mesmo erro acima:

~/Desktop/tmp$ dpkg-buildpackage -rfakeroot dpkg-parsechangelog: erro: cannot open debian/changelog to find format: Arquivo ou diretório inexistente dpkg-buildpackage: cannot determine name of current package

Leandro MirandaLeandro Miranda, 17/Mar/2008 15:32

Esta Dica Ajuda Muito na instalacao do skype

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=9699

Marcos JuniorMarcos Junior, 27/May/2008 17:40

Cara deu certinho, nada de errado. Uso o Ubuntu 8.04 e usei o dpkg-deb. Dei uma googlada e descobri como corrigir os erros de linguagem do Skype, fiz um pacote chamado Skype-2.0-64.deb, para Ubuntu 64 bits que funciona perfeitamente. Utilizei suas instruções e se vc não se importar vou divulgar esse pacote nos fóruns de discussões. Um abraço

Thadeu PennaThadeu Penna, 27/May/2008 20:20

Marcos Jr.

pode divulgar. Parabéns pelo seu trabalho :)

[]s

Tiago PertileTiago Pertile, 05/Jun/2008 21:08

Thadeu depois de ler o man fiz, # dpkg -i –force architecture “pacote_deb”, mas não dava certo eh claro depois que vi aqui estava faltando as bibliotecas…

Sérgio CavalariSérgio Cavalari, 06/Jun/2008 09:51

Thadeu, não querendo incomodar, eu uso a versão ultimate edition 1.8 64 bits e não encontrei a seguinte biblioteca para instalar e nem no site que vc indicou:

ia32-libs-gtk. Se vc pudesse me orientar como conseguí-la e se possivel tbm a ia32-libs-sdl e Linux 32, eu ficaria imensamente agradecido pois ficar sem youtube e flash é ruim demais.

Espero não estar abusando e portanto, desde já, agradeço e peço desculpas, se for o caso.

Um forte abraço.

Sérgio Cavalari

Thadeu PennaThadeu Penna, 06/Jun/2008 10:07

Oi Sérgio

para usar o flash, basta instalar o flashplugin-nonfree, não precisa deste malabarismo todo. Para procurar pacotes para o Ubuntu, visite http://packages.ubuntu.com . Procure pelos pacotes do Hardy, que correspondem à sua distribuição.

[]s

Sérgio CavalariSérgio Cavalari, 07/Jun/2008 15:05

Thadeu,

obrigado pela sua pronta resposta. Eu já instalei o flashplugin-nonfree mas não surtiu efeito. Mas já achei os pacotes que desejava no site que vc me indicou.

Bacana sua atitude em dar uma força à nós, iniciantes do linux. Novamente, muito obrigado.

Um grande abraço.

Sérgio Cavalari

Lestat di LioncourtLestat di Lioncourt, 07/Oct/2008 01:27

Thadeu… tranqüilo cara? Essa dica sua é muito interessante e importante. Ótimo trabalho…sei que posso precisar muito disso futuramente. Agora vê se você me ajuda com essa…Usei sua dica do pacote non-free pra poder ver vídeos flash…instalei e beleza… mas aplicativos como testes de velocidade ainda não funfam… E no site do adobe flash player só tem pra x86.Tentei usar este procedimento aqui só que não consigo extrair o binário libflashplayer.so porque ele não é .deb .Será que ainda dá pra fazer rodar em amd64? Vlw pela atenção…

Lestat di LioncourtLestat di Lioncourt, 07/Oct/2008 04:52

Retificação…Thadeu…queria dizer que não precisa mais… Consegui fazer os testes de velocidade e outras aplicações flash funcionarem…VLW!!!

Newton Jose de Moura JuniorNewton Jose de Moura Junior, 07/Oct/2008 16:02

Será que dá certo com o plugin mozilla do jre (java) ?

Thadeu PennaThadeu Penna, 07/Oct/2008 17:05

Oi Newton

não vai funcionar :( Ou você instala todo o firefox e toda a tralha em uma gaiola chroot de 32 bits ou usa o konqueror, que não usa o plugin, mas diretamente o java.

Newton Jose de Moura JuniorNewton Jose de Moura Junior, 08/Oct/2008 11:53

Valeu Thadeu.

Eu já instalei desta forma com o chroot, mas houveram alguns efeitos colaterais. O Iceweasel não consegue abrir PDFs direto da internet, por exemplo, e também voce tem de lidar com a atualização de dois sistemas já que no final das contas voce tem rodando dois sistemas simultaneamente.

Eu estou usando este esquema a uns seis meses e já estou de saco cheio.

Vou configurar o konqueror só para abrir a página do banco e usar o iceweasel para o resto.

Obrigado pela a atenção.

LouisLouis, 13/Nov/2008 12:35

Thadeu estou tentando formar um pacote de i386 o python-psyco para 64 bits (necessário para o Bittorrent). Gostaria de uma ajuda (favor tentar formar o pacote pra ver se deu certinho.). O pacote de nome (python-psyco_1.6-1_i386.deb) não tem diretório /bin e não achei nenhum .bin . Qual seria o binário? Obs:aparentemente a única dependência que falta é esse pacote…talvez não precise colocar as bibliotecas… Tentei usar o “dpkg-buildpackage -rfakeroot” dentro do /tmp e deu → tail: não foi possível abrir `debian/changelog' para leitura: Arquivo ou diretório não encontrado dpkg-buildpackage: failure: tail of debian/changelog gave error exit status 1 Com o “dpkg-deb -b tmp” fora do /tmp e deu→ aviso, 'tmp/DEBIAN/control' contém campo 'Python-Version' definido pelo usuário dpkg-deb: construindo pacote 'python-psyco' em 'tmp.deb'. dpkg-deb: diretório de controle possui permissões ruins 777 (devem ser >=0755 e ⇐0755) Não criou nenhum tmp.deb… Como posso proceder? Muitíssimo Obrigado pela atenção!!!

Thadeu PennaThadeu Penna, 13/Nov/2008 13:06

Louis,

segundo a página do python-psyco

A common question I get is whether Psyco will work on 64-bit x86 architectures. The answer is no, unless you have a Python compiled in 32-bit compatibility mode.

É um trabalho hercúleo compilar todo o python para 32 bits. Eu uso o transmission como cliente torrent e estou bastante satisfeito. O próprio Bittorrent deveria funcionar sem o psyco, só que mais lento. Chequei agora e existe o pacote para o Debian em 64bits sem exigir o psyco.

LouisLouis, 01/Dec/2008 16:23

Tadeu,

muitíssimo obrigado… nãos sabia sobre o novo pacote e vou adquiri-lo. Concordo, acho que não vou querer a loucura de compilar tudo por causa do bittorrent. Bem, estava querendo usar o mesmo cliente no Windows e Linux (normalmente mando um continuar o trabalho do outro e estava dando erros de entrada e saída.) Decidi ficar com o Ktorrent ou o Transmission. Obrigado. Até.

NagyNagy, 05/Mar/2009 16:14

Olá pessoal preciso fazer o contrario, preciso recompilar o pacote de 64 para 32. Seguindo os passos eu empaquei na hora de reconher o binario.

Agradeço a ajuda.

Felipe Felipe , 11/Apr/2009 17:39

Amigo este metodo funciona para qualquer programa; utilizo um programa que faz a protecao de servidores contra maus jogadores… este programa sxe injected so saiu para 32 bits… entao como gosto muito do jogo to tentando qualquer metodo. obrigado!

tjpptjpp, 12/Apr/2009 22:31

Felipe não conheço o programa que você citou, mas deve funcionar, sim.

DouglasDouglas, 07/Dec/2009 17:32

tu consegue converter os valores binarios do sxe para o 64 bits?

carloscarlos, 06/Dec/2009 01:20

Como o felipe disse acima, tem um programa de proteção para poder jogar conter strike, que se chama sxe. e ele não roda em windows 7 64bits.

E os preguiçosos que fazem o sxe tbm não fizeram ainda esta proteção em 64 bits, caso alguem consiga alguma forma de rodar o sxe no win7 64bits, responda aqui.

DouglasDouglas, 07/Dec/2009 03:18

Tá ai uma ótima pergunta, porque o pessoal da localstrike não faz o sxe para 64 bits, o programa é pequeno e tals, amigo tjpp., topa esse desafio ai para nós leigos em programação???? Aqui você poderá encontrar o programa para dar uma olhada: http://www.sxe-anticheat.com/downloads

Abraços, parabéns pelo TUTO, pelo jeito está ajudando a muitos

Rodrigo NonnenmacherRodrigo Nonnenmacher, 11/Dec/2009 02:16

Parceiro!

Dá uma mão pro pessoal aí, boa ação de natal.

Ou montamos uma vaquinha, manda a conta aí pro meu email que deposito R$10, na confiança!

Abraço, ótimo tópico.

Marcelo V. CarvalhoMarcelo V. Carvalho, 13/Dec/2009 11:16

Amigo, muito obrigado pela dica. Continue assim!!! Usei sintaxe diferente também para gerar o pacote assim como o amigo acima, pois dava um erro que o arquivo changelog no diretório DEBIAN não existia. Usei a seguinte sintaxe, após pesquisas de como se criar pacotes no Debian:

dpkg-deb -b <caminho absoluto do diretório base> <local onde o pacote deve ser gerado>

Valeu

Leandro Leandro , 26/Feb/2010 23:07

Como alguns acima, gostaria muito de saber se da pra passar o sxe (um programa anti cheat) do jogo counter strike para 64 bits, visto q os proprios programadores nao se deram ao trabalho de fazer e tem muita gente que compro o jogo e esta utilizando SO de 64 sofrendo com isso.Obrigado

MaxMax, 04/Mar/2010 13:49

compartilho do mesmo problema do pessoal que usa windows 7 64bits, se vc aceitace esse desafio de fazer esse aplicativo sXe funcionar ia ser ótimo para muitas pessoas.

tjpptjpp, 04/Mar/2010 13:53

Sem chance. Nem passo perto de Windows.

OttoOtto, 27/Mar/2010 13:11

Comigo, só consegui com o dpkg-deb -b (…).

Legal a dica. Pro Ubuntu é até mais fácil achar pacotes 64, mas no Debian tem sido mais difícil. Funcionou beleza aqui com o Skype 2.1

OttoOtto, 04/Apr/2010 10:42

Me surgiu uma dúvida sobre a seção depends do arquivo control.

No meu caso eu criei o pacote para o zsnes e faltava a lib libao. O depends em branco funciona pra mim, mas como eu deveria deixar para que funcione com outras pessoas?

Apenas ia32-libs já bastaria?

tjpptjpp, 04/Apr/2010 15:37

Pode ser que não. Verifique com o ldd ou ldd32 a depedência de todas as bibliotecas (veja no post acima como usar o ldd).

OttoOtto, 05/Apr/2010 07:52

Mas como eu vou saber de quais pacotes são aquelas libs?

walter zwalter z, 22/Apr/2010 18:23

cara nao entendi nada! iuAEHOuiAEae

tem como tranformar o sxe para 64 bit?plz

to precisando muito… se puder me ajudar

Caio CesarCaio Cesar, 12/May/2010 00:03

Também tou querendo saber se é possível transformar o sXe Inject 8.9 para rodar em 64 bits. É um processo complicado? Os fabricantes parecem não se importar e não tem pressa em coloca-lo para rodar em 64 bits :T

Sílvio Noel de Oliveira JúniorSílvio Noel de Oliveira Júnior, 16/May/2010 11:19

Tenho o windows 7, com 64 bits e não consigo baixar, de forma, o adobe flash player. Podes me ajudar?

BetoBeto, 03/Jun/2010 23:18

Tadeu vc conseguiria transformar o SXE injected o Counter strike em um aplicativo 64 bits? Se sim eu ficaria muito grato meu mail é sufreshbr@hotmail.com

Djamilo FerreiraDjamilo Ferreira, 19/Sep/2010 19:33

Dr.Tadeu marque me todos os passos para converter um programa de 32 para 64 bits por favor dessa forma nao entendo

R. LampierR. Lampier, 22/Mar/2011 23:51

Aeee manoo! Valeuu funfou legal depois que as bibliotecas foram instaladas! ;D

Enter your comment
EGOPF
 
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