Como instalar o arquivo .deb de 64 bits em uma máquina de 32 bits?


17

Eu tenho o Ubuntu 14.04. Eu baixei recentemente o Viber . O arquivo .deb do Viber possui arquitetura de 64 bits. Quero instalá-lo no meu computador, mas meu computador suporta apenas 32 bits.

A saída da execução lscpué a seguinte:

Architecture: i686
CPU op-mode(s): 32-bit, 64-bit 
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1 
Core(s) per socket: 2 
Socket(s): 1 
Vendor ID: GenuineIntel 
CPU family: 6 
Model: 23 
Stepping: 10 
CPU MHz: 2800.000 
BogoMIPS: 5586.12 
Virtualization: VT-x 
L1d cache: 32K 
L1i cache: 32K 
L2 cache: 2048K

3
Como você pode ter certeza de que não suporta 64 bits? Se você precisar executar programas de 64 bits, precisará instalar um sistema operacional de 64 bits.
Muru

Ouvi dizer que alguns softwares fazer esse trabalho ... Isso é o que eu estou pedindo
A Umar Mukthar

Você terá que usar VMs: askubuntu.com/questions/180761/...
Muru

Qual é o resultado da execução lscpuno Terminal?
αғsнιη

7
Sim, seu sistema tem capacidade para 64 bits e você deve reinstalá-lo o mais rapidamente possível, porque você enfrentará esse problema novamente e será ainda mais difícil lidar com isso mais tarde.
Michael Hampton

Respostas:


22

Desde que o seu hardware suporte 64 bits, o que faz:

Modo (s) operacional (s) da CPU: 32 bits, 64 bits

e o pacote foi preparado para usar multiarch, o que também é verdade:

 dpkg -I viber.deb
 new debian package, version 2.0. <--- here
 size 57046082 bytes: control archive=8024 bytes.
       0 bytes,     0 lines      0                    
    1210 bytes,    29 lines      control              
    9475 bytes,    33 lines   *  copyright            
    7404 bytes,    85 lines      md5sums              
      39 bytes,     2 lines   *  postinst             #!/bin/bash
     800 bytes,    35 lines   *  preinst              #!/bin/bash
     500 bytes,    24 lines   *  prerm                #!/bin/bash
 Package: viber
 Version: 4.2.2.6
 Section: non-free/net
 Priority: extra
 Architecture: amd64 <---- and here

você pode simplesmente instalar as bibliotecas e binários de 64 bits necessários, que dependem do pacote (que é nenhum, mais sobre isso posteriormente) que você precisa para executar o aplicativo, com impacto virtual no desempenho zero. No meu caso, acabei de instalar o pacote:

$ sudo dpkg --add-architecture amd64
## adding 64-bits architecture package, in my system I didn't need to
## but it's likely you have
$ sudo apt-get update # this downloads the package list for amd64 arch
$ sudo dpkg -i viber.deb
Selecting previously unselected package viber.
(Reading database ... 268703 files and directories currently installed.)
Preparing to unpack viber.deb ...
Unpacking viber (4.2.2.6) ...
Setting up viber (4.2.2.6) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for gnome-menus (3.13.3-1) ...
Processing triggers for mime-support (3.56) ...
Processing triggers for desktop-file-utils (0.22-1) ...

E então começou a ter problemas ...

Os gerenciadores de pacotes decidiram que não deveriam listar nenhuma dependência para seu pacote,

 Installed-Size: 141336
 Conflicts: Viber (<< 4.2.2.6)
 Replaces: Viber (<< 4.2.2.6)
 Maintainer: Viber Media Inc <support@viber.com>

do qual eles realmente precisam:

ldd /opt/viber/Viber | grep 'not found'
    libXcomposite.so.1 => not found
    libxslt.so.1 => not found
    libxml2.so.2 => not found
    libgstreamer-0.10.so.0 => not found
    libgstapp-0.10.so.0 => not found
    libgstbase-0.10.so.0 => not found
    libgstinterfaces-0.10.so.0 => not found
    libgstpbutils-0.10.so.0 => not found
    libgstvideo-0.10.so.0 => not found
    libsqlite3.so.0 => not found

então você deve encontrar e instalar as bibliotecas ausentes manualmente! Isso é fácil se você conhece as ferramentas corretas. apt-fileé útil aqui, também a funcionalidade http://packages.ubuntu.com "Pesquisar o conteúdo dos pacotes" também funciona bem. Mas fui em frente e procurei por eles:

Esses arquivos já estão instalados no meu sistema, você só precisa copiar o nome do pacote, aquele antes dos dois pontos que termina com amd64. Você deve copiar os nomes dos pacotes como eles são:

dpkg -S $(ldd /opt/viber/Viber | awk '{print $3}' | grep -vP 'not|viber')
libc6:amd64: /lib/x86_64-linux-gnu/libpthread.so.0
libc6:amd64: /lib/x86_64-linux-gnu/libdl.so.2
libc6:amd64: /lib/x86_64-linux-gnu/librt.so.1
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
libc6:amd64: /lib/x86_64-linux-gnu/libm.so.6
libgcc1:amd64: /lib/x86_64-linux-gnu/libgcc_s.so.1
libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6
libx11-6:amd64: /usr/lib/x86_64-linux-gnu/libX11.so.6
libxext6:amd64: /usr/lib/x86_64-linux-gnu/libXext.so.6
zlib1g:amd64: /lib/x86_64-linux-gnu/libz.so.1
libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/libGL.so.1
libxrender1:amd64: /usr/lib/x86_64-linux-gnu/libXrender.so.1
libglib2.0-0:amd64: /lib/x86_64-linux-gnu/libglib-2.0.so.0
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
libxcb1:amd64: /usr/lib/x86_64-linux-gnu/libxcb.so.1
libglapi-mesa:amd64: /usr/lib/x86_64-linux-gnu/libglapi.so.0
libxdamage1:amd64: /usr/lib/x86_64-linux-gnu/libXdamage.so.1
libxfixes3:amd64: /usr/lib/x86_64-linux-gnu/libXfixes.so.3
libx11-xcb1:amd64: /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1
libxcb-glx0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0
libxcb-dri2-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0
libxcb-dri3-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0
libxcb-present0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-present.so.0
libxcb-sync1:amd64: /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1
libxshmfence1:amd64: /usr/lib/x86_64-linux-gnu/libxshmfence.so.1
libxxf86vm1:amd64: /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
libdrm2:amd64: /usr/lib/x86_64-linux-gnu/libdrm.so.2
libpcre3:amd64: /lib/x86_64-linux-gnu/libpcre.so.3
libffi6:amd64: /usr/lib/x86_64-linux-gnu/libffi.so.6
libxau6:amd64: /usr/lib/x86_64-linux-gnu/libXau.so.6
libxdmcp6:amd64: /usr/lib/x86_64-linux-gnu/libXdmcp.so.6

Estes eu não os tinha instalado, que obtive usando ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/':

$ ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/'
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstapp-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstinterfaces-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstpbutils-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstvideo-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstbase-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstreamer-0.10.so.0
libsqlite3-0:amd64: /usr/lib/x86_64-linux-gnu/libsqlite3.so.0
libxcomposite1:amd64: /usr/lib/x86_64-linux-gnu/libXcomposite.so.1
libxml2:amd64: /usr/lib/x86_64-linux-gnu/libxml2.so.2
libxslt1.1:amd64: /usr/lib/x86_64-linux-gnu/libxslt.so.1

apt-filefoi uma provocação para me fornecer os pacotes de 64 bits, então precisei sudo apt-file -a amd64 updateforçá-lo a ter a lista de arquivos de 64 bits.

Agora, deixe-me explicar o que é tudo acima:

  • ldd /path/to/binary: lê um binário e informa quais são as bibliotecas, símbolos etc. necessários
  • dpkg -S: pesquise quais pacotes fornecem um arquivo instalado específico.
  • awk, sede grep: estão modificando o fluxo de texto para processar apenas as partes interessantes ou mostrar a saída desejada.
  • |, $(...): o primeiro me permite canalizar a saída de um comando para outro, e o último me permite executar / avaliar um comando antes que os principais sejam executados.

O TL; dr apenas instala estes pacotes:

sudo dpkg --add-architecture amd64 ## adding 64-bits architecture package
sudo apt-get update
sudo apt-get install libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer0.10-0:amd64 libgstreamer0.10-0:amd64 libsqlite3-0:amd64 libxcomposite1:amd64 libxml2:amd64 libxslt1.1:amd64 libc6:amd64 libdrm2:amd64 libffi6:amd64 libgcc1:amd64 libgl1-mesa-glx:amd64 libglapi-mesa:amd64 libglib2.0-0:amd64 libpcre3:amd64 libstdc++6:amd64 libx11-6:amd64 libx11-xcb1:amd64 libxau6:amd64 libxcb1:amd64 libxcb-dri2-0:amd64 libxcb-dri3-0:amd64 libxcb-glx0:amd64 libxcb-present0:amd64 libxcb-sync1:amd64 libxdamage1:amd64 libxdmcp6:amd64 libxext6:amd64 libxfixes3:amd64 libxrender1:amd64 libxshmfence1:amd64 libxxf86vm1:amd64 zlib1g:amd64

Você também precisa instalar o kernel de 64 bits.


root @ umar: / home / umar / Desktop # sudo dpkg -i viber.deb dpkg: arquivo de processamento de erros viber.deb (--install): a arquitetura do pacote (amd64) não corresponde ao sistema (i386) Foram encontrados erros no processamento: viber.deb
a Umar Mukthar

@AUmarMukthar sudo dpkg --add-architecture amd64.
Braiam

Eu tentei seu comando. Nenhum progresso adicional
A Umar Mukthar

2
"É provável que você precise instalar o kernel de 64 bits também." - isso não é provável, é 100% certo. Um kernel de 32 bits simplesmente não tem o necessário para configurar um ambiente de processo de 64.
Mat


11

Não é possível instalar um software que suporte apenas arco de 64 bits em um sistema operacional de 32 bits, enquanto o inverso é verdadeiro. Para instalar um software de 64 bits, você precisará de um hardware compatível com o sistema operacional de 64 bits e um sistema operacional de 64 bits na parte superior.

Também gostaria de mencionar que não é possível instalar o SO de 64 bits como uma máquina virtual em um hardware que suporta apenas arquitetura de 32 bits. Seu hardware deve suportar a arquitetura de 64 bits juntamente com o suporte à virtualização para criar máquinas virtuais de 64 bits.


1
Você pode instalar uma VM de 64 bits em uma máquina de 32 bits, assim como em qualquer arquitetura, veja o qemu, por exemplo. Observe, porém, que será extraordinariamente lento.
Vality 19/08/14

@Vality Sua resposta parece ser boa. Você poderia melhorar ainda mais a resposta.
A Umar Mukthar

@AUmarMukthar Eu sou tão útil assim? Se ainda estiver faltando, por favor, comente e vou ver se posso melhorá-lo.
Vality 19/08/14

10

Eu tenho que dizer que você não é verdadeiro sobre

meu computador suporta apenas 32 bits

De acordo com o resultado da execução da lscpusua versão do Ubuntu instalada, é de 32 bits, enquanto o seu sistema pode suportar aplicativos de 64 bits, se você deseja instalar o aplicativo de 64 bits, é necessário instalar o sistema operacional Ubuntu de 64 bits. veja estas linhas abaixo:

Architecture: i686              # <-- your kernel is 32 bit (32 bit Ubuntu)
CPU op-mode(s): 32-bit, 64-bit  # <-- your cpu can handle 32 or 64 bit instructions
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1 
Core(s) per socket: 2 
Socket(s): 1 
Vendor ID: GenuineIntel 
CPU family: 6 
Model: 23 
Stepping: 10 
CPU MHz: 2800.000 
BogoMIPS: 5586.12 
Virtualization: VT-x 
L1d cache: 32K 
L1i cache: 32K 
L2 cache: 2048K

Baixe e instale o Ubuntu 14.04.1 de 64 bits e instale o Viber também.


Isso mesmo, se eu fizer isso, vou perder outros aplicativos instalados até agora .. Então, só estou procurando uma solução. De qualquer forma obrigado pela sua informação. +1 por seus esforços
A Umar Mukthar

10

É possível instalar o software de 64 bits em uma máquina construída com hardware de 32 bits da mesma maneira que você pode executar, digamos, o software ARM em um destino x86, usando tradução dinâmica.

Basicamente, um software como o qemu fica entre os programas e o seu computador, executando uma tradução do conjunto de instruções AMD64 para o x86 (provavelmente i686) (com um desempenho muito grave atingido, o que, no seu caso, pode ser totalmente evitável).

Como você está usando o ubuntu, você tem uma excelente documentação sobre como configurar isso . Basicamente, você tem uma das duas opções: pode executar o programa em um ambiente completo de VM de 64 bits com seu próprio kernel ou, o que eu acho que você quer aqui é a visualização do espaço do usuário, isso usa thunking (eu não acho que seja comum chamado thunking hoje em dia, mas esqueça a nova palavra) para converter as chamadas do sistema de 64 para 32 bits, para que você possa usar seu próprio kernel.

Agora, o guia explica isso melhor do que eu, mas, em resumo, você precisa instalar o qemu e os pacotes qemu-kvm-extras-static e usar o qemu-debootstrap para configurar um ambiente e bibliotecas para o seu programa de 64 bits. Então você precisa usar o binfmt_misc e o interpretador estático do qemu (qemu-arch-static, no seu caso provavelmente x86_64, x64 ou AMF64) para executar seu programa dentro do ambiente.

Observe que, no entanto, sua CPU parece suportar instruções de 64 bits; portanto, é possível instalar o ubuntu de 64 bits; você pode, sem emulação, executar o código x86 em uma máquina AMD64 e, se conseguir fazer isso, pode ser mais fácil, se, por outro lado, você quiser descobrir o qemu e o mundo da emulação de arquitetura (pode vir em mãos mais tarde, se você tiver um programa construído para, por exemplo ... ARM, como algo criado para um telefone), recomendo que continue em frente, mas tenha cuidado , às vezes as coisas demoram um pouco para mexer ou depurar antes de funcionarem bem.


5
Esse tipo de virtualização de "tradução dinâmica" será dolorosamente lento . E como ele possui um sistema de 64 bits, seria melhor instalar apenas um sistema operacional de 64 bits.
Michael Hampton

@ MichaelHampton Eu sei que será lento e de fato notei que, também observei que ele pode estar melhor com um sistema operacional de 64 bits, no entanto, eu também queria dar uma resposta que respondesse à pergunta.
Vality 19/08/14

Não achei que o "desempenho atingido" explique adequadamente o quão lento será. :)
Michael Hampton

@MichaelHampton True. Feliz agora? ;)
Validade 19/08/2014

Sim, agora eu gosto. :)
Michael Hampton


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.