Come si esegue un programma a 32 bit su una versione a 64 bit di Ubuntu?


42

Ho una versione a 64 bit di Ubuntu 13.10. Voglio eseguire una versione a 32 bit di un programma. Tuttavia vedo che ia32-libsnon è incluso in 13.10. Esiste un pacchetto sostitutivo per questo o cosa?



@bain Questo non è un duplicato. Questa domanda riguarda le situazioni generali, questo è un problema specifico, per non parlare di questa è la domanda più vecchia e migliore.
Seth

E la risposta di Braiam è fantastica ! quindi, se dovesse essere ingannato ovunque, dovrebbe essere unito.
Mateo,

Risposte:


30

Non è più necessario il ia32-libspacchetto (dal 12.04 per l'esattezza), se si utilizza il sistema APT, non ci si deve preoccupare dell'installazione di pacchetti a 32 bit in un sistema a 64 bit. Ciò è accaduto dall'introduzione di multiarch , una delle politiche più rivoluzionarie di Debian nel modo in cui Debian gestisce le dipendenze. Questo metodo consente di avere target binari diversi nello stesso sistema senza curare l'architettura del kernel. Ciò non significa che è possibile eseguire qualsiasi pacchetto a 32 bit senza preparazione, ma se si installano le librerie / binari in teoria qualsiasi applicazione dovrebbe essere in grado di funzionare. Questo è vero da 64 a 32 bit e viceversa.

inserisci qui la descrizione dell'immagine

Per l'utilizzo di tale metodo si consiglia di utilizzare i gestori APT, al fine di prevenire dipendenze non soddisfatte. Il log delle modifiche include una piccola cronologia di come sono state apportate le modifiche:

  1. In particolare il pacchetto è stato svuotato e realizzato un pacchetto di transizione . Sono state aggiunte diverse dipendenze rispetto ai pacchetti che non sono stati spostati in multiarch.
  2. Lentamente ma sicuramente, tutti i pacchetti sono stati ricostruiti con il supporto multiarch e le dipendenze inverse sono state eliminate o modificate in ia32-lib-multiarch. Quando questi pacchetti non hanno più bisogno dei pacchetti ia34-libs, le dipendenze sono state eliminate allo stesso tempo. Le dipendenze sono stati modificati da ia32-libsa package:archessere packageil nome della libreria necessaria e archl'architettura (sotto c'è un esempio con skype).
  3. Con l' ultima versione il ia32-libs-multiarchpacchetto è stato rimosso dalle versioni precedenti alla raring e ia32-libsnon è stato pubblicato in modo impertinente. Tutti i pacchetti Ubuntu sono multiarch e puoi installare diversi pacchetti di architettura nel tuo sistema.

Ora, quando si installa un pacchetto che richiede binari a 32 bit, se non si presta attenzione non si saprà mai che si sta utilizzando un pacchetto a 32 bit, poiché il gestore pacchetti estraerà automaticamente le dipendenze necessarie:

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

Si noti che skype è un pacchetto i386. Se uso apt-get per installarlo, mi risparmierò mal di testa in seguito.

Ma alcune persone preferiscono usare i .debpacchetti, quindi prepararsi perché può diventare un po 'confuso. Dovresti installare manualmente tutte le dipendenze prima che il tuo sistema non finisca con dipendenze non soddisfatte. Un comando che ti aiuterà è dpkg-deb -Ipoiché mostra le informazioni del pacchetto:

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 <ubuntu-devel-discuss@lists.ubuntu.com>
 Original-Maintainer: Debian Multimedia Maintainers <pkg-multimedia-maintainers@lists.alioth.debian.org>
 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)
[...]

Come puoi vedere, elenca le dipendenze, quindi devi solo a sudo apt-get installloro e poi sudo dpkg -i. Ancora una volta, preferisci installare software dai repository invece di scaricarli e installarli manualmente con dpkg -i.

Ora, se il tuo è sviluppo, puoi installare qualsiasi libreria usando la apt-getsintassi. Basta aggiungere :i386alla libreria che si desidera scaricare e il gioco è fatto. Non è necessario farlo manualmente se si installa il software dai repository.

In conclusione: No, è possibile eseguire pacchetti a 32 bit senza installare ia32-libs, se si installano i pacchetti dai repository, anche meglio. Se sei in fase di sviluppo, prova a utilizzare sempre il sistema APT.


Cosa posso fare con un programma di installazione .bin che controlla se è installato il pacchetto ia32-libs? Per quanto ne so, anche se installo manualmente le dipendenze corrette, il .bin non riuscirà comunque a installarsi perché cerca il pacchetto ia32-libs. C'è un modo di "ingannare" l'installatore per pensare che ia32-libs sia installato?
Galgalesh,

1
@Galgalesh chiede al manutentore di sistemare le loro cose, sono in passato.
Braiam,

L'unico problema con la rimozione di ia32-libs è quando si hanno programmi come PlayOnLinux che tentano di usare librerie a 32 bit per eseguire programmi Windows a 32 bit. Quindi questa è un'incompatibilità all'indietro.
AlexLordThorsen

@Rawrgulmuffins hanno dovuto cambiare ... OpenSUSE e Red Hat erano già conformi agli standard LSB e FHS , e il pacchetto ia32-libs non permetteva loro di gestire facilmente le modifiche da fare, che era una singola directory per ogni architettura. Gli sviluppatori dovrebbero invece semplicemente seguire l'introduzione al multiarch e riconfezionare i loro pacchetti di conseguenza. Se non lo hanno fatto negli ultimi 3 anni, sono pigri.
Braiam

@Braiam Quindi l'errore è dovuto agli standard LSB e FHS per rompere la compatibilità all'indietro. Sembra folle affermare che questo richiede solo agli sviluppatori di riconfezionare, soprattutto perché questo rompe tutti i pacchetti che si basavano su lib32.
AlexLordThorsen

12

Ricorda di aggiungere l'architettura i386 o non sarai in grado di installare pacchetti a 32 bit:

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

Consulta la guida alla risoluzione dei problemi del pacchetto: https://help.ubuntu.com/community/PackageManagerTro troubleshootingProcedure


I due comandi precedenti non hanno installato alcun pacchetto a 32 bit per me. Cosa mi sto perdendo?
e40,

2
OK, per me, ho dovuto eseguire due comandi aggiuntivi: apt-get install libc6:i386e apt-get install libgtk2.0-0:i386(quest'ultimo perché è un'app GTK).
e40,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.