Etersoft-build-utils
Etersoft-build-utils - набор утилит для сборки RPM пакетов созданный компанией Etersoft
Подготовка локальной сборочницы
Первым делом, что необходимо сделать, это установить необходимые пакеты из репозитория, для этого открываем терминал и выполняем установку.
su -
apt-get update
apt-get install etersoft-build-utils hasher giter
hasher использует специальных вспомогательных пользователей и группу hashman для своей работы, поэтому каждого пользователя, желающего использовать hasher, перед началом работы нужно зарегистрировать командой
su -
hasher-useradd USER_NAME
exit
Информация
Поскольку hasher-useradd добавляет пользователя в группы, пользователю необходимо перелогиниться перед началом работы с hasher
Далее настраиваем файл ~/.rpmmacros по следующему образцу
%_topdir %homedir/RPM
%_tmppath %homedir/tmp
%_gpg_path %homedir/.gnupg
%_gpg_name First and last name <example@altlinux.org>
%packager First and last name <example@altlinux.org>
Информация
Почту оставляем именно altlinux.org даже если вы ещё не дошли до join 2.3
Для сборки некоторых пакетов hasher может понадобиться доступ к /proc чтобы смонтировать его добавьте в файл /etc/hasher-priv/system строчку
allowed_mountpoints=/proc
На этом настройка hasher завершена, если вы дошли до join 2.3 вам также нужно настроить файл ~/.ssh/config, приведя его к подобному виду
# Гитовница
Host gitery
HostName gitery.altlinux.org
User alt_example
Port 222
IdentityFile ~/.ssh/id_ed25519
Если дошли до 3.6 то к этому файлу нужно добавить
# Сборочница
Host gyle
HostName gyle.altlinux.org
User alt_example
Port 222
IdentityFile ~/.ssh/id_ed25519
Информация
В поле User обязательно оставляем alt_
Сборка пакетов с использованием утилит из Etersoft-build-utils
Если пакет который вы желаете собрать есть в стороннем репозитории (Fedora, Rosa и так далее) вы можете попробовать скачать оттуда src.rpm с помощью rpmgp
Например команда:
rpmgp -a distrobox
Выведет это:
List for fedora-rawhide-e:
d/distrobox-1.7.2.1-1.fc41.src.rpm
List for rosa-fresh.cr:
distrobox-1.6.0.1-1.src.rpm
Чтобы скачать src.rpm нужно ввести команду
rpmgp -a -d название пакета
В моём случае это будет
rpmgp -a -d distrobox-1.7.2.1-1.fc41.src.rpm
Далее после того как вы вытащили spec из src.rpm нужно создать git репозиторий командой
git init
После нужно очистить spec командой
rpmcs
Эта команда попытается исправить все зависимости и макросы согласно правилам сборки пакетов в ALT Linux, а также создаст запись в ченжлоге если её не будет
Внимание
Команда rpmcs может иногда ошибаться, так что внимательно следите за тем как изменился spec
После того как наш spec готов нужно скачать исходники используя команду
rpmgs -f
Внимание
Команда rpmgs сама создаёт changelog вида
%changelog
* Tue May 28 2024 First and last name <example@altlinux.org> 1.7.2.1-alt1
- new version (1.7.2.1) with rpmgs script
При join 4.2 рецензенту может не понравится запись "with rpmgs script" поэтому удаляем её
Теперь когда готов spec,gear и имеются исходники осталось только собрать пакет через
rpmbsh -l
Если во время сборки произошла ошибка и вам понадобилась пересборка используйте
rpmbsh -e
Эта команда использует уже созданный chroot не создавая новый что экономит достаточно много времени
Чтобы протестировать собранный пакет в hasher нужно написать
rpmbsh -i
Эта команда установит пакет в hasher где вы можете его тестировать
Отправка пакетов на сборочницу
Если вы дошли до join 3.6 и ваши gpg ключи присутствуют в пакете alt-gpgkeys вы можете отправлять пакеты в сборочницу командой
rpmbs -u
Эта команда сама создаст репозиторий https://git.altlinux.org, а также сама создаст тэг версии и отправит всё на сборку
Смотреть за процессом сборки можно через сайт https://packages.altlinux.org введя там номер задания, или же через команду
gita ls -w 10
Эта команда выведет список всех ваших текущих сборок обновляя его раз в десять секунд
Если во время сборки произошла ошибка вам нужно её исправить, закоммитить и запустить сборку заново командами
git add .
git commit --amend --no-edit
rpmbs -a номер_задания-F
Информация
git commit --amend --no-edit
Обновит ваш нынешний коммит с учётом изменений не меняя при этом само название коммита, если же вам нужно изменить названия коммита используйте просто
git commit --amend
Если вы ещё не закончили join вам нужно получить approve от своего ментора чтобы пакет попал в Сизиф до этого его можно будет установить только через задание
su -
apt-repo test номер_задания
epm -i номер_задания
После того как вы получите approve на свою таску нужно будет написать команду
gita commit номер_задания
Эта команда ещё раз пересоберём пакет на сборочнице, и если всё пройдет удачно пакет попадёт в Сизиф при следующем обновлении репозитория (примерно три часа ночи по МСК)
NMU (Non-Maintainer Upload)
Прежде чем делать NMU нужно убедится в том что в ACL листе есть @everybody, что указывает на то что таску на пакет может сделать любой
Когда мы убедимся что NMU делать можно, нужно получить исходники пакета из Сизифа командой
rpmgp -g название_пакета
После делаем нужные изменения и добавляем к релизу пакета .1, например если релиз был alt1.2 то его нужно заменить на alt1.2.1
Поскольку мы не обновили версию, а только релиз пакета rpmgs для создания ченжлога мы использовать не можем, для создания ченжлога воспользуемся стандартной командой
add_changelog путь_к_spec_файлу
Информация
Так же можно запустить сборку с помощью
rpmbsh
Он предложит дописать ченжлог
Главное правило при написание ченжлога для NNU добавить NMU: в начале, например
%changelog
* Wed Jun 19 2024 First and last name <example@altlinux.org> 1.1.0-alt1.1
- NMU: example changelog
Информация
Ещё небольшое отступление, не используйте rpmcs на чужих спеках, в NMU не должно быть ничего что не касается NMU, а rpmcs может например изменить макросы что не очень хорошо
После того как мы сделали изменения и всё проверили можно отправлять NMU через
rpmbs -u
Создание задания в разные бранчи
Сначала нужно создать задание
gita new бранч
Потом добавить к заданию пакет
cd директория с пакетом
rpmbs -A
Потом нужно закоммитить задания
gita commit номер_задания -m "Обоснование зачем этот пакет нужен в бранче (CVE, баг и так далее)"
Ждём одобрение членами группы maint@ и tester@ (одобрения обязательно должно быть два)