Binary package guide/ru

Article description::На ряду с обычной поддержкой ebuild-файлов для сборки из исходного кода, так же поддерживает сборку и установку бинарных пакетов. Это руководство объясняет, как создать их, установить и как настроить сервер бинарных пакетов.

Есть много причин, почему некоторым системным администраторам нравится использовать бинарные пакеты для установки программ в Gentoo.


 * Экономить время при поддерживании похожих систем обновлёнными. Компиляция всего из исходников может потребовать много времени. Обслуживание нескольких похожих систем (некоторые из них, возможно, имеют старое оборудование) может стать намного проще, если только одна система будет компилировать всё из исходников, а остальные будут использовать бинарные пакеты.
 * Осуществлять безопасные обновления. Для критически важных в производстве систем важно как можно дольше оставаться пригодными для использования. Это может быть осуществлено с помощью установочного сервера, который сначала будет применять все обновления к себе. Когда установочный сервер окажется в хорошем состоянии, обновления смогут быть применены к критическим системам. Другой подход — осуществлять обновления в изолированной среде (chroot) на той же системе и использовать созданные там бинарные пакеты в реальной системе.
 * В качестве резервной копии. Часто бинарные пакеты являются единственным способом восстановления повреждённой системы (т.е. повреждённого компилятора). Наличие предварительно скомпилированных бинарных пакетов либо на отдельном сервере, либо на локальной системе может стать большим подспорьем в случае повреждения базовой системы.
 * Это содействует обновлению очень старых систем. Задача обновления очень старых систем может быть существенно облегчена с помощью бинарных пакетов. Обычно установка бинарных пакетов на старых системах бывает полезна но причине того, что они не требуют установки/обновления зависимостей времени сборки. Также бинарные пакеты позволяют избежать ошибок во время построения, поскольку они скомпилированы заранее.

В этом руководстве основное внимание будет уделено следующим темам:


 * Создание бинарных пакетов;
 * Распространение бинарных пакетов клиенту;
 * Внедрение бинарных пакетов;
 * Сопровождение бинарных пакетов.

Ближе к концу будет рассмотрено несколько более сложных тем о работе с бинарными пакетами.

Форматы бинарных пакетов
Начиная с Portage версии 3.0.31 была добавлена поддержка нового формата бинарных пакетов (GPKG). Новый формат был создан с нуля, чтобы решить проблемы, присущие старому формату, и добавить новые возможности, поэтому он не поддерживает обратную совместимость со старым форматом. Если пользователям нужно создавать бинарные пакеты для систем с более старыми версиями Portage, им рекомендуется продолжать использовать формат XPAK.

Причины заинтересованности в создании нового формата GPKG можно найти в предложении GLEP 78: Gentoo binary package container format (англ.). См. также задачи и.

Чтобы использовать новый формат GPKG, установите значение для переменной BINPKG_FORMAT в. Значение по умолчанию равно xpak.

Это руководство применимо к обоим форматам. См. раздел Как устроен формат файлов бинарных пакетов для более подробной информации о форматах бинарных пакетов.

Создание бинарных пакетов
Существует три основных способа создания бинарных пакетов:


 * 1) после обычной установки использовать приложение ;
 * 2) явно, во время каждого запуска, использовать параметр   ;
 * 3) автоматически, с помощью установки значений для   (сборка бинарных пакетов для всех пакетов) или   (сборка бинарных пакетов только для ) в переменной Portage FEATURES.

Все три метода создадут бинарные пакеты в каталоге, который указан в переменной PKGDIR (по умолчанию это ).

Использование quickpkg
Приложение (включена в Portage) создаёт бинарные пакеты для всех установленных пакетов, которые соответствуют заданным пакетам (или наборам пакетов).

Например, чтобы создать бинарные пакеты для всех установленных версий GCC:

Чтобы создать бинарные пакеты для всего набора @system:

Используйте  для того, чтобы создать бинарные пакеты для всех установленных пакетов в системе:

Использование --buildpkg как параметра emerge
При установке программ с помощью можно попросить Portage создавать бинарные пакеты, если использовать параметр   :

Так же можно попросить Portage только создать бинарный пакет без установки пакета в систему. Для этого необходимо использовать параметр  :

Последний метод, однако, требует предварительной установки всех зависимостей времени сборки.

Реализация работы buildpkg с помощью возможности Portage
Наиболее распространенный способ создания бинарного пакета, каждый раз когда пакет устанавливается Portage, — это использовать возможность (feature), которою можно включить в файле  так:

Каждый раз, когда Portage будет устанавливать программное обеспечение и эта возможность включена, он будет создавать также бинарный пакет.

Исключение некоторых пакетов
Можно попросить Portage не создавать бинарные пакеты для некоторых выбранных пакетов или категорий. Это можно сделать, передав команде emerge параметр :

Это можно использовать для пакетов, для которые создание бинарных пакетов приносит мало пользы. Например пакеты исходного кода ядра или бинарные пакеты (те, которые заканчиваются на -bin как ).

Форматы сжатия бинарных пакетов
Для сжатия бинарных пакетов можно использовать следующие форматы сжатия:,  ,  ,  ,  ,   и. По умолчанию это формат сжатия. Просмотрите справочную страницу и перейдите к BINPKG_COMPRESS для получения актуальной информации.

Формат сжатия можно выбрать с помощью.

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

Подпись бинарных пакетов при помощи OpenGPG
GPG подпись позволяет пользователям сверять создателя и целостность бинарного пакета, а также управлять доверием на основе ключей. По умолчанию возможность подписывать бинарные пакеты отключена, поэтому перед её использованием необходимо включить возможность. Обратите внимание, что включение или отключение данной возможности не влияет на проверку подписи.

Пользователям так же необходимо выставить переменные BINPKG_GPG_SIGNING_GPG_HOME и BINPKG_GPG_SIGNING_KEY, чтобы Portage смог найти подписывающий ключ.

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

Настройка хоста бинарных пакетов
Portage поддерживает несколько протоколов для загрузки бинарных пакетов: FTP, FTPS, HTTP, HTTPS и SSH/SFTP. Такое количество оставляет большое пространство для различных реализаций хоста бинарных пакетов.

Тем не менее, не существует «готового» метода, предоставляемого Portage для распространения бинарных пакетов. В зависимости от желаемой настройки необходимо установить дополнительное программное обеспечение.

Хост бинарных пакетов на основе веб
Основной подход для распространения бинарных пакетов это создать хост бинарных пакетов на основе веб.

Воспользуйтесь веб-сервером, таким как  и настройте его, чтобы он предоставлял доступ на чтение к каталогу, указанному в переменной PKGDIR в.

Затем, на клиентских системах настройте переменную PORTAGE_BINHOST :

Хост бинарных пакетов на основе SSH
Для установки подлинности бинарных пакетов пользователь может использовать SSH.

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

Для осуществления этого убедитесь, что SSH ключ суперпользователя разрешён на сервере. Это потребуется повторить для всех устройств, которые будут подключаются к SSH серверу бинарных пакетов.

Тогда переменная PORTAGE_BINHOST может выглядеть так:

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

Файл может выглядеть так:

Затем на клиентах можно смонтировать каталог. Пример записи в файле :

The NFS share is mounted on the local filesystem, so there is no need to set PORTAGE_BINHOST or use the  option. Instead, follow the normal procedures for, remembering to point PKGDIR to the NFS share so that portage knows where to find the packages:

Использование бинарных пакетов
Для того, чтобы бинарные пакеты можно было использовать на других системах, они должны соответствовать некоторым требованиям:


 * Архитектура на клиенте и сервере, а также переменная должны совпадать.
 * Переменные оптимизации в CFLAGS</var CXXFLAGS, используемые для создания бинарных пакетов, должны поддерживаться всеми клиентами.
 * USE-флаги возможностей процессора (такие как MMX, SSE и так далее) следует выбирать осторожно; все клиенты должны поддерживать их.

The utility can be used to find a subset of CFLAGS that is supported by both the server and client(s). For example, the host might return:

While the client might return:

In this example CFLAGS could be set to  since   is a full subset of. and  are not included as these are not supported but the client. However,  is included as the client does not support. To find which 's are subsets of others, check the [//gcc.gnu.org/onlinedocs/gcc/x86-Options.html gcc manual], if there is no suitable subset set e.g..

Optionally, it is also possible to set  or   to tell gcc to tune code to a specific arch. In contrast to, the   argument does not prevent code from being executed on other processors. For example, to compile code which is compatible with ivybridge and up but is tuned to run best on skylake set CFLAGS to. When  is not set it defaults to whatever   is set to.

When changing  to a lower subset for using binary packages on a client, a full recompilation is required to make sure that all binaries are compatible with the client's processor, to save time packages that are not compiled with e.g. gcc/clang can be excluded:

Similarly, can be used to find a suitable subset of processor specific instruction set USE flags. For example, the host might return:

While the client might return:

In this example CPU_FLAGS_X86 can be set to  in  because these flags are supported by both the client and the host

Так же Portage проверяет, создан ли бинарный пакет с использованием тех же USE-флагов, которые требуются клиенту. Если пакет собран с другой комбинацией USE-флагов, в зависимости от параметров, переданных, Portage либо проигнорирует бинарный пакет (и станет собирать из исходного кода), либо завершится с ошибкой. См. раздел Установка бинарных пакетов для более подробной информации.

На клиентах требуется сделать некоторые настройки, чтобы использовались бинарные пакеты.

Установка бинарных пакетов
Можно добавить несколько параметров к команде, чтобы сообщить Portage о том как нужно работать с бинарными пакетами:

Чтобы автоматически установку бинарных пакетов, соответствующую параметр можно добавить в переменную EMERGE_DEFAULT_OPTS :

В Portage есть возможность, которая автоматически реализует эквивалент   без необходимости писать в переменную EMERGE_DEFAULT_OPTS значение  :

Проверка OpenGPG подписи бинарного пакета
Эта возможность доступна только в формате GPKG.

Portage will try to verify the binary package's signature whenever possible, but users must first set up trusted local keys. A GPG key management tool for portage is in the plan, but for now, users have to manage it manually.

The GPG database of portage is stored in by default.

The following script will create a local trusted master key, import key  from keys.openpgp.org, and trust it. Please modify it to a key trusted by the user.

Make sure is global readable, portage will drop root privileges when verifying binary packages.

By default, Portage will only verify GPG signatures when a signature file is found in a package, which allows the user to mix signed and unsigned GPKG binary packages from different sources, and allows to use of old XPAK format binary packages.

If the user needs to force signature verification, the  feature needs to be enabled. This feature assumes that all packages should be signed and rejects any unsigned package. Note that this feature does not support per binhost configuration.

Получение пакетов с хоста бинарных пакетов
В случае использования хоста бинарных пакетов, на клиентах необходимо настроить переменную PORTAGE_BINHOST. Иначе клиент не будет знать где хранятся бинарные пакеты, в результате чего, Portage не сможет установить их.

The PORTAGE_BINHOST variable uses a space-separated list of URIs. This allows administrators to use several binary package servers simultaneously. The URI must always point to the directory in which the file resides.

В переменной PORTAGE_BINHOST хранится разделенный пробелами список URI. Это позволяет администраторам использовать множество серверов бинарных пакетов одновременно. URI всегда должны указывать на каталог в котором находится файл.

Переустановка модифицированных бинарных пакетов
Опция  в  переустановит все бинарные файлы, которые были перестроены с момента установки пакета. Это полезно в том случае, если на сервере бинарных пакетов запущены инструменты пересборки, такие как.

Связанной опцией является. Она заставляет emerge не рассматривать бинарные пакеты для переустановки, если эти пакеты были собраны до указанной временной метки. Это полезно, чтобы избежать переустановки всех пакетов, когда сервер бинарных пакетов должен быть собран с нуля и использовался бы.

Дополнительные настройки клиента
Помимо возможности, Portage также содержит функцию. Эта функция определяет, следует ли сохранять файлы журналов успешной установки бинарных пакетов. Она имеет значение, только если установлена переменная PORT_LOGDIR, и по умолчанию включена.

Аналогично исключению бинарных пакетов для определённого набора пакетов или категорий, клиенты могут быть настроены на исключение установки бинарных пакетов для определённого набора пакетов или категорий.

Чтобы выполнить это, воспользуйтесь параметром :

Чтобы включить такие дополнительные настройки для каждой команды emerge, добавьте необходимые пакеты в переменную EMERGE_DEFAULT_OPTS в файле :

Обслуживание бинарных пакетов
Экспорт и распространение бинарных пакетов приведет к бесполезному расходу памяти, если список бинарных пакетов не будет активно поддерживаться.

Удаление устаревших бинарных пакетов
В пакете предоставляется программа под названием. Она позволяет обслуживать связанные с Portage временные файлы, такие как файлы загруженного исходного кода, а также файлы бинарных пакетов.

Следующая команда удалит все бинарные пакеты у которых нет ebuild в установленных репозиториях ebuild-файлов:

Для более подробной информации см. статью.

Есть другая утилита, которой можно воспользоваться. Это утилита из пакета. Однако эта утилита чуть менее настраиваемая.

Чтобы отчистить неиспользуемые бинарные пакеты (в смысле неиспользуемые сервером, на котором хранятся бинарные пакеты):

Поддержка файла Packages
Внутри каталога пакетов имеется файл manifest с именем. Этот файл используется как кэш для метаданных всех бинарных пакетов в этом каталоге пакетов. Файл обновляется каждый раз когда Portage добавляет бинарный пакет в каталог. Таким же образом, обновляет его когда удаляет бинарные пакеты.

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

Сборка для других архитектур
is a tool that will easily build cross compile toolchains to allow setting up a binary host for a different architecture, for example for a device like a from a more powerful desktop PC.

An installation guide for this package can be found at the page.

Сборка кросс-компилятора
Using crossdev with the following command can build a toolchain for the desired system:

For the rest of this section, the example target will be for a Raspberry Pi 4:

After this has built, a toolchain will have been created in, and will look like a bare bones Gentoo install where it is possible to edit settings as normal.

Базовая настройка
Removing the  flag from the USE line in  is generally recommended in a setup like this:

Profiles
List available profiles for the device by running:

Next, select the profile that best suits:

Сборка конкретного пакета
To build a single binary package for use on the device, use the following:

Build world file
To build every package in the world file, then the following command is needed:

Расположение бинарных пакетов
By default, all binary packages will be stored in, so this is the location needed to be selected when.

Создание снимка каталога пакетов
При развёртывании бинарных пакетов для большого числа клиентских систем может оказаться целесообразным создавать снапшоты каталога пакетов. В этом случае клиентские системы не используют каталог пакетов напрямую, а используют бинарные пакеты из снимка.

Снимок можно создать с помощью утилиты или. Ей требуются четыре аргумента:


 * 1) Исходный каталог (путь к каталогу c пакетами).
 * 2) Целевой каталог (который не должен существовать).
 * 3) URI.
 * 4) Каталог сервера бинарных пакетов.

Файлы из каталога c пакетами копируются в целевой каталог. Затем создаётся файл в каталоге сервера бинарных пакетов (четвертый аргумент) с указанным URI.

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

Формат XPAK
Созданные Portage бинарные пакеты в формате XPAK имеют расширение. Такие файлы состоят из двух частей:


 * 1) Архив  содержит файлы, которые можно установить в систему.
 * 2) Архив  содержит метаданные пакета, файл ebuild и файл переменного окружения.

Для описания формата смотрите.

В пакете некоторые утилиты способны разделить или создать файлы  и.

Следующая команда разделит на файлы  и :

Файл можно проверить с помощью утилиты.

Чтобы показать содержимое:

Следующая команда извлечет файл, который содержит включенные USE-флаги для этого пакета:

Формат GPKG
Созданные Portage бинарные пакеты в формате GPKG имеют расширение. Такие файлы состоят из не менее четырех частей:


 * 1) A  empty file that used to identify the format.
 * 2) A  archive containing package metadata, the ebuild, and the environment file.
 * 3) A  archive containing the files that will be installed on the system.
 * 4) A  file containing all files checksum that will be used to check for file corruption.
 * 5) Multiple optional  files containing OpenPGP signature are used for integrity checking and trust management.

The format can be extracted by tar without the need for additional tools.

Схема PKGDIR
На данный момент используется формат версии 2 со следующей схемой:

Файл является основным улучшением (а также критерием, по которому Portage узнает, что каталог бинарных пакетов использует версию 2) по сравнению с первой версией каталога бинарных пакетов (версия 1). В версии 1 все бинарные пакеты также размещались в одном каталоге (называемом ), а каталоги категорий имели только символические ссылки на бинарные пакеты в каталоге.

In portage-3.0.15 and later, FEATURES=binpkg-multi-instance is enabled by default:

Распаковка с помощью quickunpkg
Zoobab написал простую утилиту для оболочки командной строки quickunpkg, чтобы быстро распаковывать файлы.

External resources
quickpkg man page.