Сборка пакетов start: различия между версиями
Строка 162: | Строка 162: | ||
=Глоссарий= | =Глоссарий= | ||
*Gear - инструмент, позволяющий оперируя данными из git репозитория проводить сборку исходного текста в rpm пакет,тарболл или просто экспортировать результаты выполненияправил (gear-rules) в определённый каталог. | *'''Gear''' - инструмент, позволяющий оперируя данными из git репозитория проводить сборку исходного текста в rpm пакет,тарболл или просто экспортировать результаты выполненияправил (gear-rules) в определённый каталог. | ||
*Hasher - инструмент безопасной и воспроизводимой сборки пакетов. Все пакеты Sisyphus собираются с его помощью. | *'''Hasher''' - инструмент безопасной и воспроизводимой сборки пакетов. Все пакеты Sisyphus собираются с его помощью. | ||
*Исходный код - часть программного обеспечения, с которой программисты работают, чтобы изменить работу приложения или добавить новые функции. | *'''Исходный код''' - часть программного обеспечения, с которой программисты работают, чтобы изменить работу приложения или добавить новые функции. | ||
*Патч (Patch) - программное средство, используемое для устранения проблем в программном обеспечении или изменения его функциональности | *'''Патч (Patch)''' - программное средство, используемое для устранения проблем в программном обеспечении или изменения его функциональности | ||
*Спек (Spec) - файл содержащий инструкции для программы rpmbuild, необходимые для сборки пакета. | *'''Спек (Spec)''' - файл содержащий инструкции для программы rpmbuild, необходимые для сборки пакета. | ||
=Источники= | =Источники= | ||
*[[О стратегии сборки RPM пакетов]] | *[[О стратегии сборки RPM пакетов]] |
Версия от 20:29, 4 октября 2023
Возможно будет дорабатываться статья Сборка пакета с нуля
Подготовка
Генерация ключей
Для доступа к инфраструктуре ALT Linux нужны два открытых ключа SSH и GPG.
SSH
Для работы с git-репозиториями ALT нужен будет SSH-ключ, который нужно сгенерировать. Его можно создать согласно инструкции с этой страницы.
$ ssh-keygen -t ED25519 -b 4096
Публичная часть ключа — файл ~/.ssh/id_ed25519.pub.
GPG-ключ
$ gpg --gen-key $ gpg --armor --export petyaivanov@altlinux.org > gpgkey
Инструменты для сборки
В ALT Linux для сборки есть два инструмента.
- Hasher - для сборки в изолированном окружении.
В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке).
Если какой-то пакет для сборки не указан в спеке, то появится ошибка. Так обеспечивается чистота сборки.
Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой сборке в Hasher.
- Gear - для сборки пакетов из репозитория Git.
В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в .gear/rules.
Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке.
Установка инструментов для сборки
Для сборки пакетов нам понадобятся:
- Любой удобный текстовый редактор (Vim, Emacs, Mcedit);
- Система управления версиями Git
- Сборочная среда Hasher
- Инфраструктура Gear
- Утилиты RPM для сборки пакетов
- Доступ к репозиторию пакетов
Установка:
# apt-get install mcedit git hasher hasher-priv gear rpm-utils rpm-build rpm-build-licenses
Настройка Git
Настройте имя, адрес, идентификатор ключа для создаваемых вновь GIT репозиториев:
$git config --global user.name 'Petya Ivanov'
$git config --global user.email 'petyaivanov@altlinux.org'
$git config --global user.signingkey '835560D9'
Третья команда задаёт идентификатор вашего GPG-ключа для подписи:
$ gpg --list-keys | grep -B 1 'Petya Ivanov'
pub 1024D/835560D9 2023-05-15
uid Petya Ivanov (ALT Linux Team) <petyaivanov@altlinux.ru>
или
[cas@cas ~]$ gpg --list-secret-keys
------------------------------
sec 1024D/835560D9 2023-05-15
uid Petya Ivanov (ALT Linux Team) <petyaivanov@altlinux.ru>
Работа с Git
- См. Git start
Настройка Hasher
Добавление пользователя в группу
Из-под под root:
$ su - # hasher-useradd <существующий пользователь>
Например:
# hasher-useradd petr
Создание конфигурационного фала
Так же необходимо создать пользователю в домашнем каталоге файл .hasher/config:
$ mkdir ~/.hasher $ echo 'packager="Petya Ivanov <petyaivanov@altlinux.org>"' >~/.hasher/config $ echo 'USER=petr' >~/.hasher/config $ echo 'workdir="/tmp/.private/petr/"' >~/.hasher/config $ echo 'target=i586' >~/.hasher/config $ echo 'packager="`rpm --eval %packager`"' >~/.hasher/config $ echo 'apt_config="$HOME/.hasher/apt.conf"' >~/.hasher/config $ echo 'mount=/dev/pts,/proc' >~/.hasher/config
Тут смотрите на строки с командами:
- echo packager ... - тут должны быть ваше имя и email
- echo 'USER=petr' - тут должно быть ваше имя пользователя, которое вы завели в hasher-useradd
- target - тут должна быть архитектура, под которую будут собираться пакеты, i586 или x86_64
Настройка Gear
Настройка окружения RPM
Создайте файл ~/.rpmmacros (конечно, заменив ключ и имя мейнтейнера на свои):
$ echo "%packager Petya Ivanov <petyaivanov@altlinux.org>" >> ~/.rpmmacros
$ echo "%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9" >> ~/.rpmmacros
Визуально проверьте файл на соответствие ожидаемому:
$ cat ~/.rpmmacros
Что указывается в %_gpg_name?
В %_gpg_name указывается отпечаток ключа (а не краткий идентификатор, как для Git). Получить его можно командой:
$ LANG=C gpg --fingerprint 835560D9 | grep 'fingerprint =' | tr -d ' ' | cut -d= -f2
1B40E49FD40245D0472E4C5FD9528003835560D9
или
$ gpg --fingerprint 835560D9 | sed -n '/.*=/{s/.*=/%_gpg_name\t/;s/ //gp}'
%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9
Виды сборки пакетов
Создание пакета с нуля
Подготовка репозитория Git
Написание .gear/rules
Импорт исходного кода
Написание спека
Сборка в Hasher
Отправка в git.alt
Создание пакета на основе существующего
Сборка пакета из srcrpm
В ALT Linux кроме обычных пакетов есть пакеты с исходным кодом (имеют расширение *.src.rpm).
Такой пакет содержит:
- архив (один или несколько) с исходным кодом
- файл Spec (далее — просто спек)
- возможно, разнообразные патчи и дополнения.
Пакет *.src.rpm можно использовать только для сборки двоичных пакетов, но не установки.
Сборка осуществляется командой:
rpmbuild --rebuild package.src.rpm
В итоге получится готовый *.rpm-пакет который можно установить командой:
# rpm -Uvh package.rpm
Глоссарий
- Gear - инструмент, позволяющий оперируя данными из git репозитория проводить сборку исходного текста в rpm пакет,тарболл или просто экспортировать результаты выполненияправил (gear-rules) в определённый каталог.
- Hasher - инструмент безопасной и воспроизводимой сборки пакетов. Все пакеты Sisyphus собираются с его помощью.
- Исходный код - часть программного обеспечения, с которой программисты работают, чтобы изменить работу приложения или добавить новые функции.
- Патч (Patch) - программное средство, используемое для устранения проблем в программном обеспечении или изменения его функциональности
- Спек (Spec) - файл содержащий инструкции для программы rpmbuild, необходимые для сборки пакета.