Girar/girar-nmu: различия между версиями
Нет описания правки |
|||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:git.alt/girar-nmu}} | {{DISPLAYTITLE:git.alt/girar-nmu}} | ||
[[Категория:Справочники]] | [[Категория:Справочники]] | ||
{| class="standard sortable" | |||
разработка при поддержке [http://www.fasie.ru/ Фонда содействия развитию МП НТС] в рамках НИОКР 01201066526 [[Изображение:Logo_FASIE_preview.jpg|200px|left]] | |||
|} | |||
__TOC__ | __TOC__ | ||
Версия от 19:46, 22 ноября 2011
Знакомство с утилитами 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
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
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