Сборка пакета с нуля: различия между версиями
Строка 17: | Строка 17: | ||
В ALT Linux используется формат пакетов [[RPM]], который представляет собой архив, содержащий архив с устанавливаемыми или собираемыми файлами и заголовок с метаинформацией (например, название, версия, группа и т.п.). Различают два вида пакетов RPM: | В ALT Linux используется формат пакетов [[RPM]], который представляет собой архив, содержащий архив с устанавливаемыми или собираемыми файлами и заголовок с метаинформацией (например, название, версия, группа и т.п.). Различают два вида пакетов RPM: | ||
* Пакет с исходным кодом (имеет расширение ''.src.rpm''). Такой пакет содержит архив (один или несколько) с исходным кодом, файл [[Spec]] и, возможно, разнообразные патчи и дополнения. Пакет src.rpm можно использовать только для сборки двоичных пакетов, но не установки. Сборка осуществляется командой: | * Пакет с исходным кодом (имеет расширение ''.src.rpm''). Такой пакет содержит архив (один или несколько) с исходным кодом, файл [[Spec]] (далее — просто '''спек''') и, возможно, разнообразные патчи и дополнения. Пакет src.rpm можно использовать только для сборки двоичных пакетов, но не установки. Сборка осуществляется командой:<pre>rpmbuild --rebuild package...src.rpm</pre> | ||
* Собранный двоичный пакет (имеет расширение вида ''<архитектура>.rpm''). В качестве архитектуры может быть i586, x86_64 или noarch. Такие пакеты можно устанавливать командой <pre>rpm -Uvh package...rpm</pre> | |||
Подробную информацию по структуре RPM и сборке с помощью команды rpm можно найти в [http://www.rpm.org/max-rpm/ Maximum RPM]]. | |||
Однако для сборки через rpmbuild возникают очевидные сложности: | |||
# Необходимо вручную удовлетворить сборочные зависимости для сборки (поставить компилятор, включаемые файлы, библиотеки). При большом количестве собираемых пакетов система засоряется. | |||
# Для сборки пакета нужно сформировать .src.rpm из файлов, разбросанных по разным каталогам (по умолчанию, это подкаталоги SOURCE, SPECS и подкаталоги для сборки в ~/RPM). | |||
# Файлы с исходным кодом должны лежать в упакованном виде, что делает трудоёмким процесс изготовления патчей. | |||
# На рабочей системе можно упустить необходимое и достаточное количество зависимостей. | |||
Чтобы избежать этих сложностей, в ALt Linux Team было придумано две технологии: | |||
* [[Hasher]] для сборки в изолированном окружении. В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке). Если какой-то пакет для сборки не указан в спеке, то появится ошибка. Так обеспечивается чистота сборки. Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой сборке в Hasher. | |||
* [[Gear]] для сборки пакетов из репозитория Git. В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в [http://docs.altlinux.org/manpages/gear-rules.5.html .gear/rules]. Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке. | |||
=== Установка пакетов для сборки === | === Установка пакетов для сборки === |
Версия от 14:53, 18 февраля 2011
Данное руководство покажет, как правильно собрать пакет RPM в Sisyphus с нуля в инфраструктуре Gear и git.alt, имея только исходный код пакета, и права мейнтейнера на git.alt. В качестве примера опакетим Qt Mobility, чтобы закрыть запрос на сборку в багзилле: https://bugzilla.altlinux.org/25111.
Подготовка
Для сборки пакетов подразумеваются следующие начальные условия:
- У вас установлен дистрибутив ALT Linux;
- Есть желание собрать пакет правильно, а не для единичного случая;
- Вы носите гордое звание «мейнтейнер 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 возникают очевидные сложности:
- Необходимо вручную удовлетворить сборочные зависимости для сборки (поставить компилятор, включаемые файлы, библиотеки). При большом количестве собираемых пакетов система засоряется.
- Для сборки пакета нужно сформировать .src.rpm из файлов, разбросанных по разным каталогам (по умолчанию, это подкаталоги SOURCE, SPECS и подкаталоги для сборки в ~/RPM).
- Файлы с исходным кодом должны лежать в упакованном виде, что делает трудоёмким процесс изготовления патчей.
- На рабочей системе можно упустить необходимое и достаточное количество зависимостей.
Чтобы избежать этих сложностей, в ALt Linux Team было придумано две технологии:
- Hasher для сборки в изолированном окружении. В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке). Если какой-то пакет для сборки не указан в спеке, то появится ошибка. Так обеспечивается чистота сборки. Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой сборке в Hasher.
- Gear для сборки пакетов из репозитория Git. В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в .gear/rules. Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке.
Установка пакетов для сборки
Для сборки нам потребуются следующие компоненты:
- Любой удобный текстовый редактор (наиболее удобными является Vim и Emacs);
- Система управления версиями Git
- Сборочная среда Hasher
- Инфраструктура Gear
- Доступ к репозиторию пакетов