Ubuntu dpkg版本号中冒号(:)和短横线(-)代表什么意思?

35
我正在尝试获取已安装软件包的版本号,以便为 dpkg 构建依赖项列表。
如果我在终端中输入 "dpkg -l | grep libqtcore4",我会得到以下结果:
ii  libqtgui4       4:4.7.4-0ubuntu8      Qt 4 GUI module
ii  libqtgui4:i386  4:4.7.4-0ubuntu8      Qt 4 GUI module

我的问题是:版本号中冒号(:)到底代表什么意思,结尾的-0ubuntu又是什么意思?


2
4:代表主版本4,4.7.4是实际的软件版本,它应用了Ubuntu自己的-0ubuntu8补丁集到原始版本上。 - Marc B
非常好的解释在 https://askubuntu.com/questions/441879/why-do-some-packages-have-extra-numbers-on-the-front-of-their-version-string。 - pevik
在https://help.launchpad.net/Packaging/PPA/BuildingASourcePackage中,我看到他们使用了`ubuntu3`,而在这里我看到了`ubuntu8`——`ubuntuN`是什么意思?它不是系列,打包指南说要单独指定。 - retorquere
2个回答

41
epoch 前的数字是纪元。这会覆盖版本号以便进行排序,例如,3:3.1被认为比2:3.2更新。当打包者需要由于各种原因而降级存储库中的软件包时会使用它。
- 后面的数字(实际上是值)是发布版。它区分了具有相同版本的软件包的不同发布版。例如,它用于对现有软件版本进行安全修补。

7
Debian版本格式的完整描述可在“deb-version(5)手册页”中找到。 - Guillem Jover

8

Debian政策手册

两者都在这个链接中有所涵盖:https://www.debian.org/doc/debian-policy/#version,该链接也被复制在:

man deb-version

那些手册说完整格式是:
[epoch:]upstream_version[-debian_revision]

epoch

手册上说:

它的作用是为了保留旧版本包的版本号中的错误以及包以前的版本编号方案。

例如,假设原始包有以下版本:

  • 2019.1
  • 2019.2
  • 1.2(原始包随意更改发布命名方案)
  • 1.3

那么Debian将其视为:

  • 0:2019.1(通常称为2019.1,因为可以省略前导的0:
  • 0:2019.2
  • 1:1.2(Debian将epoch从0增加到1以处理新的命名方案)
  • 1:1.3

这样,我们仍然可以清楚地知道软件包版本字符串的版本顺序,或者如果原始软件包在新方案中实际上重用旧名称发布,则可以完全区分它们。

你能想象Debian开发人员必须适应的可怕事情吗? :-)

debian_revision

手册上说:

版本号的这个部分指定了基于上游版本的Debian软件包的版本。

由于Debian软件包本身在软件源代码之上使用了构建脚本/补丁的更改,因此需要Debian修订版。

-ubuntuY

Ubuntu还可以添加-ubuntuY后缀,以解决Ubuntu打包与Debian打包的不同之处。

例如,4:4.7.4-0ubuntu8表示这是基于4:4.7.4 Debian软件包的第8个Ubuntu软件包版本。

这是因为Ubuntu以Debian为基础,但也可以在其上添加其他更改。

当Debian软件包没有编号时,0只充当占位符,因为debian_revision是可选的。

更多详细信息请参见:https://serverfault.com/questions/604541/debian-packages-version-convention/708569#708569


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接