Product SiteDocumentation Site

Глава 6. Основы сборки RPM-пакетов

6.1. RPM-пакет
6.2. SPEC-файл
6.2.1. Пример spec-файла
6.2.2. Директивы преамбулы
6.2.3. Директивы основной части
6.3. RPM Макросы

6.1. RPM-пакет

RPM-пакет состоит из архива в формате cpio, содержащего файлы (скомпилированные исполняемые файлы, библиотеки, данные), и заголовка с метаданными (название, версия, группа и т.п.). Эти метаданные используются системой управления пакетами (например, apt) для разрешения зависимостей, определения путей установки и получения другой служебной информации.
Различают два вида RPM-пакетов:
  • пакет с исходным кодом — SRPM-пакет (имеет расширение вида .src.rpm). Такой пакет содержит архив (один или несколько) с исходным кодом, spec-файл и, возможно, различные патчи и дополнения. Пакет src.rpm используется только для сборки двоичных пакетов, но не для установки. Сборка осуществляется командой:
    $ rpmbuild --rebuild package.src.rpm
  • собранный двоичный пакет — RPM-пакет (имеет расширение вида <архитектура>.rpm). Такие пакеты можно устанавливать командой:
    # rpm -Uvh package.rpm
Однако при ручной сборке через rpmbuild возникают очевидные сложности:
  • необходимо вручную удовлетворять сборочные зависимости (устанавливать компилятор, заголовочные файлы, библиотеки). При большом количестве собираемых пакетов система засоряется;
  • для сборки пакета необходимо сформировать .src.rpm из файлов, расположенных в разных каталогах (по умолчанию это подкаталоги SOURCE, SPECS и каталоги сборки в ~/RPM);
  • исходные файлы должны быть упакованы, что затрудняет создание патчей;
  • на рабочей системе легко пропустить необходимые зависимости.
Для решения этих проблем в Альт Платформа используется две технологии:
  • Hasher — сборка в изолированном chroot-окружении. В chroot устанавливается базовый набор пакетов и пакеты, необходимые для сборки (поле BuildRequires в spec-файле). Если какой-либо пакет не указан в spec-файле, сборка завершится ошибкой. Это обеспечивает воспроизводимость и чистоту сборки. Обратной стороной является необходимость доступа к репозиторию, так как пакеты устанавливаются при каждой сборке;
  • Gear — работа с распакованными исходниками в git с автоматической упаковкой в .src.rpm. В этом случае все файлы хранятся в распакованном виде и упаковываются в .src.rpm по правилам, определённым в .gear/rules. Это позволяет напрямую работать с содержимым, быстро создавать патчи, вести историю изменений и эффективно взаимодействовать в рамках командной разработки.