RPM/rpmvercmp: различия между версиями

Материал из ALT Linux Wiki
< RPM
Нет описания правки
(→‎python: rpmdev-vercmp)
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
Полная версия для пакета <code>kernel-image-std-def-debuginfo-6.1.33-alt1.x86_64.rpm</code> может выглядеть так:
Полная версия для пакета <code>kernel-image-std-def-debuginfo-6.1.33-alt1.x86_64.rpm</code> может выглядеть так:
  kernel-image-std-def-debuginfo#2:6.1.33-alt1:sisyphus+322849.100.1.1@1686572661
  kernel-image-std-def-debuginfo#2:6.1.33-alt1:sisyphus+322849.100.1.1@1686572661
* <code>kernel-image-std-def-debuginfo</code> '''NAME''' — имя пакета (может содержать дефисы) включающее '''компонент''' (тут <code>debuginfo</code>)
* <code>kernel-image-std-def-debuginfo</code> '''NAME''' — имя пакета (может содержать дефисы) включающее ''компонент'' (тут <code>debuginfo</code>)
* <code>2</code> '''EPOCH''' (эпоха — натуральное число, наиболее приоритетная часть версии, но при этом не входит в имя файла пакета, используется для того, чтоб пакет более новый пакет с меньшей версией был старше чем пакет с меньшей версией, например если апстрим поменял схему версионирования)
* <code>2</code> '''EPOCH''' (эпоха — натуральное число, наиболее приоритетная часть версии, но при этом не входит в имя файла пакета, используется для того, чтоб пакет более новый пакет с меньшей версией был старше чем пакет с меньшей версией, например если апстрим поменял схему версионирования)
* <code>6.1.33</code> '''VERSION''' (не содержит дефисов)
* <code>6.1.33</code> '''VERSION''' (не содержит дефисов)
* <code>alt1</code> '''RELEASE''' (не содержит дефисов)
* <code>alt1</code> '''RELEASE''' (не содержит дефисов)
* <code>sisyphus+322849.100.1.1</code> '''DISTTAG''' (<code>бранч</code>+<code>номер задания</code>. <code>подзадание</code>.<code>итерация</code>.<code>попытка</code>). Эта строка доступна при сборке в макросе <code>%disttag</code>.
* <code>sisyphus+322849.100.1.1</code> '''DISTTAG''' (<code>бранч</code>+<code>номер задания</code>. <code>подзадание</code>.<code>итерация</code>.<code>попытка</code>). Эта строка доступна при сборке в макросе <code>%disttag</code>. Смысл дисттэга, чтоб можно было пересобрать пакет не меняя спек (а значит и VERSION-RELEASE) при этом новая сборка автоматически имела большую версию и, следовательно, заменяла старый пакет при апгрейде.
* <code>1686572661</code> '''BUILDTIME''' (в unixtime)
* <code>1686572661</code> '''BUILDTIME''' (в unixtime)
* строка с эпохой, версией и релизом <code>2:6.1.33-alt1</code> так же называется '''EVR'''.
* строка с эпохой, версией и релизом <code>2:6.1.33-alt1</code> так же называется '''EVR'''.
Строка 16: Строка 16:
* При локальной сборке DISTTAG отсутствует (его выставляет только сборочница).
* При локальной сборке DISTTAG отсутствует (его выставляет только сборочница).
* В имени файла пакета и в имени пакета как его выводит <code>rpm -q</code> указана только VERSION-RELEASE, а эпоха отсутствует (так как идея в том что она нужна только маинтайнеру для внутренних нужд).
* В имени файла пакета и в имени пакета как его выводит <code>rpm -q</code> указана только VERSION-RELEASE, а эпоха отсутствует (так как идея в том что она нужна только маинтайнеру для внутренних нужд).
* Так как VERSION и RELEASE не содержат дефисов их можно легко выделить из названия пакета отрезав два последних компонента строки с названием разделенных дефисами.
* Так как VERSION и RELEASE не содержат дефисов их можно легко выделить из названия пакета отрезав два последних компонента строки разделенных дефисами.


= Сравнение версий пакетов =
= Сравнение версий пакетов =
Строка 24: Строка 24:
== rpmevrcmp ==
== rpmevrcmp ==
Утилита <code>rpmevrcmp</code> сравнивает только <code>эпоху:версию-релиз</code> ('''EVR''') без дисттэга.
Утилита <code>rpmevrcmp</code> сравнивает только <code>эпоху:версию-релиз</code> ('''EVR''') без дисттэга.
== python ==
Метод <code>rpm.versionCompare()</code> модуля [https://jfearn.fedorapeople.org/en-US/RPM/4/html/RPM_Guide/ch-rpm-programming-python.html rpm]. Но, нужно учесть, что в качестве аргументов он требует объекты <code>hdr</code>, а не строки.
Так же пример использования <code>rpm.labelCompare()</code> есть в скрипте <code>/usr/bin/rpmdev-vercmp</code>.

Текущая версия от 03:03, 23 июня 2023

Полная версия для пакета kernel-image-std-def-debuginfo-6.1.33-alt1.x86_64.rpm может выглядеть так:

kernel-image-std-def-debuginfo#2:6.1.33-alt1:sisyphus+322849.100.1.1@1686572661
  • kernel-image-std-def-debuginfo NAME — имя пакета (может содержать дефисы) включающее компонент (тут debuginfo)
  • 2 EPOCH (эпоха — натуральное число, наиболее приоритетная часть версии, но при этом не входит в имя файла пакета, используется для того, чтоб пакет более новый пакет с меньшей версией был старше чем пакет с меньшей версией, например если апстрим поменял схему версионирования)
  • 6.1.33 VERSION (не содержит дефисов)
  • alt1 RELEASE (не содержит дефисов)
  • sisyphus+322849.100.1.1 DISTTAG (бранч+номер задания. подзадание.итерация.попытка). Эта строка доступна при сборке в макросе %disttag. Смысл дисттэга, чтоб можно было пересобрать пакет не меняя спек (а значит и VERSION-RELEASE) при этом новая сборка автоматически имела большую версию и, следовательно, заменяла старый пакет при апгрейде.
  • 1686572661 BUILDTIME (в unixtime)
  • строка с эпохой, версией и релизом 2:6.1.33-alt1 так же называется EVR.

Эти параметры можно получить соответствующим запросом, например

$ rpmquery -p kernel-image-std-def-debuginfo-6.1.33-alt1.x86_64.rpm --qf '%{EVR}\n'
2:6.1.33-alt1
  • При локальной сборке DISTTAG отсутствует (его выставляет только сборочница).
  • В имени файла пакета и в имени пакета как его выводит rpm -q указана только VERSION-RELEASE, а эпоха отсутствует (так как идея в том что она нужна только маинтайнеру для внутренних нужд).
  • Так как VERSION и RELEASE не содержат дефисов их можно легко выделить из названия пакета отрезав два последних компонента строки разделенных дефисами.

Сравнение версий пакетов

rpmvercmp

Утилита rpmvercmp сравнивает только версию (VERSION) без релиза и пр.

rpmevrcmp

Утилита rpmevrcmp сравнивает только эпоху:версию-релиз (EVR) без дисттэга.

python

Метод rpm.versionCompare() модуля rpm. Но, нужно учесть, что в качестве аргументов он требует объекты hdr, а не строки.

Так же пример использования rpm.labelCompare() есть в скрипте /usr/bin/rpmdev-vercmp.