rpmはパッケージが更新されたことをどのように確認しますか?

rpmはパッケージが更新されたことをどのように確認しますか?

この質問は少し奇妙かもしれませんが、ここでは難しいです。

rpm は、パケットが更新かどうかを判断するためにどの基準を使用しますか?

バージョンとリリースは文字列なので、他のバージョンと比較することはできません。バージョンは、epoch、バージョン、リリースの3つのフラグを使用して定義できます。 rpm(およびyum、dnf ...)はビルド時間を確認してパッケージが最新であることを確認しますか?私はこれを信じることができませんが、他のものを見つけることはできません。

私はこの関数がソースコードのどこにあるかを自分で見つけるのに十分技術的にはうまくいきません。たぶん誰かが助けることができます。

とても感謝しています。

答え1

RPMパッケージには特定の形式があります。[$epoch:]$name-$version-$release.$arch

$epochは簡単に比較できる整数ですが、一部のパッケージではこれを使用せずに単に省略します。$nameバージョン間で変更してはいけない文字列です。 $version解析および比較できる形式のバージョン文字列(通常はピリオドで区切られた整数)。 $release通常は整数で始まる文字列ですが、作成された分布に関する情報を含めることもできます。

$epoch$name、、、および$verionすべてが同じ場合は、比較して更新である$releaseことを確認してください。$versionsが異なる場合は、それを解析してより高い値を更新します。それ以外の場合は、$epoch最新バージョンが高くなります。

RPMアップデートを比較するためのソースコードを見つけることができると思います。ここ関数でparseEVRsum rpmdsCompareEVR

関連情報