rpm 如何确定软件包是否是更新?

rpm 如何确定软件包是否是更新?

也许这个问题有点奇怪,但我在这里很挣扎。

rpm 通过什么标准来判断数据包是否是更新?

版本和发行版是一个字符串,因此无法与其他版本进行比较。可以使用三个标志来定义版本:epoch、version 和release。 rpm(以及 yum、dnf...)是否检查构建时间以确定软件包是否是更新?我简直不敢相信这一点,但我无法弄清楚其他任何事情。

我的技术不够熟练,无法自己找到这个功能在源代码中的位置。也许有人可以帮忙。

非常感谢。

答案1

RPM 包有特定的格式:[$epoch:]$name-$version-$release.$arch

$epoch一个可以轻松比较的整数,有些包不使用它,只是将其省略。 $name只是一个不应在版本之间更改的字符串。 $version是可以解析和比较格式的版本字符串(通常是用句点分隔的整数)。 $release是一个通常以整数开头的字符串,但也可以包含有关其构建的发行版的信息。

如果$epoch$name、 和$verion都相同,则$release比较以确定是否是更新。如果$versions 不同,则解析它们并更新较高的值。如果$epoch不同,则更新的版本越高。

我相信可以找到RPM更新比较的源代码这里在函数parseEVR和中rpmdsCompareEVR

相关内容