
也許這個問題有點奇怪,但我在這裡很掙扎。
rpm 透過什麼標準來判斷資料包是否是更新?
版本和發行版是一個字串,因此無法與其他版本進行比較。可以使用三個標誌來定義版本:epoch、version 和release。 rpm(以及 yum、dnf...)是否檢查建置時間以確定軟體包是否為更新?我簡直不敢相信這一點,但我無法弄清楚其他任何事情。
我的技術不夠熟練,無法自己找到這個功能在原始碼中的位置。也許有人可以幫忙。
非常感謝。
答案1
RPM 套件有特定的格式:[$epoch:]$name-$version-$release.$arch
是$epoch
一個可以輕鬆比較的整數,有些套件不使用它,只是將其省略。 $name
只是一個不應在版本之間更改的字串。 $version
是可以解析和比較格式的版本字串(通常是用句點分隔的整數)。 $release
是一個通常以整數開頭的字串,但也可以包含有關其構建的發行版的資訊。
如果$epoch
、$name
、 和$verion
都相同,則$release
比較以確定是否為更新。如果$version
s 不同,則解析它們並更新較高的值。如果$epoch
不同,則更新的版本越高。
我相信可以找到RPM更新比較的源碼這裡在函數parseEVR
和中rpmdsCompareEVR
。