Como o RPM determina o pacote mais novo

1

Eu peguei o Apache httpd 2.2.3 SRPM e extraí o arquivo .spec. A partir disso, substituí o 2.2.3 pelo 2.2.14 e removi a tag Serial do specfile (como rpmbuild reclamou da tag Serial - presumo que esta tenha sido preterida). Transferiu o tarball do httpd e construiu ( rpmbuild ) sem erros (para minha surpresa).

Ao executar rpm --upgrade < newrpms > Recebi um erro informando que meus novos RPMs não eram versões mais recentes, embora a tag Version seja claramente posterior. Eu defino o Release , no entanto, para 1.

Eu tentei pesquisar no Google para descobrir como rpm determina qual é a versão mais recente (sem sorte). Dos comandos rpm -qi , tenho o seguinte para a instalação padrão 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

Do meu build 2.2.14 eu tenho:

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

Portanto, a pergunta é: como rpm determina qual é o RPM mais recente para fins de atualização?

    
por PP. 16.11.2009 / 13:17

1 resposta

2

A tag serial foi preterida e substituída pela tag epoch.

Eu não sei como a tag serial funcionou, mas as comparações de versão com a tag epoch têm a época precedida da versão anterior à comparação.

Eu assumo que algo semelhante foi feito com serial.

Eu estou supondo que o valor serial também foi prefixado, então você está comparando versões como esta:

<serial>-<version>-<release>

Se o valor serial for > 1 no original eu estou supondo que o seu padrão para 1, quando não especificado.

Você pode sempre usar rpm --force para forçar um upgrade para um RPM específico

    
por 16.11.2009 / 19:59