为了发布一些软件的几个不同版本的 RPM 包,我正在寻找一种方法来指定被认为是“升级”的版本“数字”,并包括几个预发布版本的区别,例如(按顺序): "2.4.0 alpha 1", "2.4.0 alpha 2", "2.4.0 alpha 3", "2.4.0 beta 1", "2.4.0 beta 2", "2.4.0 release candidate", “2.4.0 最终版本”、“2.4.1”、“2.4.2”等。
我遇到的主要问题是 RPM 认为“2.4.0”早于“2.4.0.alpha1”,所以我不能只在最终版本号的末尾添加后缀。
我可以尝试“2.4.0.alpha1”、“2.4.0.beta1”、“2.4.0.final”,这会起作用,除了“release candidate”晚于“2.4.0.final” ”。
我考虑的另一种方法是使用 RPM 版本号的“纪元:”部分(纪元:前缀被认为在主版本号之前,因此“1:2.4.0”实际上早于“2:1.0.0”) . 通过在 epoch: 字段中放置时间戳,所有版本都按照 RPM 的预期进行排序,因为它们的版本似乎随时间递增。但是,当同时在几个主要版本上发布新版本时,这会失败(例如,2.3.2 在 2.4.0 之后发布,但它们的 RPM 版本是“20121003:2.3.2”和“20120928:2.4”。 0”和 2.3.2 上的系统无法“升级”到 2.4.0,因为 rpm 将其视为旧版本)。在这种情况下,yum/zypper/etc 拒绝升级到 2.4.0,这就是我的问题。
我可以使用什么版本号来实现这一点,并确保 RPM 始终认为版本号是有序的。或者如果不是版本号,RPM 打包中的其他机制?
注意 1:我想保留 spec 文件的“Release:”字段用于它的原始目的(多个版本的包,包括包装更改,用于相同版本的打包软件)。
注意 2:这应该适用于主要发行版的当前生产版本,例如 RHEL/CentOS 6 和 SLES 11。但我对不适用的解决方案也很感兴趣,只要它们不涉及重新编译 rpm!
注意 3:在类 Debian 系统上,dpkg 在版本号中使用一个特殊的组件,即“~”(波浪号)字符。这会导致 dpkg 将后缀计为“负”顺序,因此“2.4.0~anything”将排在“2.4.0”之前。然后,在“~”之后应用正常排序,因此“2.4.0~alpha1”出现在“2.4.0~beta1”之前,因为“alpha”按字母顺序出现在“beta”之前。我不一定要为 RPM 包使用相同的方案(我很确定不存在这样的等价物),所以这只是 FYI。