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


10

为了发布某些软件的几个不同版本的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.4.0之后发行2.3.2,但其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和SLES11。但是,我对那些不需要重新编译rpm的解决方案也很感兴趣!

注3:在类似Debian的系统上,dpkg在版本号中使用特殊组件,即“〜”(代字号)字符。这导致dpkg将后缀计为“负”顺序,因此“ 2.4.0〜anything”将出现在“ 2.4.0”之前。然后,在“〜”之后应用常规排序,因此“ 2.4.0〜alpha1”在“ 2.4.0〜beta1”之前,因为“ alpha”在字母上先于“ beta”。我不一定要对RPM软件包使用相同的方案(我很确定没有这样的等效方案),所以这只是FYI。

Answers:


4

官员转准则告诉如何做到这一点,并链接到一个例子页面。这是一个示例,说明如何使用非常常见的版本控制方案,该方案使用三个级别的预发行版本(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

真好!非常感谢你。在您的示例中,只有一件事,在我看来,肯定会将1.0.0-0.1.rc1排序为于1.0.0-0.2.b2。因此,一旦“ -0.1”组件增加到“ -0.2”,则在以后的所有版本号中都应保持“ -0.2”。我明白吗?
乔纳森·克拉克

我认为你是对的。我将仔细检查正确的方法来正确执行此操作并更新我的答案。
随机

那么哪种方法正确呢?
山姆

6

Fedora有一套用于设置预发行软件包的版本/发行数量的准则。基本上,你用什么将是最终发布的版本号Version,并开始Release与数量0.递增的数量,然后alphabeta无论或。final最终版本完全不会使用字母数字标签。

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


谢谢,我将研究这些。乍一看,它们似乎是在“劫持” Release组件以允许上游alpha / beta / etc版本,我觉得这有点麻烦... IMO,应增加Release以便打包更改,而不是更改在打包的软件中。
乔纳森·克拉克

2

我不喜欢alpha / beta的区别。有已发布的代码和未发布的代码。

我该怎么做:我喜欢带有持续集成系统的major.minor.build(请参阅JenkinsCI)。构建整数永远不会重置。较小的版本号更改是为了向后兼容的更改。重要的数字变化是大交易。

如果市场营销人员不喜欢将“内部版本”设置为大整数,则可以一次递增次要数字,以仅在已发布的内部版本上进行市场营销,然后再进行工程设计。


1
好吧,alpha / beta版本也已经发布了……只是不作为“最终版本”。我对此真的没有任何选择,我只想
Jonathan Clarke

0

我碰到了类似的问题,我不得不比较RedHat,Debian,Python软件包和Ruby gems的修订版,以统一套件号,这有助于我评估每种情况下的“大于”和“小于”:

这是将1.3.0.post0.dev20180213210433与1.3.0,YMMV进行比较

适用于Red Hat(感谢https://utcc.utoronto.ca/~cks/space/blog/linux/RPMShellVersionComparison

docker run -ti centos:7
yum install rpmdevtools.noarch
rpmdev-vercmp "1.3.0" "1.3.0.post0.dev20180213210433" 
1.3.0 < 1.3.0.post0.dev20180213210433

对于Debian:

$ dpkg --compare-versions 1.3.0 gt 1.3.0.post0.dev20180213210433 ; echo $?
1  # false
$ dpkg --compare-versions 1.3.0 lt 1.3.0.post0.dev20180213210433 ; echo $?
0  # true

对于Python

>>> from pkg_resources import parse_version
>>> parse_version("1.3.0") > parse_version("1.3.0.post0.dev20180213210433")
False
>>> parse_version("1.3.0") < parse_version("1.3.0.post0.dev20180213210433")
True

对于Ruby

irb(main):001:0> Gem::Version.new("1.3.0") > Gem::Version.new("1.3.0.post0.dev20180213210433")
=> true
irb(main):002:0> Gem::Version.new("1.3.0") < Gem::Version.new("1.3.0.post0.dev20180213210433")
=> false

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.