Girar/girar-nmu: различия между версиями
м (https не работает) |
Manowar (обсуждение | вклад) (→girar-nmu-task-add: -t — это тэг, task_id — это -a) |
||
(не показано 12 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: | {{DISPLAYTITLE:girar/girar-nmu}} | ||
[[Категория:Справочники]] | [[Категория:Справочники]] | ||
Строка 30: | Строка 30: | ||
$ girar-get-upload-method -b p5 hplip | $ girar-get-upload-method -b p5 hplip | ||
git | git | ||
В обычном режиме, если имя пакета не найдено в репозитории, выводится srpm. | |||
Код возврата 0 (TRUE) если git, иначе код возврата >0 (FALSE). | |||
С опцией -v можно узнать дополнительные подробности, в частности,встречалось | |||
ли ранее данное имя в истории репозитория. | |||
Есть отдельный режим 'missing-mode', который включается опциями <tt>-m|--missing|--show-missing</tt>. | |||
В этом режиме, если имя пакета не найдено,выводится строка 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 ==== | ==== girar-fetch-build-commit ==== | ||
Строка 56: | Строка 73: | ||
==== girar-nmu-sort-transaction ==== | ==== girar-nmu-sort-transaction ==== | ||
* https://lists.altlinux.org/pipermail/devel/2014-December/199334.html | |||
* https://lists.altlinux.org/pipermail/devel/2012-January/193169.html | |||
=== утилиты для подготовки NMU. === | === утилиты для подготовки NMU. === | ||
Эти утилиты принимают либо список путей к файлам, либо список %{NAME} src.rpm файлов. | Эти утилиты принимают либо список путей к файлам, либо список %{NAME} src.rpm файлов. | ||
==== утилиты для преобразования списков имен в файлы и наоборот ==== | |||
Утилита {{cmd|girar-nmu-helper-name2path}} позволяет преобразовать | |||
список имен в список путей к файлам. | список имен в список путей к файлам. | ||
girar-nmu-helper-name2path /path/to/files/SRPMS `cat names.txt` > files.txt | girar-nmu-helper-name2path /path/to/files/SRPMS `cat names.txt` > files.txt | ||
Обратное преобразование можно выполнить так: | Обратное преобразование можно выполнить так: | ||
rpmquery --queryformat '%{NAME}\n' -p `cat files.txt` > names.txt | rpmquery --queryformat '%{NAME}\n' -p `cat files.txt` > names.txt | ||
Эти утилиты универсальные, так как работают напрямую с rpm, минуя индексы. | |||
Поэтому же они и достаточно медленные. | |||
Если NMU проводится на пакеты в репозитории ALTLinux, то гораздо быстрее будут | |||
специализированные утилиты из [[Sisyphus/Tools/Repolist]]. | |||
==== girar-nmu-prepare ==== | ==== girar-nmu-prepare ==== | ||
Строка 126: | Строка 153: | ||
==== girar-nmu-task-add ==== | ==== girar-nmu-task-add ==== | ||
girar-nmu-task-add [- | girar-nmu-task-add [-a taskid] `cat names.txt` | ||
Добавляет пакеты, подготовленные с помощью {{cmd|girar-nmu-prepare}}, на сборку в указанный task. | Добавляет пакеты, подготовленные с помощью {{cmd|girar-nmu-prepare}}, на сборку в указанный task. | ||
Полученный task надо запустить на сборку вручную с помощью | Полученный task надо запустить на сборку вручную с помощью | ||
Строка 170: | Строка 197: | ||
==== внутренние утилиты подписывания rpm пакетов ==== | ==== внутренние утилиты подписывания rpm пакетов ==== | ||
NMU часто требуют подписывать сотни пакетов. | NMU часто требуют подписывать сотни пакетов. | ||
Для git тегов спасает gpg agent, но rpm не умеет с ним работать напрямую. | Для git тегов спасает [[Настройка gpg-agent|gpg agent]], но rpm не умеет с ним работать напрямую. | ||
Чтобы не отсохли руки вводить pass phrase, в состав girar-nmu включены обвязки | Чтобы не отсохли руки вводить pass phrase, в состав girar-nmu включены обвязки | ||
rpm-sign-gpg-agent и rpm-sign-no-passphrase. | rpm-sign-gpg-agent и rpm-sign-no-passphrase. | ||
Строка 220: | Строка 247: | ||
girar-nmu-task-add `cat names.txt` | girar-nmu-task-add `cat names.txt` | ||
ssh git.alt task run | 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 | |||
{{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}} | {{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}} |
Текущая версия от 14:41, 19 октября 2021
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
- https://lists.altlinux.org/pipermail/devel/2014-December/199334.html
- https://lists.altlinux.org/pipermail/devel/2012-January/193169.html
утилиты для подготовки 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 | ![]() |