Watch
Использование 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.
Утилиты можно применять не только к src.rpm, но и к .spec файлам:
$ 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-репозитория
gear репозиторий
утилита rpm-uscan из одноименного пакета представляет собой форк Debian'овской утилиты uscan, адаптированный к работе в rpm окружении и с поддержкой gear-репозиториев.
rpm-uscan --report --any-archive
Ее можно использовать для проверки наличия новых версий, и их загрузки (с опцией --download).
Изменено поведение опции --repack (переупаковывает архив в несжатый tar), добавлена опция --any-archive (ищет всевозможные форматы архивов; полезна, если в watch файле был прописан tar.gz, а апстрим в новом релизе переехал на tar.xz.
В git/gear-репозитории rpm-uscan можно запускать совсем без опций -- она самостоятельно найдет watch файл и узнает текущую версию.
Обновление 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 либо написать самому согласно документации.
I: перспективы автоматизации с помощью .watch файлов.
В текущем виде uupdate-like автоматизация не совсем полная, так как хоть она и снимает с майнтайнера часть рутинной работы, никуда не девается необходимость сличать исходники, не появились ли у пакета новые сборочные зависимости.
Поэтому в перспективе я еще хочу как опцию прикрутить к обновлению анализаторы кода, которые будут читать configure.ac и т.д. и добавлять в BuildRequires: все то, чего там, по их мнению, не хватает для новой версии.
С этими анализаторами я в перспективе хочу развернуть на watch.altlinux.org автосборщик, который будет следить за пакетами с watch файлами, и при выходе новой версии отправлять на test-only новый пакет.