AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 454462
Accepted
Jonathan Clarke
Jonathan Clarke
Asked: 2012-12-03 23:52:00 +0800 CST2012-12-03 23:52:00 +0800 CST 2012-12-03 23:52:00 +0800 CST

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

  • 772

为了发布一些软件的几个不同版本的 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。

package-management
  • 5 5 个回答
  • 13802 Views

5 个回答

  • Voted
  1. Michael Hampton
    2012-12-04T08:58:46+08:002012-12-04T08:58:46+08:00

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

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

    • 6
  2. Best Answer
    stochastic
    2017-08-09T09:06:02+08:002017-08-09T09:06:02+08:00

    官方 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
    • 4
  3. Will
    2012-12-04T04:20:42+08:002012-12-04T04:20:42+08:00

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

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

    如果市场营销不喜欢“构建”是大整数,您可以仅在已发布的构建上增加次要数字一次以进行市场营销,然后在进入工程时再次增加。

    • 2
  4. nicocesar
    2018-12-06T08:18:43+08:002018-12-06T08:18:43+08:00

    我遇到了类似的问题,我不得不比较 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
    

    对于红宝石

    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
    
    • 1
  5. Michael Snook
    2020-04-07T08:12:51+08:002020-04-07T08:12:51+08:00

    从版本 4.10.0 开始,RPM 正式支持问题中提到的 dpkg 样式波浪号编号。

    https://rpm.org/wiki/Releases/4.10.0

    • 0

相关问题

  • 如何使程序从源代码保持最新?

  • Firefox 打包以包含用于网络安装的插件

  • 使用 YUM 将属于已安装 RPM 的文件替换为不同的 RPM

  • 如何及时了解有关 UNIX 软件补丁和升级的最新信息?

  • 从零开始 Linux 上的包管理

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve