Etersoft-build-utils
Etersoft-build-utils - набор утилит для сборки RPM пакетов созданный компанией Etersoft
Подготовка локальной сборочницы
Первым делом, что необходимо сделать, это установить необходимые пакеты из репозитория, для этого открываем терминал и выполняем установку.
su -
apt-get update
apt-get install etersoft-build-utils hasher giterhasher использует специальных вспомогательных пользователей и группу 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@ (одобрения обязательно должно быть два)
Boria138
Давид Султаниязов