Сборка пакета с нуля

Материал из ALT Linux Wiki


Данное руководство покажет, как правильно собрать пакет RPM в Sisyphus с нуля в инфраструктуре Gear и git.alt, имея только исходный код пакета, и права мейнтейнера на git.alt. В качестве примера опакетим Qt Mobility, чтобы закрыть запрос на сборку в багзилле: https://bugzilla.altlinux.org/25111.

Введение

Для сборки пакетов подразумеваются следующие начальные условия:

  1. У вас установлен дистрибутив ALT Linux;
  2. Есть желание собрать пакет правильно, а не для единичного случая;
  3. Вы носите гордое звание «мейнтейнер ALT Linux Team», что подразумевает наличие электронных ключей и доступа к инфраструктуре git.alt

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

В ALT Linux используется формат пакетов RPM, который представляет собой архив, содержащий архив с устанавливаемыми или собираемыми файлами и заголовок с метаинформацией (например, название, версия, группа и т.п.). Различают два вида пакетов RPM:

  • Пакет с исходным кодом (имеет расширение .src.rpm). Такой пакет содержит архив (один или несколько) с исходным кодом, файл Spec (далее — просто спек) и, возможно, разнообразные патчи и дополнения. Пакет src.rpm можно использовать только для сборки двоичных пакетов, но не установки. Сборка осуществляется командой:
    rpmbuild --rebuild package...src.rpm
  • Собранный двоичный пакет (имеет расширение вида <архитектура>.rpm). В качестве архитектуры может быть i586, x86_64 или noarch. Такие пакеты можно устанавливать командой
    rpm -Uvh package...rpm

Подробную информацию по структуре RPM и сборке с помощью команды rpm можно найти в Maximum RPM].


Однако для сборки через rpmbuild возникают очевидные сложности:

  1. Необходимо вручную удовлетворить сборочные зависимости для сборки (поставить компилятор, включаемые файлы, библиотеки). При большом количестве собираемых пакетов система засоряется.
  2. Для сборки пакета нужно сформировать .src.rpm из файлов, разбросанных по разным каталогам (по умолчанию, это подкаталоги SOURCE, SPECS и подкаталоги для сборки в ~/RPM).
  3. Файлы с исходным кодом должны лежать в упакованном виде, что делает трудоёмким процесс изготовления патчей.
  4. На рабочей системе можно упустить необходимое и достаточное количество зависимостей.


Чтобы избежать этих сложностей, в ALt Linux Team было придумано две технологии:

  • Hasher для сборки в изолированном окружении. В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке). Если какой-то пакет для сборки не указан в спеке, то появится ошибка. Так обеспечивается чистота сборки. Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой сборке в Hasher.
  • Gear для сборки пакетов из репозитория Git. В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в .gear/rules. Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке.

Установка пакетов для сборки

Для сборки нам потребуются следующие компоненты:

  • Любой удобный текстовый редактор (наиболее удобными является Vim и Emacs);
  • Система управления версиями Git
  • Сборочная среда Hasher
  • Инфраструктура Gear
  • Доступ к репозиторию пакетов

Для этого настройте репозитории и установите пакеты build-environment и gear:

apt-get install build-environment gear

Будут установлены с зависимостями все необходимые пакеты для опакечивания и сборки

Настройка среды

Подготовка репозитория Git

Написание .gear/rules

Импорт исходного кода

Написание спека

Сборка в Hasher

Отправка в git.alt

Ссылки