rpm はパッケージがアップデートであるかどうかをどのように判断しますか?

rpm はパッケージがアップデートであるかどうかをどのように判断しますか?

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

rpm はどのような基準でパケットが更新であるかどうかを決定しますか?

バージョンとリリースは文字列なので、他のバージョンと比較することはできません。バージョンを定義するフラグは、epoch、version、release の 3 つです。rpm (および yum、dnf など) は、パッケージがアップデートであるかどうかを判断するためにビルド時間をチェックしていますか? これにはほとんど信じられませんが、他には何もわかりません。

この機能の場所をソース コード内で自分で見つけられるほどのスキルはありません。誰か助けてくれるかもしれません。

どうもありがとうございます。

答え1

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

$epoch簡単に比較できる整数です。これを使用しないパッケージもあり、その場合は省略されます。 は $name単にバージョン間で変更されない文字列です。 $versionは解析および比較できる形式のバージョン文字列です (通常はピリオドで区切られた整数)。 は $release通常は整数で始まる文字列ですが、どのディストリビューション用に構築されたかに関する情報も含めることができます。

$epoch、、$nameおよびがすべて$verion同じである場合、$releaseが比較され、更新であるかどうかが判断されます。 が$version異なる場合、それらは解析され、大きい方が更新です。 が$epoch異なる場合、大きい方が更新です。

RPMアップデート比較のソースコードは以下にあると思います。ここ関数parseEVRおよび でrpmdsCompareEVR

関連情報