Что такое multilib linux

Обновлено: 05.07.2024

For 64bit systems it is sometimes necessary to execute 32bit binaries, e.g. if the application is only available as 32bit binary like Opera, Steam, Windows applications and games via wine, . To achieve this, Gentoo has a multilib profile which offers some emul-linux packages that bundle some 32bit libraries. So if an application like Opera, Steam or wine gets installed, then it pulls the emul-linux packages it needs to run. This approach works but has at least two drawbacks:

  • The bundled libraries are several months old (based on the stable libraries in Gentoo). Owners of relatively modern graphic cards (1-2 years old) who want to play a game once in a while (without proprietary drivers) need the latest available drivers and libraries because versions older than a month may render even old games completely unplayable. If the performance is excellent with multimedia and desktop applications but very low with wine and steam (native or not), then the problem lies with the emul-linux packages.
  • Prepackaged software compiled by other people is not the Gentoo way where the user wants to set his USE-flags and compiler flags etc. by himself.

But the end of emul-linux is coming: Several months ago Gentoo packages introduced a new flag (abi_x86_32) which will also create 32bit libraries of every package where this flag has been activated. So the times where a user e.g. had a fast 64bit mesa-10.2 library for his RadeonSI card and a 32bit emul-linux-opengl bottleneck with mesa-10.0 are over: If everything is set up properly, emerge mesa will install the same version of mesa in 64bit and 32bit on the system; same USE-flags, same everything.

This document will show how to setup a Gentoo

amd64 system for this new way of dealing with 32bit libraries. A stable amd64 system may not work this way but if the new feature is completely stable, it will be available to all users eventually.

Overview

The following steps are needed to setup the system for abi_x86_32:

  1. Unmerge all packages from Overlays that replace packages from the base system (like X11 packages from x11-overlay) and all packages that depend on emul-linux packages, because they will interfere with the transition process.
  2. Note which emul-linux packages are installed, remove and mask them
  3. Set the abi_x86_32 flag for those packages which were part of the previously uninstalled emul-linux packages. The flag may be set globally but it makes no sense to create additional 32bit binaries for really everything (a 32bit copy of your desktop and GUI applications is probably very useless)
  4. Recompile everything that changed (which may need several hours)

Detailed Guide

For this guide you need eix and gentoolkit installed unless you know how to achieve the same things without their functionality. The guide follows the steps from the overview above.

Dealing with Overlays

Removing overlay packages depends on what you have installed so it cannot be handled here. If dependency problems or USE-flag problems occur later, you will see which package caused it.

Remove emul-linux and all dependencies

To find out which packages depend on emul-linux packages, you can use the following shell command:

Note which packages were printed, then unmerge them. Gcc might be seen among those packages because of its multilib flag and, of course, do NOT unmerge GCC.

pacho/emul.html and open the linked site listing the contents of the emul-packages.

Now unmerge all emul-packages and mask them by adding them to /etc/portage/package.mask

FILE /etc/portage/package.mask Masking all emul-linux packages

Apply the abi_x86_32 flag

First, unmask abi_x86_32 flag by putting the following in /etc/portage/profile/use.mask . If the file does not exist, create it.

FILE /etc/portage/profile/use.mask Unmasking abi_x86_32 flag

It does not matter if you need or want all these packages, just set the flag in case it gets emerged. I also added

because my main motivation was to play games via wine and mostly every commercial Windows game comes as 32bit binary.

Update the System

Emerge everything that changed:

. It is imperative to emerge with dependency and newuse checks.

but the exact list will most likely depend on your USE-flags and will vary!

After all has been rebuilt, it is a good idea to restart the system or at least X. Then emerge all applications that needed emul-linux packages before. If something still depends on these packages now, fill out a bug.

GNU Compiler Collection special case

Прошло несколько месяцев с тех пор, как я обновил свою систему Gentoo. И, как вы можете себе представить, это означает, что мне нужно пересмотреть множество пакетов (и изменений в USE). У меня система "amd64" (multilib), но у меня много пакетов с ручным набором ключей из "

В любом случае, в этом обновлении я продолжаю видеть USE-флаги "ABI_X86". Что это? Это новая. В списке рассылки новостей нет ничего об этом.

Я нашел эту тему: http://forums.gentoo.org/viewtopic-t-953900-start-0.html . Казалось бы, это показывает, как его использовать, но есть ли «реальные» документы для этого? Что оно делает? Что я должен установить для "ABI_X86"? У меня есть мультибиблиотечная система. Я предполагаю, что хочу "64", но тогда что такое "32" и "x32"? Я запутался в том, что мне нужно сделать здесь.

Emerge много кричит о конфликтах слотов, и они, похоже, связаны с "ABI_X86" (я точно забыл об ошибках, но помню, что это был zlib).

Итак, есть ли «официальные» документы о том, что это ABI_X86 такое и как им пользоваться?

PS У меня есть большинство пакетов "app-emulation / emul-linux-x86" (те, которые мне, казалось, были нужны в то время) в моем файле "package.keywords".

Я должен сообщить, что у меня мало опыта использования multilib-build.eclass -style multilib в Gentoo.

ABI_X86 является USE_EXPAND переменной; установка ABI_X86="32 64" или USE="abi_x86_32 abi_x86_64" эквивалентны. Настройка по умолчанию ABI_X86, на момент написания этой статьи (2013-09-09), для default/linux/amd64/13.0 профиля выглядит просто ABI_X86=64 .

Эта переменная управляет явной поддержкой multilib в ebuild, которые используют multilib-build.eclass более похожий на Gentoo способ создания multilib, чем оригинальный метод.

Первоначальный метод установки 32-разрядных библиотек в Gentoo - использование имен двоичных снимков app-emulation/emul-linux-* . Каждый из этих двоичных пакетов эмуляции содержит полный набор 32-битных библиотек, скомпилированных для вас некоторыми разработчиками Gentoo. Поскольку каждая из них устанавливает пакет библиотек, которые должны координироваться вместе, отслеживать зависимости 32-битных ebuild'ов сложнее. Например, если вам нужна 32-битная media-libs/alsa-lib система в 32-битной системе, вы просто устанавливаете media-libs/alsa-lib , но в 64-битной мультибиблиотечной системе вы должны обнаружить, что в app-emulation/emul-linux-soundlibs числе прочих библиотек устанавливается 32-битная версия media-libs/alsa-lib . Кроме того, разработчик Gentoo, создающий один такой бинарный пакет, должен выяснить причуды multilib и buildsystem каждого из них.из включенных в пакет моментальных снимков библиотек, что усложняет обслуживание. И, самое главное, предоставление бинарных пакетов в качестве единственного варианта официального варианта использования multilib в Gentoo противоречит духу Gentoo. Вы должны иметь право все компилировать самостоятельно!

В multilib-build.eclass отдаляется от такого поведения, помогая отдельные сборочные установить как 32-разрядные , так и 64-разрядные версии. Это должно позволить, например, wine указывать только зависимости непосредственно от пакетов, которые ему нужны, вместо того, чтобы загружать app-emulation/emul-linux-* пакеты. Как упоминает ssuominen в ветке форума, на которую вы ссылались :

= app-emulation / emul-linux-x86-xlibs-20130224-r1, который является пустым пакетом, в котором нет файлов, поскольку файлы теперь поступают непосредственно из x11-libs /

Для установки Wine в Arch Linux и его производные необходимо включить подключить репозиторий multilib.

Что такое и для чего нужен multilib

Репозиторий multilib – это официальный репозиторий, который позволяет пользователю запускать и собирать 32-битные приложения на 64-битной версии Arch Linux.

Как включить multilib

Чтобы включить multilib, откройте текстовый файл /etc/pacman.conf:

В нём найдите и раскомментируйте строки (убедитесь, что раскомментировали обе строки, иначе изменения не вступят в силу):


Обновите информацию о пакетах:

чтобы вывести список всех пакетов репозитория multilib. Имена 32-битных пакетов библиотек начинаются с lib32-.

Как отключить multilib

Для возврата к чистой 64-битной системе:

Выполните следующую команду, для удаления всех пакетов, которые были установлены из multilib:

Если у вас есть конфликты с gcc-libs, переустановить пакет gcc-libs и группу base-devel.

Закомментируйте секцию [multilib] в /etc/pacman.conf:

Обновите информацию о пакетах:

Как установить Wine в Arch Linux/BlackArch

После включения репозитория Multilib можно установить Wine. Имеется две версии Wine: wine (стабильная) и wine-staging (тестирование). Wine Staging – это патченная версия Wine, которая имеет исправления ошибок и функции (к примеру CSMT патч), которые ещё не были интегрированы в стабильную ветку.

Итак, установка Wine в Arch Linux/BlackArch выполняется следующей командой:

WINEPREFIX

По умолчанию, Wine хранит файлы настроек и установленные приложения Windows в каталоге

/.wine. Этот каталог называется префиксом Wine (Wine prefix). Он создается и обновляется автоматически по необходимости при запуске программ Windows и программ настройки Wine, например winecfg. Каталог префикса также содержит стандартную структуру корневого раздела каталогов Windows, которая представляется программам Windows как диск C:.

Вы можете изменить место расположения префикса, создав переменную окружения WINEPREFIX с указанием нового пути. Это полезно, когда вам необходимо использовать различное окружение для разных приложений Windows. При запуске приложения Windows новый префикс будет автоматически создан на указанном в WINEPREFIX месте, если его до этого не существовало.

Для примера, если вы запускаете одно приложение с

у каждой программы будет свой раздел C:, соответственно, своя копия всех настроек и реестра. Таким образом, обе программы будут запущены в полностью изолированных друг от друга средах.

Примечание: Тем не менее, префиксы Wine не являются песочницами. Программы, запущенные в Wine могут также получать доступ к оставшейся части системы (например, раздел Z: обычно соответствует корню файловой системы /).

Для создания префикса без запуска каких-либо средств настройки Wine или приложений Windows вы можете использовать команду:

Этот документ содержит наиболее часто задаваемые вопросы об использовании Gentoo на системах с архитектурой AMD64. Многие из этих вопросов изначально были заданы на форумах, в IRC или различных списках рассылки. Для данной архитектуры поддержку Gentoo Linux осуществляет проект AMD64. Если у вас есть предложения или вопросы по этому ЧаВо, вы можете оставить свой комментарий в соответствующей странице обсуждения.

Установка

В чём разница между AMD64 и EM64T?

AMD выпустила первые 64-битные процессоры раньше Intel. В силу этих исторических причин архитектура всех x86-64-совместимых процессоров обозначается в Gentoo ключевым словом amd64 . Так что «AMD64» — это общее обозначение для 64-битных чипов от AMD и Intel.

Какие CFLAGS использовать?

Следует использовать простые CFLAGS , чтобы избежать проблем с системой в будущем. Поддерживаемые как на системах с AMD, так и с Intel (EM64T) CFLAGS : -O2 -march=native -pipe .

Какое ядро использовать?

Вы можете использовать практически все ядра, доступные через Portage. Мы рекомендуем sys-kernel/gentoo-sources, поскольку это ядро спроектировано специально для Gentoo Linux. Оно содержит множество ориентированных на AMD64 патчей, и поэтому является единственным ядром, официально поддерживаемым проектом Gentoo/AMD64.

Убедитесь, что параметр ядра IA32_EMULATION включён:

Предупреждение
Отключение этого параметра может привести к ошибкам на системах с multilib.

Увеличится ли производительность, если использовать 64-битную систему вместо 32-битной?

Что такое multilib, и как его использовать?

Любой процессор архитектуры AMD64 может запускать 32-битный код, так же как и 64-битный. Но нельзя запустить 32-битное приложение с 64-битными библиотеками или наоборот. Можно, однако, «нативно» (без эмуляции) запустить 32-битное приложение, если все нужные ему разделяемые библиотеки доступны в 32-битном виде. Наличие или отсутствие поддержки multilib соответствует выбранному вами профилю. Стандартный профиль включает поддержку multilib.

Предупреждение
Переключение с профиля без multilib на профиль multilib на данный момент не поддерживается, так что обдумайте своё решение дважды, прежде чем выбрать профиль без поддержки multilib.

Как сделать 32-битный chroot?

Можно ли обновить систему с x86 до AMD64 с помощью emerge -e @world?

Таким способом обновиться невозможно в силу некоторых различий между сборками для x86 (32-битными) и amd64 (64-битными). Вы можете установить новую систему, воспользовавшись AMD64 Handbook.

Оборудование

Будут ли работать бинарные драйвера NVIDIA/ATI?

Да, NVIDIA и ATI предоставляют работающие на AMD64 драйвера. Можно установить или x11-drivers/nvidia-drivers, или x11-drivers/ati-drivers. При возникновении других вопросов об этих драйверах, обратитесь к руководству по nvidia-drivers или ATI FAQ.

Как задействовать технологии Cool'n'Quiet/PowerNow/SpeedStep?

Необходимо скомпилировать ядро с поддержкой этих возможностей. Просто включите перечисленные ниже параметры:

Ядро Параметры ядра для Cool'n'Quiet/PowerNow/SpeedStep

Затем установите sys-power/cpupower и отредактируйте /etc/conf.d/cpupower любым текстовым редактором.

Файл /etc/conf.d/cpupower Пример конфигурационного файла

Осталось только запустить rc-update add cpupower boot , чтобы эти параметры устанавливались при каждой загрузке.

Заметка
Вам может пригодиться Руководство по управлению питанием, которое содержит больше советов по управлению питанием CPU.

Приложения

Работает ли Adobe Flash?

Я хочу установить пакет foo, но emerge выводит: (masked by:

Это означает, что пакет находится в «тестовой» части дерева. Более подробную информацию можно найти в man-странице Portage ( man portage ) или Смешивание ветвей ПО часть AMD64 Handbook.

Я хочу установить пакет foo, но emerge выводит: (masked by: missing keyword)

Это означает, что пакет не был достаточно протестирован. Из этого не обязательно следует, что пакет не работает. Его можно размаскировать, установив для пакета другую архитектуру (или набор архитектур). В следующем примере показано, как сделать, чтобы Portage допускал установку данного пакета на любой архитектуре:

Если пакет хорошо работает на вашей системе, то вы можете дать нам знать об этом, открыв запрос в Gentoo's Bugzilla. После этого команда проекта AMD64 может установить архитектуру для пакета, и другие пользователи получат пользу от ваших тестов.

Предупреждение
Не следует вызывать команды вроде ACCEPT_KEYWORDS="

x86" emerge packagename . Это наверняка «поломает» дерево Portage и сделает систему непригодной к использованию.

Как можно помочь проекту Gentoo/AMD64?

Как помочь?

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

Читайте также: