Watch: различия между версиями

Материал из ALT Linux Wiki
Строка 7: Строка 7:


В ALT Linux также можно использовать отдельные watch файлы для проверки наличия обновлений.
В ALT Linux также можно использовать отдельные watch файлы для проверки наличия обновлений.
Дополнительно, с помощью watch файлов, размешенных в gear репозитории и/или упакованных в src.rpm,
Дополнительно, с помощью watch файлов, размещённых в gear репозитории и/или упакованных в src.rpm,
можно автоматически скачивать обновления, проверять их цифровую подпись,
можно автоматически скачивать обновления, проверять их цифровую подпись,
автоматически обновлять src.rpm или gear репозиторий.
автоматически обновлять src.rpm или gear репозиторий.

Версия от 07:48, 24 июня 2014

Использование watch файлов в ALT Linux

Назначение watch файлов

Файлы debian/watch были введены в Debian для автоматического отслеживания появления новых версий пакета в upstream'е. Для работы с watch файлами в Debian используется инструмент uscan из пакета devscripts.

В ALT Linux также можно использовать отдельные watch файлы для проверки наличия обновлений. Дополнительно, с помощью watch файлов, размещённых в gear репозитории и/или упакованных в src.rpm, можно автоматически скачивать обновления, проверять их цифровую подпись, автоматически обновлять src.rpm или gear репозиторий.

watch файлы, упакованные в src.rpm пакет, используются сервисом watch.altlinux.org как один из источников данных для проверки выхода обновлений к пакетам.

В ALT Linux для работы с watch файлами рекомендуется использовать адаптированные к rpm, gear и платформе ALT Linux утилиты rpm-uscan, uscan-query, srpmnmu/srpmtool.

Создание watch файлов

Готовый watch файл часто можно позаимствовать из соответствующего исходного пакета в debian. Олнако watch файл может быть легко создан самостоятельно.

При создании watch-файлов следует руководствоваться документацией Debian. man rpm-uscan(1) и данной страницей.

watch-файл

Первая линия watch-файла должна быть версией формата (3, на текущий момент), а следующие линии содержат любые URL для парсинга. Например:
   version=3
   http://ftp.gnu.org/gnu/hello/hello-(.*).tar.gz

Для проектов, размещенных на SourceForge, можно воспользоваться особым форматом записи (применяет редиректор на qa.debian.org с целью предоставления неизменного интерфейса к порой изменяющейся схеме SF):

version=3
http://sf.net/<project>/<tar-name>-(.+)\.tar\.gz

При публикации архивов с путями вида name/1.2/name-1.2.3.tar.gz и отсутствии симлинка current могут пригодиться обратные ссылки (backreferences) в регулярном выражении, например:

version=3
http://xapian.org/download http://oligarchy.co.uk/xapian/([\d.]+)/xapian-core-\1\.tar\.gz

Тестирование watch файлов

Для тестирования watch файлов рекомендуется использовать команду uscan-query.

uscan-query -a hplip.watch
FILENAME=hplip-3.14.6.tar.gz
LOCAL_VERSION=3.14.3
LOCAL_VERSION_MANGLED=3.14.3
NAME=hplip
SIG_URL=http://qa.debian.org/watch/sf.php/hplip/hplip-3.14.6.tar.gz.asc
STATUS=Newer version available
STATUS_CMP=-1
URL=http://qa.debian.org/watch/sf.php/hplip/hplip-3.14.6.tar.gz
VERSION=3.14.6
WATCH_FILE=hplip.watch
WATCH_FILE_VERSION=3
WATCH_LINE=opts=pgpsigurlmangle=s/$/.asc/ http://sf.net/hplip/hplip-(.+)\.tar\.gz

Использование watch файлов совместно с src.rpm

Чтобы watch файлы использовались сервисом watch.altlinux.org, они должны быть упакованы в src.rpm пакет.

Упаковка watch файлов в src.rpm

watch файл должен быть указан в спеке с помощью тега Source:

...
SourceXX: %name.watch
...

По умолчанию подразумевается, что .watch файл указывает на Source(0):.

Если это не так, например, .watch файл указывает на Source3:, то надо паковать .watch файл как

SourceXX: %name.source3.watch

Для подписанных пакетов поддерживается автоматическая проверка подписи у скачанного архива. Для этого в пакет должен быть упакован публичный ключ апстрима как файл upstream-signing-key.asc:

SourceYY: upstream-signing-key.asc

Если исходные тексты пакета разбиты на несколько архивов с общей версией, то для автоматизации обновления для каждого архива нужен свой watch файл:

Name: somegame
Source0: %name-%version-src.tar
Source1: %name-%version-data.tar
Source2: %name.source0.watch
Source3: %name.source1.watch
Source4: upstream-signing-key.asc

проверка и обновление src.rpm

В утилитах srpmnmu, srpmtool, идущих с perl-RPM-Source-Editor >= 0.71, доступно автообновление src.rpm пакетов с помощью опции --uupdate. (uu, два u, поскольку так называется соответствующая утилита в Debian).

Пример вызова:

$ srpmnmu --uupdate /path/to/name-version-rel.src.rpm
$ srpmtool --uupdate /path/to/name-version-rel.src.rpm


Пример работы:

$ srpmtool --uupdate flashrom.spec
uupdate: new version 0.9.4
Записан: flashrom-0.9.4-alt1.src.rpm
$ srpmnmu --uupdate flashrom-0.9.4-alt1.src.rpm
uupdate: version 0.9.4 is up to date.

При работе со .spec файлом, чтобы не создавать новый src.rpm, а модифицировать имеющийся спек-файл, необходимо воспользоваться опцией -i (--inplace):

$ srpmnmu -i --uupdate name.spec

Пример работы со спек-файлом:

$ rpm -i /path/to/name-version-rel.src.rpm
$ srpmnmu -i --uupdate name.spec
$ diff -u name.spec~ name.spec   ### (смотрим, чего там робот наменял)
$ rpmbuild -bs --nodeps name.spec (or hashertarbuild -bs name.spec)

Watch для gear-репозитория

Размещение watch файла в gear репозитории

watch файл должен иметь расширение .watch, быть расположен в .gear/ либо в корне gear-репозитория. .gear/rules должен содержать

copy: .gear/*.watch

или

copy: *.watch

Используемый для проверки подписи публичный ключ должен называться upstream-signing-key.asc или upstream-signing-key.pgp и быть расположен в .gear/ либо в корне gear-репозитория.

в зависимости от опций утилита rpm-uscan может находить watch файлы и в других местах, в частности файлы .../debian/watch.

Проверка gear репозиториев

утилита rpm-uscan из одноименного пакета представляет собой форк Debian'овской утилиты uscan, адаптированный к работе в rpm окружении и с поддержкой gear-репозиториев.

rpm-uscan можно использовать

  • для сканирования коллекции gear-репозиториев
rpm-uscan --report --any-archive /path/to/my/gits

или

cd /path/to/my/gits; rpm-uscan --report --any-archive 
  • для конкретного gear-репозитория
rpm-uscan --any-archive
  • для запроса к одиночному watch файлу вместо утилиты uscan-query.

В последнем случае, если watch файл не находится в gear-репозитории, rpm-uscan не сможет определить, как называется соответствующий пакет и какова его текущая версия в репозитории. соответствующие значения нужно будет передать команде rpm-uscan с помощью опций --package и --upstream-version:

rpm-uscan --watchfile name.watch --package name --upstream-version version

rpm-uscan можно использовать как только для проверки наличия новых версий (с опцией --report), так и для проверки и их загрузки (без опции --report либо с с опцией --download).

В git/gear-репозитории rpm-uscan можно запускать совсем без опций -- она самостоятельно найдет watch файл и узнает текущую версию.

Отличия rpm-uscan от Debian uscan

В rpm-uscan изменено поведение опции --repack (переупаковывает архив в несжатый tar), добавлена опция --any-archive (ищет всевозможные форматы архивов; полезна, если в watch файле был прописан tar.gz, а апстрим в новом релизе переехал на tar.xz.

Обновление gear-репозитория

Поддерживается обновление gear-репозитария по watch файлу для большинства употребительных типов gear-репозитариев. Перед первым употреблением имеет смысл установить утилиту gear-rules-verify из пакета perl-Gear-Rules >= 0.04

gear-rules-verify

сообщит, поддерживается ли обновление для вашего gear репозитория.

Для и проверки, и обновления gear-репозитария по watch файлу используйте команду

rpm-uscan --force-action gear-uupdate

при этом rpm-uscan скачает архив с исходниками и вызовет утилиту

gear-uupdate --upstream-version *new version* *архив*

которая и обновит gear репозиторий.

Эта же возможность интегрирована и в cronbuild. При наличии watch файла утилиты из пакета gear-cronbuild (см. Gear/cronbuild)

gear-cronbuild-apply-hooks
gear-cronbuild-apply-hooks-in-chroot

вызывают внутри rpm-uscan --force-action gear-uupdate.

Утилиту gear-uupdate можно использовать и независимо от rpm-uscan, как более интеллектуальный вариант gear-update.

Таким образом, владельцам обновляемых из тарбола gear репозиториев имеет смысл класть в gear репозиторий рядом со спек файлом и watch файл. Готовый watch файл можно поискать в Debian либо написать самому согласно документации.

Перспективы автоматизации с помощью .watch файлов.

В текущем виде uupdate-like автоматизация не совсем полная, так как хоть она и снимает с майнтайнера часть рутинной работы, никуда не девается необходимость сличать исходники, не появились ли у пакета новые сборочные зависимости.

Поэтому в перспективе я еще хочу как опцию прикрутить к обновлению анализаторы кода, которые будут читать configure.ac и т.д. и добавлять в BuildRequires: все то, чего там, по их мнению, не хватает для новой версии.

С этими анализаторами я в перспективе хочу развернуть на watch.altlinux.org автосборщик, который будет следить за пакетами с watch файлами, и при выходе новой версии отправлять на test-only новый пакет.

Ссылки