
この質問は少し奇妙かもしれませんが、私はここで苦労しています。
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
。