1

Я взял 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:

Name        : httpd                        Relocations: (not relocatable)
Version     : 2.2.3                             Vendor: CentOS
Release     : 31.el5.centos                 Build Date: Thu 03 Sep 2009 10:43:06 PM BST
Install Date: Mon 26 Oct 2009 10:27:12 AM GMT      Build Host: builder16.centos.org
Group       : System Environment/Daemons    Source RPM: httpd-2.2.3-31.el5.centos.src.rpm
Size        : 3254910                          License: Apache Software License
Signature   : DSA/SHA1, Sun 20 Sep 2009 04:53:42 AM BST, Key ID a8a447dce8562897
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server

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

Name        : httpd                        Relocations: (not relocatable)
Version     : 2.2.14                            Vendor: Apache Software Foundation
Release     : 1                             Build Date: Mon 16 Nov 2009 11:40:41 AM GMT
Install Date: Mon 16 Nov 2009 11:44:38 AM GMT      Build Host: build01.local
Group       : System Environment/Daemons    Source RPM: httpd-2.2.14-1.src.rpm
Size        : 5101686                          License: Apache License, Version 2.0
Signature   : (none)
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server

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

1 ответ1

2

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

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

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

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

<serial>-<version>-<release>

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .