也许这个问题有点奇怪,但我在这里很挣扎。
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
。