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

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

После запуска rpm --upgrade Я получил ошибку, что мои новые 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 ответ

Решение

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

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

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

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

<serial>-<version>-<release>

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

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

Другие вопросы по тегам