git.alt/girar-nmu

Материал из ALT Linux Wiki
Перейти к: навигация, поиск


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

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