Debian package versioning
Introduction
Start here: section 5.6.12 of the Debian Policy
Manual,
or see the man page for deb-version
.
The package version is
upstream_version[-debian_revision]
A package without a Debian revision number indicates the software was written to be a Debian package.
Examples
slapd (2.4.44+dfsg-5+deb9u2
): The upstream version is 2.4.44+dfsg
and
the Debian revision is 5+deb9u2
.
linux-base (4.5~deb8u1
): The upstream version is 4.5~deb8u1
and there is
NO Debian revision number.
The first number in the Debian revision indicates how often the Debian
package has been revised, starting over at 1
when the upstream version
changes. The +deb9u2
indicates that the Debian packaging itself has not
changed, but that a patch has been added to the Debian package build to
address some security or other type of bug.
Version ordering
The package installation system when upgrading packages choose to overwrite an older version of a package with a newer package. In this case "newer" means the version number is larger. Thus, how versions are compared is important. To compare two versions, you can use
dpkg --compare-versions 11a lt 100a && echo true
(Source: StackOverflow.)
For the detailed algorithm on version comparisons, see section 5.6.12 of the Debian Policy Manual.
Using tilde (~
) in the Debian version
The tilde character is sometimes used in the Debian version portion of the version and has the unusual characteristic of forcing the version to be sorted earlier (assuming the initial portions are the same). This is easiest to see with an example:
1.2-4~a~a < 1.2-4~a < 1.2-4~b < 1.2-4 < 1.2-5~a < 1.2-5 < 1.3-1
In particular, this is useful in when bulding "temporary" backports. This
is best illustrated with an example. Assume the stable release is buster
(10) and that the package mypackage
has version 6-1
in buster. Version
8-1
is in sid
and you want to use this version on your buster
servers. So you build the package for buster and give it the version
8-1~bp10+1
. You then install this version on all of your buster
servers. When it is time to upgrade your servers to bullseye (11), if
version 8-1
is (still) the current version in bullseye, then bullseye's
version will take precedence over version 8-1~bp10+1
ensuring that you
get the official Debian package installed.
See section 5.6.12 of the Debian Policy Manual for more details.
Notes
You may see the string +dfsg
added to the end of version string. From
What does "dfsg" or "ds" in the version string
mean?:
"+dfsg.N" and '+ds.N" are a conventional way of extending a version string, when the Debian package's upstream source tarball is actually different from the source released upstream. The former is used when upstream's source release contains elements that do not satisfy the Debian Free Software Guildelines (DFSG) and hence may not be distributed as source in the Debian system, the latter (standing for "Debian Source') is used when the modification are for other non-DFSG reasons.