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

为了发布一些软件的几个不同版本的RPM软件包,我正在寻找一种方法来指定被认为是“升级”的版本“数字”,并且包括几个预发行版本的区别,例如(按顺序):“2.4.0α1”,“2.4.0α2”,“2.4.0α3”,“2.4.0β1”,“2.4.0β2”,“2.4.0释放候选者”, “2.4.0 final”,“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的预期进行sorting,因为它们的版本显示为随时间增加。 但是,当在几个主要版本上同时发布新版本时(例如,2.3.0在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的解决scheme感兴趣。

注3:在类似Debian的系统中,dpkg在版本号中使用一个特殊的组件,即“〜”(代字符)字符。 这会导致dpkg将后缀计为“负数”sorting,所以“2.4.0〜anything”会出现在“2.4.0”之前。 然后,在“〜”之后应用正常顺序,所以“2.4.0〜alpha1”在“2.4.0〜beta1”之前,因为“alpha”按照字母顺序位于“beta”之前。 我不一定希望对RPM包使用相同的scheme(我敢肯定没有这样的等价物存在),所以这只是FYI。

官方的rpm指导说明如何做到这一点,并链接到示例页面 。 下面是一个例子,说明如何使用三个级别的预发布(a,b,rc)的常见版本scheme(不幸的是,这使得转换稍微复杂一些):

  • 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

Fedora有一套设置预发布软件包的版本/版本号的指导原则 。 基本上你可以使用版本中最终版本的Version号,然后用0.开始Release号,增加数字,然后是alphabeta或其他。 根本不会在最终版本中使用字母数字标签。

请注意,您不能指望支持Debian风格的波形版本的RPM。 几个发行版禁用此function。

我不是alpha / beta区别的粉丝。 有发布的代码和未发布的代码。

我该怎么做:我喜欢带有持续集成系统的major.minor.build(参见JenkinsCI)。 生成整数不会重置。 次要版本号更改用于向后兼容的更改。 主要的数字变化是大交易。

如果营销不喜欢“构build”是大整数,你可以增加次要的数字一次只为营销只发布的版本,然后再去工程。