RPM/rpmvercmp: различия между версиями
< RPM
Vt (обсуждение | вклад) (make numbers match) |
|||
(не показано 10 промежуточных версий 1 участника) | |||
Строка 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>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+ | * <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'''. | ||
Строка 13: | Строка 13: | ||
$ rpmquery -p kernel-image-std-def-debuginfo-6.1.33-alt1.x86_64.rpm --qf '%{EVR}\n' | $ rpmquery -p kernel-image-std-def-debuginfo-6.1.33-alt1.x86_64.rpm --qf '%{EVR}\n' | ||
2:6.1.33-alt1 | 2:6.1.33-alt1 | ||
* При локальной сборке [[Transition to disttag|DISTTAG]] отсутствует (его выставляет только сборочница). | |||
* В имени файла пакета и в имени пакета как его выводит <code>rpm -q</code> указана только VERSION-RELEASE, а эпоха отсутствует (так как идея в том что она нужна только маинтайнеру для внутренних нужд). | |||
* Так как VERSION и RELEASE не содержат дефисов их можно легко выделить из названия пакета отрезав два последних компонента строки разделенных дефисами. | |||
= Сравнение версий пакетов = | = Сравнение версий пакетов = | ||
Строка 20: | Строка 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>. |
Текущая версия от 15:01, 30 сентября 2024
Полная версия для пакета 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
.