【问题标题】:Why does RPM think version 1.03ii > 1.1?为什么 RPM 认为版本 1.03ii > 1.1?
【发布时间】:2014-05-21 16:42:51
【问题描述】:

我正在尝试将以前版本为 1.03ii-1 的 RPM 升级为最新版本的软件包 1.1-1

Yum,出于某种原因,认为 1.03ii-11.1-1更新。两个包都没有纪元,python 中的rpm.labelCompare(('1', '1.03ii', '1'), ('1','1.1','1')) 也暗示1.03ii-1高于1.1-1

这是为什么? ii 是否以某种方式被评估为数字?字母数字版本是否被视为高于数字版本?

【问题讨论】:

    标签: python packaging rpm yum


    【解决方案1】:

    来自http://rpm5.org/docs/api/dependencies.html,强调我的

    RPM 用来确定版本顺序的算法 软件包很简单,鼓励开发人员不要依赖 其工作细节。开发人员应保留其编号方案 简单,因此任何合理的排序算法都可以工作。版本 比较算法在例程 rpmvercmp() 中,它只是一个 分段 strcmp(3)。首先,找到段的边界 使用 isdigit(3)/isalpha(3)。然后按顺序比较每个段 最右边的部分是最不重要的。这 使用词汇图形 ascii 比较字母部分 排序,数字段去除前导零并比较 strlen 在执行 strcmp 之前。如果两个数字字符串相等,则 更长的字符串更大。 注意算法没有知识 十进制小数,perl-5.6 比 perl-5.00503 “旧” 因为数字 6 小于数字 503。

    在这种情况下,版本被转换为元组 (1,3,'ii') 和 (1,1)。第一个元素相等,因此第二个元素与 3 > 1 进行比较,因此 1.03ii 被认为比 1.1 更新

    【讨论】:

    • 嗯,这当然可以解释。感谢您的出色回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多