Как вы запускаете 32-битную программу на 64-битной версии Ubuntu?

42

У меня есть 64-битная версия Ubuntu 13.10. Я хочу запустить 32-битную версию программы. Однако я вижу ia32-libs, не входит в 13.10. Есть ли замена пакета для этого или что?

Катон
источник
@bain Это не дубликат. Этот вопрос касается общих ситуаций, это особая проблема, не говоря уже о том, что это более старый и лучший вопрос.
Сет
И ответ Брайама потрясающий ! так что, если это должно быть где-то дублировано, его следует объединить.
Матео

Ответы:

30

ia32-libsПакет больше не нужен (с 12.04, если быть точным), если вы используете систему APT, вам не о чем беспокоиться об установке 32-битных пакетов в 64-битной системе. Это произошло с момента появления multiarch , одной из политик Debian, наиболее часто меняющих игры, в том, как Debian управляет своими зависимостями. Этот метод позволяет иметь разные двоичные цели в одной системе без заботы об архитектуре ядра. Это не означает, что вы можете запускать любой 32-битный пакет без подготовки, но если вы устанавливаете библиотеки / двоичные файлы, любые приложения в теории должны быть в состоянии запускаться. Это верно для 64-битных и 32-битных версий, и наоборот.

введите описание изображения здесь

Для использования такого метода рекомендуется использовать менеджеры APT, чтобы предотвратить неудовлетворенные зависимости. Список изменений включает в себя небольшую историю о том, как были внесены изменения:

  1. В точности пакет был опустошен и сделан переходный пакет . Было добавлено несколько зависимостей от пакетов, которые не были перемещены в multiarch.
  2. Медленно, но верно все пакеты были перестроены с поддержкой multiarch, а обратные зависимости были удалены или изменены на ia32-lib-multiarch. Когда эти пакеты перестали нуждаться в пакетах ia34-libs, зависимости были удалены одновременно. Зависимости были изменены с того, ia32-libsчтобы package:archбыть packageназванием необходимой библиотеки и archархитектуры (ниже приведен пример со скайпом).
  3. С последним выпускомia32-libs-multiarch пакет был удален из предварительно рвения релизов и ia32-libsне получил опубликован в дерзкий. Все пакеты Ubuntu поддерживают несколько архитектур, и вы можете устанавливать различные архитектурные пакеты в своей системе.

Теперь, когда вы устанавливаете пакет, для которого нужны 32-битные двоичные файлы, если вы не будете обращать на это внимание, вы никогда не узнаете, что используете 32-битный пакет, поскольку менеджер пакетов автоматически установит необходимые зависимости:

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

Обратите внимание, что Skype - это пакет i386. Если я использую apt-get для его установки, я избавлю себя от головной боли позже.

Но некоторые люди предпочитают использовать .debпакеты, а затем взять себя в руки, потому что это может стать немного грязным. Вы должны вручную установить все зависимости заранее, чтобы ваша система не заканчивалась неудовлетворенными зависимостями. Команда, которая поможет, dpkg-deb -Iтак как она показывает информацию о пакете:

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

Как вы можете видеть, в нем перечислены зависимости, так что вам нужно только sudo apt-get installих, а затем sudo dpkg -i. Опять же, предпочитайте устанавливать программное обеспечение из репозиториев, а не загружать их и устанавливать вручную с помощью dpkg -i.

Теперь, если ваша разработка, вы можете установить любую библиотеку, используя apt-getсинтаксис. Просто добавьте :i386в библиотеку, которую вы хотите скачать, и готово. Нет необходимости делать это вручную, если вы устанавливаете программное обеспечение из репозиториев.

Итог: нет, вы можете запускать 32-битные пакеты без установки ia32-libs, если вы устанавливаете пакеты из репозиториев, даже лучше. Если вы в разработке, старайтесь всегда использовать систему APT.

Braiam
источник
Что я могу сделать с установщиком .bin, который проверяет, установлен ли пакет ia32-libs? Насколько я знаю, даже если я вручную установлю правильные зависимости, .bin все равно не удастся установить, так как он ищет пакет ia32-libs. Есть ли способ «обмануть» установщик, чтобы он думал, что установлен ia32-libs?
Галгалеш
1
@Galgalesh попросите, чтобы сопровождающий исправил их вещи, они в прошлом.
Брайам
Единственная проблема с удалением ia32-libs - это когда у вас есть программы типа PlayOnLinux, которые пытаются использовать 32-битные библиотеки для запуска 32-битных программ Windows. Тогда это ломает обратную несовместимость.
AlexLordThorsen
@Rawrgulmuffins, которые они должны были изменить ... OpenSUSE и Red Hat уже были совместимы со стандартами LSB и FHS , а пакет ia32-libs не позволял им легко управлять изменениями, которые были единым каталогом для каждого архитектура. Вместо этого разработчики должны просто следовать введению в multiarch и соответствующим образом переупаковывать свои пакеты. Если они этого не сделали за последние 3 года, они ленивы.
Брайам
@ Braiam Итак, ошибка в стандартах LSB и FHS для нарушения обратной совместимости. Кажется глупым утверждать, что это просто требует от разработчиков переупаковки, тем более что это нарушает все пакеты, которые полагались на lib32.
AlexLordThorsen
12

Не забудьте добавить архитектуру i386, иначе вы не сможете устанавливать 32-битные пакеты:

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

Ознакомьтесь с руководством по устранению неполадок пакета: https://help.ubuntu.com/community/PackageManagerTrou Фонд устранения проблемProcedure

13m5
источник
Две вышеуказанные команды не установили для меня 32-битные пакеты. Что мне не хватает?
e40
2
ОК, для меня мне пришлось выполнить две дополнительные команды: apt-get install libc6:i386и apt-get install libgtk2.0-0:i386(последняя, ​​потому что это приложение GTK).
e40