xyz > xyz-beta(或 alpha、rc 等)的增量 RPM 包版本“数字”

Jon*_*rke 10 package-management rpm packaging

为了发布一些软件的几个不同版本的 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 候选版本”、 “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”,这会起作用,除了“候选发布”将被考虑晚于“2.4.0.final” ”。

我考虑的另一种方法是使用 RPM 版本号的“epoch:”部分(epoch: 前缀被考虑在主版本号之前,因此“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:我想保留规范文件的“发布:”字段以用于其原始目的(对于相同版本的打包软件,包的多个版本,包括打包更改)。

注意 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 包使用相同的方案(我很确定不存在这样的等价物),所以这只是仅供参考。

Mic*_*ton 6

Fedora 有一套指南来设置预发布包的版本/发布号。基本上,您使用 中最终发行版的版本号Version,并Release0.、递增数字、然后alphabeta或其他任何内容开始。您根本不会final在最终版本中使用字母数字标签。

请注意,您不能指望 RPM 支持 Debian 风格的波浪号版本控制。一些发行版禁用了此功能。


sto*_*tic 5

官方rpm 指南告诉您如何执行此操作,并链接到示例页面。以下是如何使用非常常见的版本控制方案的示例,该方案使用三个级别的预发布(a、b、rc)(不幸的是,该 rpm 使其支持稍微复杂):

  • 1.0.0a1 -> 1.0.0-0.1.a1
  • 1.0.0b1 -> 1.0.0-0.1.b1
  • 1.0.0b2 -> 1.0.0-0.1.b2
  • 1.0.0b2,第二个版本(1.0.0b2 的打包调整)-> 1.0.0-0.2.b2
  • 1.0.0rc1 -> 1.0.0-0.1.rc1
  • 1.0.0 -> 1.0.0-1
  • 1.0.1a1 -> 1.0.1-0.1.a1
  • 1.0.1 -> 1.0.1-1