Como você executa um programa de 32 bits em uma versão de 64 bits do Ubuntu?

41

Eu tenho uma versão de 64 bits do Ubuntu 13.10. Quero executar uma versão de 32 bits de um programa. No entanto, vejo que ia32-libsnão está incluído na 13.10. Existe um pacote de substituição para isto ou para quê?

Cato
fonte
11
possível duplicata de 64bit Ubuntu 14.04, correndo binários de 32 bits
bain
@bain Esta não é uma cópia. Esta pergunta é sobre situações gerais, que é uma questão específica, sem mencionar que é a pergunta mais antiga e melhor.
Seth
E a resposta de Braiam é incrível ! portanto, se for para ser enganado em qualquer lugar, deve ser mesclado.
Mateo

Respostas:

30

Não é mais necessário o ia32-libspacote (desde 12.04, para ser exato); se você usar o sistema APT, não precisará se preocupar em instalar pacotes de 32 bits em um sistema de 64 bits. Isso aconteceu desde a introdução do multiarch , uma das políticas de mudança de jogo do Debian na maneira como o Debian gerencia suas dependências. Este método permite ter diferentes destinos binários no mesmo sistema sem cuidar da arquitetura do kernel. Isso não significa que você pode executar qualquer pacote de 32 bits sem preparação, mas se você instalar as bibliotecas / binários, qualquer aplicativo em teoria poderá executar. Isso é verdade de 64 bits para 32 bits e vice-versa.

insira a descrição da imagem aqui

Para usar esse método, é recomendável usar os gerenciadores do APT, para evitar dependências não atendidas. O changelog inclui um pequeno histórico sobre como as alterações foram feitas:

  1. Precisamente, o pacote foi esvaziado e feito um pacote de transição . Foram adicionadas várias dependências em relação aos pacotes que não foram movidos para o multiarch.
  2. Lenta mas seguramente, todos os pacotes foram reconstruídos com suporte a multiarch e as dependências reversas foram descartadas ou alteradas para ia32-lib-multiarch. Quando esses pacotes param de precisar dos pacotes ia34-libs, as dependências foram eliminadas ao mesmo tempo. As dependências foram alteradas a partir ia32-libsde package:archser packageo nome da biblioteca necessária e archa arquitectura (abaixo há um exemplo com skype).
  3. Com o último lançamento, o ia32-libs-multiarchpacote foi removido dos lançamentos pré-raring e ia32-libsnão foi publicado. Todos os pacotes do Ubuntu são compatíveis com várias máquinas e você pode instalar diferentes pacotes de arquitetura em seu sistema.

Agora, ao instalar um pacote que precise de binários de 32 bits, se você não prestar atenção, nunca saberá que está usando um pacote de 32 bits, pois o gerenciador de pacotes extrairá automaticamente as dependências necessárias:

sudo apt-get --no-install-recommends -q -y install skype
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libaudio2:i386 libjbig0:i386 liblcms1:i386 libmng1:i386 libqt4-dbus:i386 libqt4-declarative:i386
  libqt4-network:i386 libqt4-opengl:i386 libqt4-script:i386 libqt4-sql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtgui4:i386 libqtwebkit4:i386 libssl1.0.0:i386 libtiff5:i386
  libxss1:i386 libxv1:i386 skype-bin:i386
Suggested packages:
  nas:i386 liblcms-utils:i386 libqt4-declarative-folderlistmodel:i386 libqt4-declarative-gestures:i386
  libqt4-declarative-particles:i386 libqt4-declarative-shaders:i386 qt4-qmlviewer:i386 libqt4-dev:i386
  libthai0:i386 libicu48:i386 qt4-qtconfig:i386
Recommended packages:
  libqt4-sql-mysql:i386 libqt4-sql-odbc:i386 libqt4-sql-psql:i386 libqt4-sql-sqlite:i386 libcups2:i386
  sni-qt:i386 libasound2-plugins:i386
The following NEW packages will be installed:
  libaudio2:i386 libjbig0:i386 liblcms1:i386 libmng1:i386 libqt4-dbus:i386 libqt4-declarative:i386
  libqt4-network:i386 libqt4-opengl:i386 libqt4-script:i386 libqt4-sql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtgui4:i386 libqtwebkit4:i386 libssl1.0.0:i386 libtiff5:i386
  libxss1:i386 libxv1:i386 skype skype-bin:i386
0 upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 33.9 MB/38.2 MB of archives.
After this operation, 118 MB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously unselected package libssl1.0.0:i386.
(Reading database ... 208485 files and directories currently installed.)
Unpacking libssl1.0.0:i386 (from .../libssl1.0.0_1.0.1c-4ubuntu8.1_i386.deb) ...
Selecting previously unselected package libaudio2:i386.
Unpacking libaudio2:i386 (from .../libaudio2_1.9.3-5ubuntu0.13.04.1_i386.deb) ...
Selecting previously unselected package liblcms1:i386.
Unpacking liblcms1:i386 (from .../liblcms1_1.19.dfsg-1.2ubuntu2_i386.deb) ...
Selecting previously unselected package libmng1:i386.
Unpacking libmng1:i386 (from .../libmng1_1.0.10-3build1_i386.deb) ...
Selecting previously unselected package libqtcore4:i386.
Unpacking libqtcore4:i386 (from .../libqtcore4_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-xml:i386.
Unpacking libqt4-xml:i386 (from .../libqt4-xml_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-dbus:i386.
Unpacking libqt4-dbus:i386 (from .../libqt4-dbus_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-network:i386.
Unpacking libqt4-network:i386 (from .../libqt4-network_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-script:i386.
Unpacking libqt4-script:i386 (from .../libqt4-script_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-sql:i386.
Unpacking libqt4-sql:i386 (from .../libqt4-sql_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-xmlpatterns:i386.
Unpacking libqt4-xmlpatterns:i386 (from .../libqt4-xmlpatterns_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libjbig0:i386.
Unpacking libjbig0:i386 (from .../libjbig0_2.0-2ubuntu1_i386.deb) ...
Selecting previously unselected package libtiff5:i386.
Unpacking libtiff5:i386 (from .../libtiff5_4.0.2-4ubuntu2.1_i386.deb) ...
Selecting previously unselected package libqtgui4:i386.
Unpacking libqtgui4:i386 (from .../libqtgui4_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-declarative:i386.
Unpacking libqt4-declarative:i386 (from .../libqt4-declarative_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-opengl:i386.
Unpacking libqt4-opengl:i386 (from .../libqt4-opengl_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqtwebkit4:i386.
Unpacking libqtwebkit4:i386 (from .../libqtwebkit4_2.3.0-0ubuntu2_i386.deb) ...
Selecting previously unselected package libxss1:i386.
Unpacking libxss1:i386 (from .../libxss1_1%3a1.2.2-1_i386.deb) ...
Selecting previously unselected package libxv1:i386.
Unpacking libxv1:i386 (from .../libxv1_2%3a1.0.7-1ubuntu0.13.04.1_i386.deb) ...
Selecting previously unselected package skype-bin.
Unpacking skype-bin (from .../skype-bin_4.2.0.11-0ubuntu0.12.04.2_i386.deb) ...
Selecting previously unselected package skype.
Unpacking skype (from .../skype_4.2.0.11-0ubuntu0.12.04.2_amd64.deb) ...
Processing triggers for desktop-file-utils ...
Processing triggers for gnome-menus ...
Processing triggers for hicolor-icon-theme ...
Setting up libssl1.0.0:i386 (1.0.1c-4ubuntu8.1) ...
Setting up libaudio2:i386 (1.9.3-5ubuntu0.13.04.1) ...
Setting up liblcms1:i386 (1.19.dfsg-1.2ubuntu2) ...
Setting up libmng1:i386 (1.0.10-3build1) ...
Setting up libqtcore4:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-xml:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-dbus:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-network:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-script:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-sql:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-xmlpatterns:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libjbig0:i386 (2.0-2ubuntu1) ...
Setting up libtiff5:i386 (4.0.2-4ubuntu2.1) ...
Setting up libxss1:i386 (1:1.2.2-1) ...
Setting up libxv1:i386 (2:1.0.7-1ubuntu0.13.04.1) ...
Setting up libqtgui4:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-declarative:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-opengl:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqtwebkit4:i386 (2.3.0-0ubuntu2) ...
Setting up skype-bin (4.2.0.11-0ubuntu0.12.04.2) ...
Setting up skype (4.2.0.11-0ubuntu0.12.04.2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

Observe que o skype é um pacote i386. Se eu usar o apt-get para instalá-lo, evitarei dores de cabeça mais tarde.

Mas algumas pessoas preferem usar .debpacotes e depois se preparam, porque pode ficar um pouco confuso. Você deve instalar manualmente todas as dependências antes da mão, para que seu sistema não termine com dependências não atendidas. Um comando que ajudará é dpkg-deb -Iporque mostra as informações do pacote:

dpkg-deb -I zynaddsubfx-dssi_2.4.3-3_amd64.deb 
 new debian package, version 2.0.
 size 266936 bytes: control archive=845 bytes.
     917 bytes,    19 lines      control              
     232 bytes,     3 lines      md5sums              
 Package: zynaddsubfx-dssi
 Source: zynaddsubfx
 Version: 2.4.3-3
 Architecture: amd64
 Maintainer: Ubuntu Developers <[email protected]>
 Original-Maintainer: Debian Multimedia Maintainers <[email protected]>
 Installed-Size: 633
 Depends: libasound2 (>= 1.0.16), libc6 (>= 2.15), libgcc1 (>= 1:4.1.1), libjack-jackd2-0 (>= 1.9.5~dfsg-14) | libjack-0.116, libmxml1, libstdc++6 (>= 4.6), zlib1g (>= 1:1.1.4)
[...]

Como você pode ver, ele lista as dependências, então você só precisa sudo apt-get installdelas e depois sudo dpkg -i. Novamente, prefira instalar o software a partir dos repositórios em vez de baixá-lo e instalá-lo manualmente dpkg -i.

Agora, se o seu for desenvolvimento, você pode instalar qualquer biblioteca usando a apt-getsintaxe. Basta adicionar :i386à biblioteca que você deseja baixar e pronto. Não é necessário fazer isso manualmente se você instalar o software a partir dos repositórios.

Conclusão: Não, você pode executar pacotes de 32 bits sem instalar ia32-libs, se você instalar os pacotes a partir dos repositórios, ainda melhor. Se você estiver em desenvolvimento, tente sempre usar o sistema APT.

Braiam
fonte
O que posso fazer com um instalador .bin que verifique se o pacote ia32-libs está instalado? Até onde eu sei, mesmo que eu instale manualmente as dependências corretas, o .bin ainda falhará na instalação porque procura o pacote ia32-libs. Existe uma maneira de "enganar" o instalador para pensar que o ia32-libs está instalado?
Galgalesh
11
@Galgalesh pede ao mantenedor para consertar suas coisas, elas estão no passado.
Braiam
O único problema com a remoção de ia32-libs é quando você tem programas como o PlayOnLinux, que tentam usar bibliotecas de 32 bits para executar programas do Windows de 32 bits. Então isso é uma incompatibilidade invertida.
AlexLordThorsen
@Rawrgulmuffins eles tiveram que mudar ... O OpenSUSE e Red Hat já estavam em conformidade com os padrões LSB e FHS , e o pacote ia32-libs não lhes permitia gerenciar facilmente as mudanças a serem feitas, que era um diretório único para cada arquitetura. Os desenvolvedores devem seguir a introdução do multiarch e reembalar seus pacotes de acordo. Se não o fizeram nos últimos três anos, estão sendo preguiçosos.
Braiam
@Braiam Então, a culpa é dos padrões LSB e FHS por quebrar a compatibilidade com versões anteriores. Parece tolice afirmar que isso requer apenas que os desenvolvedores reembalem, especialmente porque isso quebra todos os pacotes que dependiam da lib32.
AlexLordThorsen
12

Lembre-se de adicionar a arquitetura i386 ou você não poderá instalar pacotes de 32 bits:

sudo dpkg --add-architecture i386
sudo apt-get update

Verifique o guia de solução de problemas do pacote: https://help.ubuntu.com/community/PackageManagerTrou TroubleshootingProcedure

13m5
fonte
Os dois comandos acima não instalaram nenhum pacote de 32 bits para mim. o que estou perdendo?
e40
2
OK, para mim, eu tive que executar dois comandos adicionais: apt-get install libc6:i386e apt-get install libgtk2.0-0:i386(o último porque é um aplicativo GTK).
e40