Watch
Материал из ALT Linux Wiki
(39 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
+ | {{note|Для отслеживания новых версий в апстримных Git-репозиториях используйте [[Gear/remotes]].}} | ||
+ | |||
== Использование watch файлов в ALT Linux == | == Использование 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 пакет, используются сервисом [http://watch.altlinux.org watch.altlinux.org] | ||
+ | как один из источников данных для проверки выхода обновлений к пакетам. | ||
+ | |||
+ | В ALT Linux для работы с watch файлами рекомендуется использовать адаптированные к rpm, gear и платформе ALT Linux | ||
+ | утилиты rpm-uscan, uscan-query, srpmnmu/srpmtool. | ||
+ | |||
+ | === Создание watch-файлов === | ||
+ | |||
+ | Готовый watch-файл часто можно позаимствовать из соответствующего [http://packages.debian.org/ исходного пакета в debian]. | ||
+ | Однако watch-файл может быть легко создан самостоятельно. | ||
+ | |||
+ | При создании watch-файлов следует руководствоваться [http://wiki.debian.org/debian/watch/ документацией Debian], man {{cmd|rpm-uscan}}(1) и данной страницей. | ||
+ | |||
+ | Первая строчка watch-файла должна быть версией формата (3, на текущий момент), а следующие строки содержат любые URL для парсинга. Например: | ||
+ | |||
+ | version=3 | ||
+ | http://ftp.gnu.org/gnu/hello/hello-(.*).tar.gz | ||
+ | |||
+ | Для проектов, размещенных на SourceForge, можно воспользоваться [http://lintian.debian.org/tags/debian-watch-file-should-use-sf-redirector.html особым форматом записи] (применяет редиректор на qa.debian.org с целью предоставления неизменного интерфейса к порой изменяющейся схеме SF): | ||
+ | <pre>version=3 | ||
+ | http://sf.net/<project>/<tar-name>-(.+)\.tar\.gz</pre> | ||
+ | |||
+ | При публикации архивов с путями вида <tt>name/1.2/name-1.2.3.tar.gz</tt> и отсутствии симлинка <tt>current</tt> могут пригодиться обратные ссылки (backreferences) в регулярном выражении, например: | ||
+ | <pre>version=3 | ||
+ | http://xapian.org/download http://oligarchy.co.uk/xapian/([\d.]+)/xapian-core-\1\.tar\.gz</pre> | ||
+ | |||
+ | === Тестирование 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 файлы использовались сервисом [http://watch.altlinux.org 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 === | ||
+ | |||
+ | В утилитах {{prg|srpmnmu}}, {{prg|srpmtool}}, | ||
+ | идущих с perl-RPM-Source-Editor >= 0.71, | ||
+ | доступно автообновление src.rpm пакетов с помощью опции | ||
+ | --uupdate. (uu, два u, поскольку так называется соответствующая | ||
+ | утилита в Debian). | ||
+ | |||
+ | Пример вызова: | ||
$ srpmnmu --uupdate /path/to/name-version-rel.src.rpm | $ 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 | uupdate: new version 0.9.4 | ||
Записан: flashrom-0.9.4-alt1.src.rpm | Записан: flashrom-0.9.4-alt1.src.rpm | ||
Строка 17: | Строка 112: | ||
uupdate: version 0.9.4 is up to date. | 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/gear-uupdate|gear-uupdate]] можно использовать и независимо от rpm-uscan, | ||
+ | как более интеллектуальный вариант gear-update. | ||
+ | |||
+ | Таким образом, владельцам обновляемых из тарбола | ||
+ | gear репозиториев имеет смысл класть в gear репозиторий | ||
+ | рядом со спек файлом и watch файл. Готовый watch файл можно поискать | ||
+ | в Debian либо написать самому согласно [http://wiki.debian.org/debian/watch/ документации]. | ||
+ | |||
+ | == Перспективы автоматизации с помощью .watch файлов. == | ||
+ | |||
+ | В текущем виде uupdate-like автоматизация не совсем полная, | ||
+ | так как хоть она и снимает с майнтайнера часть рутинной | ||
+ | работы, никуда не девается необходимость сличать исходники, | ||
+ | не появились ли у пакета новые сборочные зависимости. | ||
+ | |||
+ | Поэтому в перспективе я еще хочу как опцию прикрутить к обновлению | ||
+ | анализаторы кода, которые будут читать configure.ac и т.д. | ||
+ | и добавлять в BuildRequires: все то, чего там, по их мнению, | ||
+ | не хватает для новой версии. | ||
+ | |||
+ | С этими анализаторами я в перспективе хочу развернуть | ||
+ | на watch.altlinux.org автосборщик, который будет | ||
+ | следить за пакетами с watch файлами, и при выходе новой | ||
+ | версии отправлять на test-only новый пакет. | ||
+ | |||
+ | == Q & A == | ||
+ | |||
+ | Q: bleachbit.watch локально показывает новую версию 1.6, а в | ||
+ | http://watch.altlinux.org/pub/watch/by-leader/cas.txt | ||
+ | это не отражается. | ||
+ | A: Да, чтобы отразился, надо добавить bleachbit.watch в src.rpm: | ||
+ | т.е. copy *.watch в .gear/rules и | ||
+ | Source44: bleachbit.watch в bleachbit.spec | ||
== Ссылки == | == Ссылки == | ||
* http://wiki.debian.org/debian/watch/ | * http://wiki.debian.org/debian/watch/ | ||
* http://lintian.debian.org/tags/debian-watch-file-should-mangle-version.html | * http://lintian.debian.org/tags/debian-watch-file-should-mangle-version.html | ||
+ | * https://fedoraproject.org/wiki/Upstream_release_monitoring | ||
+ | |||
+ | * http://lists.altlinux.org/pipermail/devel/2012-January/192957.html | ||
+ | * http://lists.altlinux.org/pipermail/devel/2012-January/192992.html | ||
+ | * http://lists.altlinux.org/pipermail/devel/2012-January/192978.html | ||
[[Категория:Utils]] | [[Категория:Utils]] |
Текущая версия на 10:35, 2 июня 2016
Содержание |
Использование 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-файла должна быть версией формата (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 новый пакет.
Q & A
Q: bleachbit.watch локально показывает новую версию 1.6, а в http://watch.altlinux.org/pub/watch/by-leader/cas.txt это не отражается.
A: Да, чтобы отразился, надо добавить bleachbit.watch в src.rpm: т.е. copy *.watch в .gear/rules и Source44: bleachbit.watch в bleachbit.spec