girar/girar-nmu

Материал из ALT Linux Wiki
< Girar
Версия от 17:41, 19 октября 2021; Manowar (обсуждение | вклад) (→‎girar-nmu-task-add: -t — это тэг, task_id — это -a)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)


Upstream-ный репозиторий --- http://git.altlinux.org/people/viy/girar-nmu.git [1]; собирается в Sisyphus как пакет girar-nmu.


Знакомство с утилитами girar-nmu

утилиты предназначены для проведения NMU.

утилиты общего назначения.

Опции:

  • -b rpm репозиторий, например, -b 5.1. По умолчанию sisyphus.
  • -d локальная ветвь git. Позволяет менять имя используемой локальной ветви git

для тех команд, где это имеет смысл.

girar-get-upload-method <name>

Позволяет быстро узнать, как нужно заливать указанный пакет: через src.rpm или через git tag в git/gear репозитории.

Примеры:

$ girar-get-upload-method xmms       
srpm
$ girar-get-upload-method -b p5 hplip
git

В обычном режиме, если имя пакета не найдено в репозитории, выводится srpm. Код возврата 0 (TRUE) если git, иначе код возврата >0 (FALSE). С опцией -v можно узнать дополнительные подробности, в частности,встречалось ли ранее данное имя в истории репозитория.

Есть отдельный режим 'missing-mode', который включается опциями -m|--missing|--show-missing. В этом режиме, если имя пакета не найдено,выводится строка missing. Код возврата 0 (TRUE) если git, 2 если srpm, 4 если missing.


Пример:

$ girar-get-upload-method --missing python
git
$ girar-get-upload-method --missing python14
missing

girar-fetch-build-commit

Удобна, когда на ваш пакет сделан NMU и чужой NMU commit нужно втянуть в ваш репозиторий. По умолчанию, за имя локальной ветки берется имя rpm репозитория (sisyphus или значение опции -b).

Пример:

hplip.git $ girar-fetch-build-commit 
From git://git.altlinux.org/gears/h/hplip
  1359385..1970106  sisyphus   -> sisyphus

girar-clone-build-commit <name>

Клонирует репозиторий для name с git://git.altlinux.org/gears/, Устанавливает локальную ветвь git (по умолчанию master) на последний build commit.

girar-print-build-commit <name>

Удобна для работы совместно с командой git.alt check-git-inheritance.

girar-task check-git-inheritance <task_id> <subtask_number> disable `girar-print-build-commit <name>`

утилиты для вычисления списка файлов на NMU и порядка сборки.

girar-nmu-sort-transaction

утилиты для подготовки NMU.

Эти утилиты принимают либо список путей к файлам, либо список %{NAME} src.rpm файлов.

утилиты для преобразования списков имен в файлы и наоборот

Утилита girar-nmu-helper-name2path позволяет преобразовать список имен в список путей к файлам.

girar-nmu-helper-name2path /path/to/files/SRPMS `cat names.txt` > files.txt

Обратное преобразование можно выполнить так:

rpmquery --queryformat '%{NAME}\n' -p `cat files.txt` > names.txt

Эти утилиты универсальные, так как работают напрямую с rpm, минуя индексы. Поэтому же они и достаточно медленные.

Если NMU проводится на пакеты в репозитории ALTLinux, то гораздо быстрее будут специализированные утилиты из Sisyphus/Tools/Repolist.

girar-nmu-prepare

girar-nmu-prepare является основной утилитой пакета girar-nmu. Её простейший вызов выглядит так:

girar-nmu-prepare `cat files.txt`

Если же удобнее работать с именами, то необходимо указать путь к src.rpms опцией --srpmdir:

girar-nmu-prepare --srpmdir /path/to/SRPMS `cat names.txt`

Кроме ключей, общих с другими утилитами girar-nmu, girar-nmu-prepare поддерживает ряд ключей утилиты srpmnmu. Эта утилита еще в разработке, поэтому не все ключи документированы. Поддерживаемые ключи:

  • --changelog '- message'
  • --hook /path/to/hook.

Пример

girar-nmu-prepare --changelog '- rebuild with new perl' --hook ./perl_51x_fixes.pl --srpmdir /path/to/SRPMS `cat names.txt`

Опцию --hook можно повторять несколько раз. Эта опция позволяет подгрузить программу на perl, которая выполнит над spec файлом дополнительные преобразования, такие как переименование макросов, изменение и добавление Requires и BuildRequires и т. д. Эти программы используют встроенный язык манипуляций спек-файлами, введение в который находится на странице Packaging Automation/Embedded Language. По вопросам написания такой программы обращайтесь к viy@.

Для каждого src.rpm файла (или его name) указанного в качестве аргумента, girar-nmu-prepare определяет тип заливки, srpm или git tag; клонирует при необходимости git репозиторий пакета; вызывает утилиту srpmnmu над src.rpm файлом пакета или SPEC файлом в git репозитории пакета. Результат складируется как OUT.gits/name.git для пакетов, собираемых по git тегу, либо OUT.SRPMS/name/name-version-nmurelease.src.rpm для пакетов, собираемых из src.rpm файлов.

Полученные пакеты можно пересобрать локально с помощью girar-nmu-local-build и отправить в сборочницу с помощью girar-nmu-task-*.

girar-nmu-local-build

Утилита позволяет локально проверить на собираемость полученные NMU пакеты.

girar-nmu-local-build работает с деревом каталогов, созданным girar-nmu-prepare, поэтому ее надо либо запускать в том же каталоге, что и girar-nmu-prepare, либо явно указывать нужный путь в опциях -S и -G.

В примерах предполагается, что у вас уже настроен hasher, например,

$ cat ~/.hasher/config
workdir=/tmp/hasher
packager="`rpm --eval %packager`"
known_mountpoints=/proc

иначе опции hsh придется указывать после --, см. man girar-nmu-local-build.

Для разных типов транзакций утилиту надо вызывать по-разному. Если все пакеты будут собираться в строгой очередности в одном task, то нужна опция hasher'а --with-stuff и вызов будет иметь вид

girar-nmu-local-build `cat names.txt` -- hsh --with-stuff --apt-config=/etc/apt/apt.conf.SS

Если же пакеты будут собираться независимо, в разных task, то --with-stuff не нужна, и можно добавить опцию -f, чтобы не останавливать пересборку из-за несобравшихся пакетов. В этом случае вызов имеет вид

girar-nmu-local-build -f `cat names.txt` -- hsh --apt-config=/etc/apt/apt.conf.SS

или, если настроен ~/.hasher/config, то можно просто

girar-nmu-local-build -f `cat names.txt`

По результатам тестовой пересборки в дерево, созданное girar-nmu-prepare, можно вносить изменения: добавлять коммиты в git репозитарии вручную и замещать сгенерированные src.rpm исправленными.

утилиты для заливки NMU пакетов на сборку.

Эти утилиты работают с деревом каталогов, созданным girar-nmu-prepare, поэтому их надо либо запускать в том же каталоге, что и girar-nmu-prepare, либо явно указывать нужный путь в опциях -S и -G.

girar-nmu-task-add

girar-nmu-task-add [-a taskid] `cat names.txt`

Добавляет пакеты, подготовленные с помощью girar-nmu-prepare, на сборку в указанный task. Полученный task надо запустить на сборку вручную с помощью

ssh git.alt task run

girar-nmu-task-for-each

girar-nmu-task-for-each `cat names.txt`

В отличие от girar-nmu-task-add запускает на сборку пакеты автоматически каждый пакет в отдельной task.

Основные опции:

  • -t task ID.
  • -H git.alt alias. По умолчанию, git.alt.
  • -n | -g | -r. Опции подписывания rpm пакетов. По умолчанию, -g (использовать gpg agent).
-g) использовать gpg agent (внутренняя обвязка rpm-sign-gpg-agent)
-n) если нет gpg agent, но ключ без passphrase - (внутренняя обвязка rpm-sign-no-passphrase)
-r) использовать обычный rpm --sign, требует постоянного ввода ключа с клавиатуры.
  • -p git repository prefix. По умолчанию, 00-tmp-.

особенности сборки из git

00-tmp- -- это префикс по умолчанию, (можно поменять опцией -p) который добавляется перед именем временного git репозитория, из которого будет производиться сборка. Этот временный репозиторий создается прямо перед добавлением пакета в task и сразу же удаляется.

Поверьте, вам этот временный репозиторий не нужен. Если сборка удалась, то изменения вы втянете, запустив girar-fetch-build-commit или, при желании, руками из git://git.altlinux.org/gears/${name:0:1}/${name}.git refs/heads/sisyphus; если же сборка не удалась, то они и не нужны.

Почему удалять?

  • иначе у майнтайнера на 100-м -- 200-м пакете кончится дисковая квота на git.alt.
  • иначе каталог майнтайнера на git.alt, который делал nmu, засоряется машинным генератом.

Почему префикс?

  • чтобы случайно не испортить на git.alt рабочий репозиторий.
  • чтобы на git.alt легко отличать, где рабочие репозитории,а где машинный генерат.

внутренние утилиты подписывания rpm пакетов

NMU часто требуют подписывать сотни пакетов. Для git тегов спасает gpg agent, но rpm не умеет с ним работать напрямую. Чтобы не отсохли руки вводить pass phrase, в состав girar-nmu включены обвязки rpm-sign-gpg-agent и rpm-sign-no-passphrase. Эти обвязки вызываются утилитами автоматически и наружу не видны, кроме как в виде опций, но их можно использовать и как самостоятельные приложения.

Использование:

rpm-sign-gpg-agent <--addsign | --resign> *.src.rpm

rpm-sign-gpg-agent заставляет rpm использовать gpg agent для подписи. rpm-sign-no-passphrase удобен для удаленной работы. Когда вы заходите на удаленную песочницу, ваш gpg agent остается на локальной машине. Если ключ с пассфразой, то никуда не деться, надо настраивать локальный gpg agent. Но если пассфразы нет, gpg agent не нужен. Но rpm все равно попросит нажать Enter. так вот, rpm-sign-no-passphrase нажмет Enter за вас.

внутренние утилиты для заливки srpm на сборку.

Утилиты girar-nmu-helper-* изначально были предназначены для внутреннего употребления и продвинутых пользователей. Однако многими из них можно пользоваться и независимо от girar-nmu-prepare. Приведенные ниже утилиты позволяют полностью автоматизировать отправку srpm на сборку в incoming.

Добавить указанные src.rpm пакеты в task:

girar-nmu-helper-task-add-srpm *.src.rpm

Собрать указанные src.rpm пакеты для 5.1 каждый в своей собственной task:

girar-nmu-helper-task-for-each-srpm -b 5.1 *.src.rpm

названия утилит достаточно длинные, для регулярного использования советую сразу объявить для них alias.

Использование girar-nmu utils на примере обновления perl

План следующий: I. Получаем список пакетов, сортируем транзакцию. II. Готовим новые версии. III. Добавляем в task.

girar-nmu-sort-transaction --mark '^libperl\.so\.5\.' \
/Sisyphus/files/SRPMS /Sisyphus/files/noarch/RPMS /Sisyphus/files/i586/RPMS | \
grep -v '^perl$' > names.txt
girar-nmu-helper-name2path /Sisyphus/files/SRPMS `cat names.txt` > files.txt
girar-nmu-prepare --changelog '- rebuild with new perl' --hook ./perl_510_upgrade.pl `cat files.txt`
girar-nmu-local-build `cat names.txt` -- hsh --with-stuff
ssh git.alt task new
ssh git.alt task add repo perl.git <tag name>
girar-nmu-task-add `cat names.txt`
ssh git.alt task run

Использование girar-nmu utils на примере ручных точечных обновлений по сообщениям repocop

пример 1

Есть python-module-pybox2d-2.3.2-alt1.diff от repocop.

Сначала узнаем, как заливался пакет. Для этого есть команда

$ girar-get-upload-method python-module-pybox2d
srpm
$ rpm -i /var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS/python-module-pybox2d-2.3.2-alt1.src.rpm
$ add_changelog pybox2d.spec
$ hashertarbuild -bs pybox2d.spec
Записан: /home/igor/src/RPM/SRPMS/python-module-pybox2d-2.3.2-alt1.1.src.rpm

$ girar-nmu-helper-task-for-each-srpm ../SRPMS/python-module-pybox2d-2.3.2-alt1.1.src.rpm spawn rpm --define __gpg_check_password_cmd /bin/true --define __gpg_sign_cmd %{__gpg} --batch --no-verbose --no-armor --use-agent --no-secmem-warning -u '%{_gpg_name}' -sbo %{__signature_filename} %{__plaintext_filename} --resign ../SRPMS/python-module-pybox2d-2.3.2-alt1.1.src.rpm Введите ключевую фразу: Ключевая фраза принята. ../SRPMS/python-module-pybox2d-2.3.2-alt1.1.src.rpm:

Необходима фраза-пароль для доступа к секретному ключу пользователя: [...] sending incremental file list python-module-pybox2d-2.3.2-alt1.1.src.rpm [...] new task #194665: owner=viy repo=sisyphus task #194665: added #100: build srpm python-module-pybox2d-2.3.2-alt1.1.src.rpm task #194665: try #1 is AWAITING, result will be emailed to viy@altlinux.org


$ girar-get-upload-method wesnoth git

cd wesnoth.git $ wget https://downloads.sourceforge.net/project/wesnoth/wesnoth/wesnoth-1.13.10/wesnoth-1.13.10.tar.bz2

$ gear-update ./wesnoth-1.13.10.tar.bz2 wesnoth


Разработано при поддержке Фонда содействия развитию МП НТС в рамках НИОКР 01201066526 rigft