我使用的是 debian/Ubuntu,对软件包的版本感到困惑。使用dpkg -l
命令时,我得到:
ii vim 2:7.3.429-2ubuntu2.1 Vi IMproved - enhanced vi editor
ii vim-common 2:7.3.429-2ubuntu2.1 Vi IMproved - Common files
ii vim-runtime 2:7.3.429-2ubuntu2.1 Vi IMproved - Runtime files
ii vim-tiny 2:7.3.429-2ubuntu2.1 Vi IMproved - enhanced vi editor - compact version
ii virt-what 1.11-1 detect if we are running in a virtual machine
ii w3m 0.5.3-5ubuntu1 WWW browsable pager with excellent tables/frames support
ii watershed 6 reduce superfluous executions of idempotent command
ii wget 1.13.4-2ubuntu1 retrieves files from the web
ii whiptail 0.52.11-2ubuntu10 Displays user-friendly dialog boxes from shell scripts
ii whoopsie 0.1.33 Ubuntu crash database submission daemon
ii wimlib9 1.5.0-1~webupd8~precise Library to extract, create, modify, and mount WIM files
ii wimtools 1.5.0-1~webupd8~precise Tools to extract, create, modify, and mount WIM files
ii wireless-tools 30~pre9-5ubuntu2 Tools for manipulating Linux Wireless Extensions
ii wpasupplicant 0.7.3-6ubuntu2.1 client support for WPA and WPA2 (IEEE 802.11i)
ii x11-common 1:7.6+12ubuntu2 X Window System (X.Org) infrastructure
ii x11-utils 7.6+4ubuntu0.1 X11 utilities
ii xauth 1:1.0.6-1 X authentication utility
ii xbitmaps 1.1.1-1 Base X bitmaps
ii xclip 0.12-1 command line interface to X selections
ii xfonts-encodings 1:1.0.4-1ubuntu1 Encodings for X.Org fonts
ii xfonts-utils 1:7.6+1 X Window System font utility programs
ii xkb-data 2.5-1ubuntu1.3 X Keyboard Extension (XKB) configuration data
ii xml-core 0.13 XML infrastructure and XML catalog file support
rc xpdf 3.02-21build1 Portable Document Format (PDF) reader
ii xterm 271-1ubuntu2.1 X terminal emulator
ii xz-lzma 5.1.1alpha+20110809-3 XZ-format compression utilities - compatibility commands
ii xz-utils 5.1.1alpha+20110809-3 XZ-format compression utilities
ii zabbix-agent 1:1.8.11-1 network monitoring solution - agent
ii zlib1g 1:1.2.3.4.dfsg-3ubuntu4 compression library - runtime
ii zlib1g-dev 1:1.2.3.4.dfsg-3ubuntu4 compression library - development
ii zsh 4.3.17-1ubuntu1 shell with lots of features
第三列是version
,但它完全“混乱”,我无法理解。我的意思是,不同的包使用完全不同的命名规范。
以下是主要问题:
- 为什么有的版本号有
ubuntu
,有的没有? - 所有特殊标点符号
-~+
代表什么意思? alpha
、build
和 是什么dfsg
?我可以随便使用它们吗?vim
和其他软件包都有2:
。那是什么意思?- 当版本格式如此不同时,“版本比较”如何工作?
有人能给我解释一下吗?或者我可以在哪里找到官方文件?
提前致谢。
答案1
这Debian 政策手册关于版本字段有这样的说法,它回答了你的问题的部分内容:
[格式] 1
...格式为:
[epoch:]upstream_version[-debian_revision]
这里的三个组成部分是:
时代
这是一个(通常很小的)无符号整数。可以省略,在这种情况下假定为零。
当上游版本编号方案发生变化时,纪元会有所帮助,但必须谨慎使用。在没有首先在 debian-devel 上达成共识的情况下,您不应更改纪元,即使是实验性的。
上游版本
这是版本号的主要部分。
.deb
如果适用,它通常是生成文件的原始(“上游”)软件包的版本号。通常,它将采用与上游作者指定的格式相同的格式;但是,可能需要重新格式化以适应软件包管理系统的格式和比较方案。下面描述了软件包管理系统相对于的比较行为
upstream_version
。upstream_version
版本号部分是必需的。必须
upstream_version
仅包含字母数字[6]
和字符"."
(句号)、"+"
(加号)、"-"
(连字符)、"~"
(波浪号) 2,并且应以数字开头。如果没有,debian_revision
则不允许使用连字符。debian_修订版本
版本号的这一部分根据上游版本指定 Debian 软件包的版本。它只能包含字母数字和字符
"+"
(加号)、"."
(句号)、"~"
(波浪号),其比较方式与upstream_version
is 相同。惯例是,
debian_revision
每次upstream_version
增加时,都从 1 重新启动。包管理系统将在字符串的最后一个连字符处将版本号分开(如果有的话),以确定 和
upstream_version
。debian_revision
没有 adebian_revision
相当于 adebian_revision
为 0。存在该
debian_revision
部分表示该包为非本地包(请参阅源包)。不存在该部分表示该包为本地包。[比较] 1
比较两个版本号时,首先比较各自的 epoch,然后
upstream_version
如果 epoch 相等,再比较debian_revision
是否upstream_version
也相等。epoch 以数值方式进行比较。软件包管理系统使用以下算法比较upstream_version
和部分:debian_revision
字符串从左到右进行比较。
首先确定每个字符串的初始部分,这些部分完全由非数字字符组成。对这两个部分(其中一个部分可能为空)进行词汇比较。如果发现差异,则返回差异。词汇比较是 ASCII 值的比较,经过修改,所有字母都排在所有非字母之前,波浪号排在任何部分之前,甚至是部分的结尾。例如,以下部分按从最早到最新的顺序排序:、、、
~~
空 部分、。~~a
~
a
[7]
然后确定每个字符串剩余部分的初始部分(该部分完全由数字字符组成)。比较这两个部分的数值,并将发现的任何差异作为比较结果返回。为此,空字符串(只能出现在被比较的一个或两个版本字符串的末尾)计为零。
重复这两个步骤(比较并删除初始非数字字符串和初始数字字符串),直到发现差异或两个字符串都用尽。
5.6.12.1. 应谨慎使用纪元
请注意,epoch 的目的是为了应对上游版本编号方案发生变化的情况,并允许我们遗漏严重错误。如果您认为增加 epoch 是正确的解决方案,您应该在这样做之前咨询 debian-devel 并达成共识(即使是在实验阶段)。
当需要回滚软件包时,不应使用纪元。在这种情况下,请使用惯例
+really
:例如,如果您已上传2.3-3
,现在需要回滚到上游 2.2,请将恢复上传命名为2.3+really2.2-1
。最终,当我们上传上游 2.4 时,该+really
部分可以消失。纪元也无法处理包含包管理系统无法解释的字母串的版本号(例如
ALPHA
或pre-
),或者包含愚蠢的排序的版本号。[8]
此外,从Ubuntu 维护者手册:
该
ubuntu
字符串标记了其后面的内容与 Ubuntu 中添加的更改相关。
该alpha
字符串似乎没有任何特殊含义。
该buildX
后缀由 Ubuntu 使用,例如表示无变化重建。
dfsg
指的是已经修改的
为了遵守Debian 自由软件指南。
脚注3
答案2
XubuntuY
部分版本例如1ubuntu1
X
是 Debian 软件包版本。大多数 Ubuntu 软件包都基于 Debian 软件包,这是一个“上游”发行版。如果
0
,这意味着没有 Debian 包:它只存在于 Ubuntu 中。X
当实际上游版本更新时重置,例如从 Binutils 2.25 更新至 Binutils 2.26。Debian 版本之所以存在,是因为 Debian 可能会对软件包进行修补,以便其在 Debian 系统或安全版本中更好地运行。
Debian 开发人员当然热衷于合并补丁以避免分叉。
每次制作一组新的补丁时,这个数字就会增加。
ubuntuY
是可选的。如果不存在,则表示直接使用 Debian 包。
否则,这意味着这是在 Debian 补丁之上应用的第 Y 个 Ubuntu 补丁,就像 Debian 在真正的上游之上应用一样。
Y
增加时重置X
。
如果你通过以下方式获取包的源代码:
apt-get source gdb
您将在以下位置看到 Ubuntu 和 Debian 应用的补丁:
debian/patches/
更有趣的是,你可以克隆bzr
并查看所有 Ubuntu 版本的列表以及它们之间的变化:
bzr branch ubuntu:gdb
cd gdb
bzr log | less
时代实际上代表什么