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/DEBIANA 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 shareInstale 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
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), strippedVejamos 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 tmp2Vamos colocar a biblioteca no pacote do Skype.
$ mkdir tmp/usr/lib32 $ cp tmp2/usr/lib/libsigc-2.0.so.* tmp/usr/lib32As 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
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,
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
Oi José Geraldo,
você tem que estar dentro do diretório tmp.
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
Esta Dica Ajuda Muito na instalacao do skype
http://www.vivaolinux.com.br/dicas/verDica.php?codigo=9699
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
Marcos Jr.
pode divulgar. Parabéns pelo seu trabalho :)
[]s
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…
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
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
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
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…
Retificação…Thadeu…queria dizer que não precisa mais… Consegui fazer os testes de velocidade e outras aplicações flash funcionarem…VLW!!!
Será que dá certo com o plugin mozilla do jre (java) ?
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.
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.
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!!!
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.
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é.
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.
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!
Felipe não conheço o programa que você citou, mas deve funcionar, sim.
tu consegue converter os valores binarios do sxe para o 64 bits?
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.
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
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.
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