Обновление пакета в Sisyphus на примере tora

Имея учетку на altlinux.org, можно предлагать изменения в пакеты репозитория Sisyphus. Статья описывает, как предложить обновление пакета до последнего коммита из апстримного репозитория

Настройка

Установка нужных пакетов

sudo apt-get install gear hasher git-core

Настроить подписание тегов git через gpg2, указать свой ящик и имя для создания коммитов. Почта и имя должны совпадать с теми, которые указаны в ключе (список закрытых ключей: gpg2 -K)

git config --global gpg.program gpg2
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Добавить своего пользователя (в моем случае - keremet) в группы, необходимые для запуска hasher

sudo hasher-useradd keremet

Перелогиниться. В /etc/hasher-priv/system добавить строчку:

allowed_mountpoints=/proc

В файл ~/.ssh/config добавить строки. Пользователя указать своего. Доступ к этим сервера осуществляется по ключу. Убедиться, что ваш ключ добавлен на них.

# Гитовница
Host git.alt
    HostName gitery.altlinux.org
    User git_keremet
    Port 222
# Сборочница
Host girar
    HostName gyle.altlinux.org
    User git_keremet
    Port 222

важно

cp /home/keremet/.ssh/id_rsa /home/keremet/.ssh/id_ed25519

После настройки

Создать баг в https://bugzilla.altlinux.org/, чтобы была понятна причина обновления. Примеры https://bugzilla.altlinux.org/show_bug.cgi?id=39894, https://bugzilla.altlinux.org/show_bug.cgi?id=39434

Если есть старая копия репозитория в учетке, то удалить эту копию

ssh git.alt rm-db /people/keremet/packages/tora.git

Клонировать репозиторий в свою учетку.

[keremet@comp-core-i5-8250u-0f4293 tora]$ ssh git.alt clone /gears/t/tora.git
Cloning into bare repository 'packages/tora.git'...
done.
gitery-clone: /people/keremet/packages/tora.git
[keremet@comp-core-i5-8250u-0f4293 tora]$

Клонировать себе на комп. Параметром git clone будет то, что написано после «gitery-clone:» с дописанным спереди «git:git.altlinux.org». git clone git:git.altlinux.org/people/keremet/packages/tora.git

cd tora

Перейти на последний коммит, скачанный из апстрима. При данном обновлении он был обозначен тегом v3.2-292-g1a03ec3d.

git checkout v3.2-292-g1a03ec3d

Удалить самопоставленный тег, чтобы git describe отсчитывал от апстримного тега. Удаление произойдет только в локальном репозитории.

git tag -d v3.2-292-g1a03ec3d Скачать последние коммиты из апстрима и замержить их

git checkout -b master
git pull https://github.com/tora-tool/tora
git tag -a "`git describe`" -m "`git describe`"
git checkout sisyphus
git merge master
git branch -D master

Важно: релизный коммит и коммит изменениями должны быть разными. Пример:

http://git.altlinux.org/people/nickel/packages/?p=grub.git;a=commitdiff;h=9b12800710bb5f07774becceb28bb99f9167486c
http://git.altlinux.org/people/nickel/packages/?p=grub.git;a=commitdiff;h=b4b579adeda4287a3474fddf8d958b03df1ffb6a

В .gear/tora.spec обновить строку Release, добавить запись в %changelog. В описании изменений указать например «(closes: 39894)», где число — номер бага В .gear/rules исправить тег в “tar:” Обновить список нужных для сборки тегов в .gear/tags командой:

gear-store-tags -acv

Удалить отдельный файл тега из .gear/tags/list, исправить хэш нового тега на хэш коммита. Создать релизный коммит и тег.

git add -u
gear-commit
gear-create-tag

Выполнить локальную сборку, установку пакета и его проверку

mkdir ~/hasher_tora
hsh --initroot-only ~/hasher_tora
gear --commit --hasher -- hsh-rebuild --no-sisyphus-check=packager,gpg,changelog ~/hasher_tora
sudo apt-get remove tora
sudo rpm -i /home/keremet/hasher_tora/repo/x86_64/RPMS.hasher/tora-3.2-alt8.gitf31e755f.x86_64.rpm

Отправить изменений в свой репозиторий на сервере

git remote add git.alt git.alt:packages/tora
git push git.alt sisyphus --follow-tags

Собрать пакет на сервере

[keremet@comp-core-i5-8250u-0f4293 tora]$ ssh girar build $(basename $(pwd)) $(git describe)
new task #269170: owner=keremet repo=sisyphus
fetching tag "3.2-alt8.gitf31e755f" from /people/keremet/packages/tora.git... done
generating pkg.tar for tora.git tag "3.2-alt8.gitf31e755f"... done
task #269170: added #100: build tag "3.2-alt8.gitf31e755f" from /people/keremet/packages/tora.git
task #269170: try #1 is AWAITING, result will be emailed to keremet@altlinux.org
[keremet@comp-core-i5-8250u-0f4293 tora]$ 

Задача на сборку появится тут http://git.altlinux.org/tasks/269170/

После того как сборка выполнилась успешно, передать на проверку

ssh girar task run --commit 269170

Кому передать на проверку можно посмотреть так

ssh girar acl sisyphus tora show

или по ссылке http://git.altlinux.org/acl/list.packages.sisyphus

После получения одобрения от проверяющего повторить предыдущую команду.

"%filter_from_requires /^python3(bpy)/d" можно заменить на 
"%add_python3_req_skip bpy»

Полезные команды:

gear-commit --amend
git tag -d tag_name
git push git.alt --delete tag_name
ssh girar task ls
ssh girar task delsub 276809 300
ssh girar task add 281289 repo $(basename $(pwd)) $(git describe)
ssh girar task run 276809
-f - перетрет старые тэги:
gear-create-tag -f
git push git.alt sisyphus 2021.2-alt1 -f
ssh girar task rm 276797
git describe --match v2021.2
ssh girar build -b p10 --commit -m new_subpackage copy vlc-plugin-pause-click

Отладка в сборочном chroot Для отладки сборки иногда полезно запустить shell в сборочном chroot. Для этого используется утилита hsh-shell(1):

hsh-shell

Можно запустить программу и с правами псевдо-root:

hsh-shell --rooter

Для контроля за содержимым сборочного chroot'а используются опции hsh: –cleanup-only, –eager-cleanup, –lazy-cleanup и соответствующие настройки вроде lazy_cleanup=1 в ~/.hasher/config.

Для запуска произвольных программ в сборочном чруте существует более низкоуровневая утилита hsh-run(1).