Как RPM определяет более новый пакет

2102
PP.

Я взял Apache httpd 2.2.3 SRPM и извлек файл .spec. Из этого я заменил 2.2.3 на 2.2.14 и удалил Serialтег из specfile (как rpmbuildжаловался на тег Serial - я предполагаю, что это устарело). Скачал архив httpd и собрал ( rpmbuild) без ошибок (к моему удивлению).

После запуска rpm --upgrade<newrpms> я получил сообщение об ошибке, что мои новые RPM не были более новыми версиями, хотя Versionтег явно позже. Я установил Release, однако, 1.

Я попытался просмотреть Google, чтобы узнать, как rpmопределить, какая самая новая версия (не повезло). Из rpm -qiкоманд у меня есть следующее для установки по умолчанию 2.2.3:

Имя: httpd Перемещения: (не перемещаемая) Версия: 2.2.3 Поставщик: CentOS Релиз: 31.el5.centos Дата сборки: чт 3 сен 2009 10:43:06 BST Дата установки: Пн 26 Окт 2009 10:27:12 GMT Сборка Хост: builder16.centos.org Группа: Системная среда / Демоны Источник RPM: httpd-2.2.3-31.el5.centos.src.rpm Размер: 3254910 Лицензия: Apache Software License Подпись: DSA / SHA1, вс. 20 сентября 2009 г., 04:53:42 BST, идентификатор ключа a8a447dce8562897 URL: http://httpd.apache.org/ Описание: HTTP-сервер Apache 

Из моей сборки 2.2.14 у меня есть:

Имя: httpd Перемещения: (не перемещаемая) Версия: 2.2.14 Поставщик: Apache Software Foundation Релиз: 1 Дата сборки: пн 16 ноя 2009 11:40:41 GMT Дата установки: Пн 16 Ноя 2009 11:44:38 GMT Сборка Хост: build01.local Группа: Системная среда / Демоны Источник RPM: httpd-2.2.14-1.src.rpm Размер: 5101686 Лицензия: Apache License, версия 2.0 Подпись: (нет) URL: http://httpd.apache.org/ Описание: HTTP-сервер Apache 

Таким образом, вопрос: как rpmопределить, какой самый последний RPM для целей обновления?

1

1 ответ на вопрос

2
Craig

Серийный тег устарел и был заменен тегом эпохи.

Я не знаю, как работал последовательный тег, но сравнение версий с тегом эпохи имеет эпоху, предшествующую версии перед сравнением.

Я предполагаю, что нечто подобное было сделано с серийным.

Я предполагаю, что к порядковому значению также был добавлен префикс, так что вы сравниваете версии следующим образом:

<serial>-<version>-<release> 

Если серийное значение было> 1 в оригинале, я предполагаю, что его значение по умолчанию равно 1, когда не указано.

Вы всегда можете использовать rpm --forceдля принудительного обновления до определенного RPM