この質問は少し奇妙かもしれませんが、ここでは難しいです。
rpm は、パケットが更新かどうかを判断するためにどの基準を使用しますか?
バージョンとリリースは文字列なので、他のバージョンと比較することはできません。バージョンは、epoch、バージョン、リリースの3つのフラグを使用して定義できます。 rpm(およびyum、dnf ...)はビルド時間を確認してパッケージが最新であることを確認しますか?私はこれを信じることができませんが、他のものを見つけることはできません。
私はこの関数がソースコードのどこにあるかを自分で見つけるのに十分技術的にはうまくいきません。たぶん誰かが助けることができます。
とても感謝しています。
答え1
RPMパッケージには特定の形式があります。[$epoch:]$name-$version-$release.$arch
$epoch
は簡単に比較できる整数ですが、一部のパッケージではこれを使用せずに単に省略します。$name
バージョン間で変更してはいけない文字列です。 $version
解析および比較できる形式のバージョン文字列(通常はピリオドで区切られた整数)。 $release
通常は整数で始まる文字列ですが、作成された分布に関する情報を含めることもできます。
$epoch
$name
、、、および$verion
すべてが同じ場合は、比較して更新である$release
ことを確認してください。$version
sが異なる場合は、それを解析してより高い値を更新します。それ以外の場合は、$epoch
最新バージョンが高くなります。
RPMアップデートを比較するためのソースコードを見つけることができると思います。ここ関数でparseEVR
sum rpmdsCompareEVR
。