Girar/girar-nmu — различия между версиями
м (IgorVlasenko переименовал страницу Git.alt/girar-nmu в Girar/girar-nmu: git.alt renamed to girar) |
|||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 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 ==== |
Текущая версия на 14:53, 28 февраля 2019
Upstream-ный репозиторий --- http://git.altlinux.org/people/viy/girar-nmu.git [1]; собирается в Sisyphus как пакет girar-nmu.
Содержание
- 1 Знакомство с утилитами girar-nmu
- 2 Использование girar-nmu utils на примере обновления perl
- 3 Использование girar-nmu utils на примере ручных точечных обновлений по сообщениям repocop
Знакомство с утилитами 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 [-t 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 | ![]() |