Debian软件包版本号详解

最近在发布一个软件时, 用了这么一个版本号: 3.0-beta3, 正式release时用的版本号是3.0, 实际上了后, 发现reprepro(一个构建debian源的工具)认为 3.0 < 3.0-beta3, 百思不得其解. 又不得不翻一翻Debian的文档库.

先看看文档给出的例子:

The version comparison rule can be summarized as:

Strings are compared from the head to the tail.

Letters are larger than digits.

Numbers are compared as integers.

Letters are compared in ASCII code order.

There are special rules for period (.), plus (+), and tilde (~) characters, as follows.

0.0 < 0.5 < 0.10 < 0.99 < 1 < 1.0~rc1 < 1.0 < 1.0+b1 < 1.0+nmu1 < 1.1 < 2.0

来源: http://www.debian.org/doc/manuals/maint-guide/first.zh-cn.html#namever

仔细一看, 找不到-号的说明, 再翻

Debian 二进制软件包的命名格式: <foo>_<版本号>-<Debian修订号>.deb

注意, foo 是假定的软件包名. 作为检验, 你可以通过下面的方法之一了解和软件包名称对应的一个 debian 软件包(.deb 文件):

检查 Debian FTP 站点下的 "Packages" 文件, 文件中包含对于每个软件包的描述段, 每个描述段的第一个字段就是正式包名.

使用命令 dpkg --info foo_VVV-RRR.deb (这里 VVV 和 RRR 是被查询包的版本和修订版本). 显示的内容中将包含软件包的对应名称.

VVV 是指该软件开发者制定的版本号, 没有什么标准格式, 可能像 "19990513" 和 "1.3.8pre1" 一样有所不同..

RRR 是 Debian 的修订版本号, 由 Debian 开发者(或者创建 Debian 包的用户自己)指定, 反映了 Debian 软件包的修正层次, 一个新的修正版通常在 Debian Makefile (debian/rules)文件 Debian 控制文件, 安装, 删除脚本(debian/p*), 或软件包的配置文件中作了修改.

来源: http://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.zh-cn.html#s-pkgname

现在可以明白些了, 对于-号, -号后面的段是做为debian修订版本号(一般是debian自己给软件打上的修订补丁), 所以3.0-beta3 对于 3.0 来说, 是3.0版本在debian上的修订版本

我们来测试下

igi@hostname:~$ dpkg --compare-versions 3.0-beta3 lt 3.0
igi@hostname:~$ echo $?
1
igi@hostname:~$ dpkg --compare-versions 3.0-beta3 gt 3.0
igi@hostname:~$ echo $?
0

lt返回值非0, gt返回值为0, 说明3.0-beta3版本是大于3.0的

因为这个3.0-beta3的版本是开发者自已的版本, 根据文档, 正确应该写成3.0~beta3. 来测试看看

igi@hostname:~$ dpkg --compare-versions 3.0~beta3 lt 3.0
igi@hostname:~$ echo $?
0
igi@hostname:~$ dpkg --compare-versions 3.0~beta3 gt 3.0
igi@hostname:~$ echo $?
1

现在终于对debian软件版本号有一清晰的理解

2014-03-31 10:48512debian