Jak uruchomić 32-bitowy program w 64-bitowej wersji Ubuntu?

41

Mam 64-bitową wersję Ubuntu 13.10. Chcę uruchomić 32-bitową wersję programu. Widzę jednak, że ia32-libsnie jest uwzględniony w 13.10. Czy istnieje pakiet zastępczy dla tego lub co?

Cato
źródło
@bain To nie jest duplikat. To pytanie dotyczy sytuacji ogólnych, to jest konkretny problem, nie wspominając już o tym, że jest to starsze, lepsze pytanie.
Seth
Odpowiedź Braiam jest niesamowita ! więc jeśli ma być gdziekolwiek skopiowany, powinien zostać scalony.
Mateo

Odpowiedzi:

30

ia32-libsPakiet nie jest już potrzebny (a dokładniej od 12.04), jeśli używasz systemu APT, nie musisz się martwić instalowaniem pakietów 32-bitowych w systemie 64-bitowym. Stało się tak od czasu wprowadzenia multiarch , jednej z najbardziej zmieniających gry zasad Debiana w sposobie zarządzania zależnościami przez Debiana. Ta metoda pozwala mieć różne cele binarne w tym samym systemie bez dbania o architekturę jądra. Nie oznacza to, że możesz uruchomić dowolny pakiet 32-bitowy bez przygotowania, ale jeśli zainstalujesz biblioteki / pliki binarne, wszystkie aplikacje teoretycznie powinny być w stanie działać. Dotyczy to od wersji 64-bitowej do 32-bitowej i odwrotnie.

wprowadź opis zdjęcia tutaj

Do korzystania z takiej metody zaleca się korzystanie z menedżerów APT, aby zapobiec niespełnieniu zależności. Dziennik zmian zawiera krótką historię dotyczącą tego, jak wprowadzono zmiany:

  1. Dokładnie pakiet został opróżniony i utworzono pakiet przejściowy . Dodano kilka zależności od pakietów, które nie zostały przeniesione do trybu multiarch.
  2. Powoli, ale pewnie, wszystkie pakiety były przebudowywane z obsługą multiarch, a odwrotne zależności były usuwane lub zmieniane na ia32-lib-multiarch. Kiedy te pakiety przestają potrzebować pakietów ia34-libs, zależności zostały usunięte w tym samym czasie. Zależności były zmieniane od ia32-libsdo package:archbycia packagenazwa biblioteki potrzebne i archarchitektura (poniżej znajduje się przykład Skype).
  3. Z ostatniego wydaniaia32-libs-multiarch pakiet został usunięty z pre-zapalony uwolnień i ia32-libsnie został opublikowany w Saucy. Wszystkie pakiety Ubuntu są kompatybilne z wieloma pakietami i możesz zainstalować różne pakiety architektury w swoim systemie.

Teraz, gdy instalujesz pakiet, który wymaga 32-bitowych plików binarnych, jeśli nie zwrócisz uwagi, nigdy nie dowiesz się, że używasz pakietu 32-bitowego, ponieważ menedżer pakietów automatycznie pobierze niezbędne zależności:

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

Zauważ, że skype jest pakietem i386. Jeśli użyję apt-get, aby go zainstalować, zaoszczędzę sobie później bólu głowy.

Ale niektórzy ludzie wolą używać .debpakietów, a następnie przygotuj się, ponieważ może to być nieco bałagan. Powinieneś ręcznie zainstalować wszystkie zależności wcześniej, aby twój system nie kończył się niezaspokojonymi zależnościami. Polecenie, które pomoże, dpkg-deb -Iponieważ pokazuje informacje o pakiecie:

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)
[...]

Jak widać, zawiera listę zależności, więc musisz tylko sudo apt-get installje uwzględnić sudo dpkg -i. Ponownie, wolę instalować oprogramowanie z repozytoriów zamiast pobierać je i instalować ręcznie za pomocą dpkg -i.

Teraz, jeśli twoja jest w fazie rozwoju, możesz zainstalować dowolną bibliotekę, używając apt-getskładni. Po prostu dodaj :i386do biblioteki, którą chcesz pobrać, i gotowe. Nie musisz tego robić ręcznie, jeśli instalujesz oprogramowanie z repozytoriów.

Konkluzja: Nie, możesz uruchamiać pakiety 32-bitowe bez instalowania ia32-libs, nawet jeśli instalujesz pakiety z repozytoriów, jeszcze lepiej. Jeśli jesteś w fazie rozwoju, staraj się zawsze używać systemu APT.

Braiam
źródło
Co mogę zrobić z instalatorem .bin, który sprawdza, czy pakiet ia32-libs jest zainstalowany? O ile mi wiadomo, nawet jeśli ręcznie zainstaluję poprawne zależności, .bin nadal nie powiedzie się, ponieważ szuka pakietu ia32-libs. Czy istnieje sposób, aby „oszukać” instalator, aby pomyślał, że ia32-libs jest zainstalowany?
Galgalesh,
1
@Galgalesh poprosić opiekuna o naprawienie swoich rzeczy, są już w przeszłości.
Braiam
Jedyny problem z usuwaniem ia32-libs występuje wtedy, gdy masz programy takie jak PlayOnLinux, które próbują używać 32-bitowych bibliotek do uruchamiania 32-bitowych programów Windows. To jest łamanie wstecznej niezgodności.
AlexLordThorsen
@Rawrgulmuffins musieli zmienić ... OpenSUSE i Red Hat były już zgodne ze standardami LSB i FHS , a pakiet ia32-libs nie pozwalał im łatwo zarządzać wprowadzanymi zmianami, co było pojedynczym katalogiem dla każdego architektura. Zamiast tego programiści powinni postępować zgodnie z wprowadzeniem multiarch i odpowiednio przepakowywać swoje pakiety. Jeśli nie zrobili tego w ciągu ostatnich 3 lat, są leniwi.
Braiam
@Braiam Tak więc wina leży w standardach LSB i FHS dotyczących łamania wstecznej kompatybilności. Wydaje się głupotą stwierdzenie, że wymaga to tylko od programistów przepakowania, zwłaszcza że psuje to wszystkie pakiety oparte na lib32.
AlexLordThorsen
12

Pamiętaj, aby dodać architekturę i386, w przeciwnym razie nie będzie można zainstalować pakietów 32-bitowych:

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

Sprawdź przewodnik dotyczący rozwiązywania problemów z pakietem: https://help.ubuntu.com/community/PackageManagerTrou Rozwiązywanie problemówProcedura

13m5
źródło
Powyższe dwa polecenia nie zainstalowały dla mnie żadnych 32-bitowych pakietów. czego mi brakuje?
e40
2
OK, dla mnie musiałem wykonać dwa dodatkowe polecenia: apt-get install libc6:i386i apt-get install libgtk2.0-0:i386(ten drugi, ponieważ jest to aplikacja GTK).
e40