Girar/girar-nmu: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
(→‎girar-nmu-task-add: -t — это тэг, task_id — это -a)
 
(не показаны 53 промежуточные версии 3 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:git.alt/girar-nmu}}
{{DISPLAYTITLE:girar/girar-nmu}}
[[Категория:Справочники]]
[[Категория:Справочники]]
Upstream-ный репозиторий --- http://git.altlinux.org/people/viy/girar-nmu.git [https://lists.altlinux.org/pipermail/devel/2015-November/200351.html]; собирается в [[Sisyphus]] как пакет {{pkg|girar-nmu}}.


__TOC__
__TOC__


== утилиты общего назначения. ==
== Знакомство с утилитами girar-nmu ==
 
утилиты предназначены для проведения NMU.
 
=== утилиты общего назначения. ===
 
Опции:
* {{cmd|-b rpm репозиторий}}, например, {{cmd|-b 5.1}}. По умолчанию {{cmd|sisyphus}}.
* {{cmd|-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', который включается опциями <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 ====
 
Удобна, когда на ваш пакет сделан 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 файлов.
 
==== утилиты для преобразования списков имен в файлы и наоборот ====
 
Утилита {{cmd|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 ====
 
{{cmd|girar-nmu-prepare}} является основной утилитой пакета girar-nmu. Её простейший вызов выглядит так:
girar-nmu-prepare `cat files.txt`
Если же удобнее работать с именами, то необходимо указать путь к src.rpms опцией {{cmd|--srpmdir}}:
girar-nmu-prepare --srpmdir /path/to/SRPMS `cat names.txt`
Кроме ключей, общих с другими утилитами girar-nmu, {{cmd|girar-nmu-prepare}} поддерживает ряд ключей утилиты {{cmd|srpmnmu}}.
Эта утилита еще в разработке, поэтому не все ключи документированы. Поддерживаемые ключи:
* {{cmd|--changelog '- message'}}
* {{cmd|--hook /path/to/hook}}.
Пример
girar-nmu-prepare --changelog '- rebuild with new perl' --hook ./perl_51x_fixes.pl --srpmdir /path/to/SRPMS `cat names.txt`
Опцию {{cmd|--hook}} можно повторять несколько раз. Эта опция позволяет подгрузить программу на perl, которая выполнит над spec файлом
дополнительные преобразования, такие как переименование макросов, изменение и добавление Requires и BuildRequires и т. д.
Эти программы используют встроенный язык манипуляций спек-файлами, введение в который находится на странице [[Packaging Automation/Embedded Language]]. По вопросам написания такой программы обращайтесь к viy@.
 
Для каждого src.rpm файла (или его name) указанного в качестве аргумента, {{cmd|girar-nmu-prepare}} определяет тип заливки,
srpm или git tag; клонирует при необходимости git репозиторий пакета; вызывает утилиту {{cmd|srpmnmu}} над src.rpm файлом пакета
или SPEC файлом в git репозитории пакета. Результат складируется
как {{path|OUT.gits/name.git}} для пакетов, собираемых по git тегу, либо {{path|OUT.SRPMS/name/name-version-nmurelease.src.rpm}}
для пакетов, собираемых из src.rpm файлов.
 
Полученные пакеты можно пересобрать локально с помощью {{cmd|girar-nmu-local-build}} и отправить в сборочницу с помощью
{{cmd|girar-nmu-task-*}}.
 
==== girar-nmu-local-build ====
Утилита позволяет локально проверить на собираемость полученные NMU пакеты.
 
{{cmd|girar-nmu-local-build}} работает с деревом каталогов, созданным {{cmd|girar-nmu-prepare}}, поэтому ее надо
либо запускать в том же каталоге, что и {{cmd|girar-nmu-prepare}}, либо явно указывать нужный путь в опциях {{cmd|-S}} и {{cmd|-G}}.
 
В примерах предполагается, что у вас уже настроен hasher, например,
$ cat ~/.hasher/config
workdir=/tmp/hasher
packager="`rpm --eval %packager`"
known_mountpoints=/proc
иначе опции hsh придется указывать после {{cmd|--}}, см. {{cmd|man girar-nmu-local-build}}.
 
Для разных типов транзакций утилиту надо вызывать по-разному.
Если все пакеты будут собираться в строгой очередности в одном task, то
нужна опция hasher'а {{cmd|--with-stuff}} и вызов будет иметь вид
girar-nmu-local-build `cat names.txt` -- hsh --with-stuff --apt-config=/etc/apt/apt.conf.SS
Если же пакеты будут собираться независимо, в разных task, то {{cmd|--with-stuff}} не нужна,
и можно добавить опцию {{cmd|-f}}, чтобы не останавливать пересборку из-за несобравшихся пакетов.
В этом случае вызов имеет вид
girar-nmu-local-build -f `cat names.txt` -- hsh --apt-config=/etc/apt/apt.conf.SS
или, если настроен {{path|~/.hasher/config}}, то можно просто
girar-nmu-local-build -f `cat names.txt`
 
По результатам тестовой пересборки в дерево, созданное {{cmd|girar-nmu-prepare}}, можно вносить изменения:
добавлять коммиты в git репозитарии вручную и замещать сгенерированные src.rpm исправленными.
 
=== утилиты для заливки NMU пакетов на сборку. ===
 
Эти утилиты работают с деревом каталогов, созданным {{cmd|girar-nmu-prepare}}, поэтому их надо
либо запускать в том же каталоге, что и {{cmd|girar-nmu-prepare}}, либо явно указывать нужный путь в опциях {{cmd|-S}} и {{cmd|-G}}.
 
==== girar-nmu-task-add ====
 
girar-nmu-task-add [-a taskid] `cat names.txt`
Добавляет пакеты, подготовленные с помощью {{cmd|girar-nmu-prepare}}, на сборку в указанный task.
Полученный task надо запустить на сборку вручную с помощью
ssh git.alt task run
 
==== girar-nmu-task-for-each ====
girar-nmu-task-for-each `cat names.txt`
В отличие от {{cmd|girar-nmu-task-add}}
запускает на сборку пакеты автоматически каждый пакет в отдельной task.
 
==== Основные опции: ====
* {{cmd|-t task ID}}.
* {{cmd|-H git.alt alias}}. По умолчанию, {{cmd|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, требует постоянного ввода ключа с клавиатуры.
 
* {{cmd|-p git repository prefix}}. По умолчанию, {{cmd|00-tmp-}}.


=== girar-clone-build-commit <name> ===
==== особенности сборки из git ====
=== girar-fetch-build-commit ===
00-tmp- -- это префикс по умолчанию, (можно поменять опцией -p)
=== girar-get-upload-method <name> ===
который добавляется перед именем временного git репозитория,
из которого будет производиться сборка.
Этот временный репозиторий создается прямо перед добавлением пакета в task и '''сразу же''' удаляется.
 
Поверьте, вам этот временный репозиторий не нужен.
Если сборка удалась, то изменения вы втянете, запустив {{cmd|girar-fetch-build-commit}}
или, при желании, руками из
{{path|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|gpg agent]], но rpm не умеет с ним работать напрямую.
Чтобы не отсохли руки вводить pass phrase, в состав girar-nmu включены обвязки
rpm-sign-gpg-agent и rpm-sign-no-passphrase.
Эти обвязки вызываются утилитами автоматически
и наружу не видны, кроме как в виде опций,
но их можно использовать и как самостоятельные приложения.
 
Использование:
rpm-sign-gpg-agent <--addsign | --resign> *.src.rpm
 
{{cmd|rpm-sign-gpg-agent}} заставляет rpm использовать gpg agent для подписи.
{{cmd|rpm-sign-no-passphrase}} удобен для удаленной работы.
Когда вы заходите на удаленную песочницу, ваш gpg agent
остается на локальной машине. Если ключ с пассфразой,
то никуда не деться, надо настраивать локальный gpg agent.
Но если пассфразы нет, gpg agent не нужен.
Но rpm все равно попросит нажать Enter.
так вот, {{cmd|rpm-sign-no-passphrase}} нажмет Enter за вас.
 
==== внутренние утилиты для заливки srpm на сборку. ====
Утилиты {{cmd|girar-nmu-helper-*}} изначально были предназначены для внутреннего употребления и продвинутых пользователей.
Однако многими из них можно пользоваться и независимо от {{cmd|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 ==
== Использование girar-nmu utils на примере обновления perl ==


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


cd /var/ftp/pub/Linux/ALT
  girar-nmu-sort-transaction --mark '^libperl\.so\.5\.' \
  girar-nmu-helper-sort-transaction --mark '^libperl\.so\.5\.' \
  /Sisyphus/files/SRPMS /Sisyphus/files/noarch/RPMS /Sisyphus/files/i586/RPMS | \
  /Sisyphus/files/SRPMS /Sisyphus/files/noarch/RPMS /Sisyphus/files/i586/RPMS \
  grep -v '^perl$' > names.txt
  > names
 
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
 


girar-nmu-helper-name2path /Sisyphus/files/SRPMS `cat names` > files
{{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}}
girar-nmu-prepare --changelog '- rebuild with new perl' --hook ./perl_510_upgrade.pl `cat files`
{| class="wide"
| Разработано при поддержке [http://www.fasie.ru/ Фонда содействия развитию МП НТС] в рамках НИОКР 01201066526
| [[Изображение:Logo_FASIE_preview.jpg|200px|rigft]]
|}

Текущая версия от 17: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

утилиты для подготовки 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