Como o rpm determina se um pacote é uma atualização?

Como o rpm determina se um pacote é uma atualização?

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, $namee $verionforem iguais, $releaseserá comparado para determinar se é uma atualização. Se os $versions forem diferentes, eles serão analisados ​​e o maior será a atualização. Se $epochfor diferente, maior será a atualização.

O código-fonte para comparações de atualização de RPM, acredito, pode ser encontradoaquinas funções parseEVRe rpmdsCompareEVR.

informação relacionada