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

Материал из ALT Linux Wiki
м (s/репозитарий/репозиторий/, s/майнтайнер/мейнтейнер/)
 
(не показано 37 промежуточных версий 4 участников)
Строка 1: Строка 1:
{{note|Для отслеживания новых версий в апстримных Git-репозиториях используйте [[Gear/remotes]].}}
== Использование watch файлов в ALT Linux ==
== Использование watch файлов в ALT Linux ==


В новой версии утилиты srpmnmu,
=== Назначение watch файлов ===
идущей с perl-RPM-Source-Editor >= 0.71,
 
доступно автообновление src.rpm пакетов с помощью опции
Файлы debian/watch были введены в Debian для автоматического отслеживания появления новых версий пакета в upstream'е.
--uupdate. (два uu, поскольку так называется соответствующая
Для работы с watch файлами в Debian используется инструмент uscan из пакета devscripts.
утилита в Debian).
 
В 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, с 10.10.2017 поддерживается и формат 4), а следующая(ие) строка содержат URL для парсинга (В формате 4 может еще быть дополнительная строка с 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 ===
$ srpmnmu --uupdate /path/to/name-version-rel.src.rpm


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


Для работы watch файл должен быть упакован в пакет (прописан в спеке)
  ...
  ...
  Source100: %name.watch
  SourceXX: %name.watch
  ...
  ...
По умолчанию подразумевается, что .watch файл указывает на Source(0):.
По умолчанию подразумевается, что .watch файл указывает на Source(0):.


Если это не так, например, .watch файл указывает на Source3:,
Если это не так, например, .watch файл указывает на Source3:,
то надо паковать .watch файл как %name.source3.watch
то надо паковать .watch файл как  
SourceXX: %name.source3.watch
 
Для подписанных пакетов поддерживается автоматическая проверка подписи
у скачанного архива. Для этого в пакет должен быть упакован
публичный ключ апстрима как файл upstream-signing-key.asc:
 
SourceYY: upstream-signing-key.asc
 
Если исходные тексты пакета разбиты на несколько архивов с общей версией,
то для автоматизации обновления каждому архиву нужен свой watch файл:


=== Обновление src.rpm ===
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


  $ rpm -i /path/to/name-version-rel.src.rpm
  $ srpmtool --uupdate /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)
Пример работы:
  $ srpmtool --uupdate flashrom.spec
  $ srpmnmu --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
Строка 35: Строка 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
$ rpm -i /path/to/name-version-rel.src.rpm
$ srpmnmu -i --uupdate name.spec
$ srpmnmu -i --uupdate name.spec
$ diff -u name.spec~ name.spec  ### (смотрим, чего там робот наменял)
$ diff -u name.spec~ name.spec  ### (смотрим, чего там робот наменял)
$ rpmbuild -bs --nodeps name.spec (or hashertarbuild -bs 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


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


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


В Сизифе и t6 появилась новая утилита rpm-uscan,
=== Проверка gear репозиториев ===
которая представляет собой форк Debian'овской утилиты
uscan, адаптированный к работе в rpm окружении
и с поддержкой gear-репозиториев.


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


Изменено поведение опции --repack (переупаковывает архив
rpm-uscan можно использовать
в несжатый tar), добавлена опция --any-archive
* для сканирования коллекции gear-репозиториев
(ищет всевозможные форматы архивов; полезна,
rpm-uscan --report --any-archive /path/to/my/gits
если в watch файле был прописан tar.gz, а
или
апстрим в новом релизе переехал на tar.xz.
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 можно запускать
В git/gear-репозитории rpm-uscan можно запускать
Строка 65: Строка 164:
и узнает текущую версию.
и узнает текущую версию.


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


Тем временем владельцам обновляемых из тарбола
=== Обновление gear-репозитория ===
gear репозиториев имеет смысл класть в gear репозиторий
рядом со спек файлом и watch файл (уже можно работать
с помощью rpm-uscan; готовый watch файл можно поискать
в Debian либо написать самому, согласно документации
http://wiki.debian.org/debian/watch/


Также владельцам обновляемых из тарбола gear репозиториев
Поддерживается обновление gear-репозитория по watch файлу
имеет смысл установить утилиту gear-rules-verify
для большинства употребительных типов gear-репозиториев.
Перед первым употреблением имеет смысл установить утилиту gear-rules-verify
из пакета perl-Gear-Rules >= 0.04
из пакета perl-Gear-Rules >= 0.04
и посмотреть, не ругает ли она их gear репозиторий.
gear-rules-verify
сообщит, поддерживается ли обновление для вашего gear репозитория.
 
Для и проверки, и обновления gear-репозитория по watch файлу
используйте команду
rpm-uscan --force-action gear-uupdate
 
при этом rpm-uscan скачает архив с исходниками и вызовет утилиту
gear-uupdate --upstream-version *new version* *архив*
которая и обновит gear репозиторий.


=== I: перспективы автоматизации с помощью .watch файлов. ===
Эта же возможность интегрирована и в 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 автоматизация не совсем полная,
В текущем виде uupdate-like автоматизация не совсем полная,
так как хоть она и снимает с майнтайнера часть рутинной
так как хоть она и снимает с мейнтейнера часть рутинной
работы, никуда не девается необходимость сличать исходники,
работы, никуда не девается необходимость сличать исходники,
не появились ли у пакета новые сборочные зависимости.
не появились ли у пакета новые сборочные зависимости.
Строка 98: Строка 219:
следить за пакетами с watch файлами, и при выходе новой
следить за пакетами с watch файлами, и при выходе новой
версии отправлять на test-only новый пакет.
версии отправлять на 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]]

Текущая версия от 14:08, 20 декабря 2020

Примечание: Для отслеживания новых версий в апстримных Git-репозиториях используйте Gear/remotes.


Использование 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, с 10.10.2017 поддерживается и формат 4), а следующая(ие) строка содержат URL для парсинга (В формате 4 может еще быть дополнительная строка с 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

Ссылки