
Talvez esta pergunta seja um pouco estranha, mas estou tendo dificuldades aqui.
Por quais critérios o rpm determina se um pacote é uma atualização ou não?
A versão e o lançamento são uma string e assim por diante não podem ser comparados com outras versões. Existem três sinalizadores para definir uma versão: época, versão e lançamento. O rpm (e yum, dnf, ...) está verificando o tempo de compilação para determinar se um pacote é uma atualização? Mal consigo acreditar nisso, mas não consigo descobrir mais nada.
Não tenho habilidade suficiente para encontrar sozinho a localização desse recurso no código-fonte. Talvez alguém possa ajudar.
Muito obrigado.
Responder1
Os pacotes RPM possuem um formato específico:[$epoch:]$name-$version-$release.$arch
The $epoch
é um número inteiro que pode ser facilmente comparado, existem pacotes que não utilizam isso e apenas é omitido. $name
é simplesmente uma string que não deve mudar entre as versões. $version
é uma string de versão em um formato que pode ser analisado e comparado (geralmente números inteiros separados por pontos). $release
é uma string que normalmente começa com um número inteiro, mas também pode conter informações sobre para qual distribuição foi construída.
Se todos $epoch
, $name
e $verion
forem iguais, $release
será comparado para determinar se é uma atualização. Se os $version
s forem diferentes, eles serão analisados e o maior será a atualização. Se $epoch
for diferente, maior será a atualização.
O código-fonte para comparações de atualização de RPM, acredito, pode ser encontradoaquinas funções parseEVR
e rpmdsCompareEVR
.