Сборка пакетов start: различия между версиями

Материал из ALT Linux Wiki
Строка 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

Возможно будет дорабатываться статья Сборка пакета с нуля

Примечание: В примере будет участник Petya Ivanov с email - petyaivanov@altlinux.org


Подготовка

Генерация ключей

Примечание: Основная статья: Работа с ключами разработчика


Для доступа к инфраструктуре 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

Настройка 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

Примечание: Для сборки из .src.rpm нужно установить пакеты rpm-utils, rpm-build и rpm-build-licenses

В 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, необходимые для сборки пакета.

Источники