deb 包版本大小比较
deb 包的版本号组成如下:[epoch:]upstream_version[-debian_revision]
Ubuntu 下面没有找到类似 rpm -qa
的查看当前已安装的包的原始文件名的工具,所有的工具都显示的是解析后的包信息,因此不是很确定 epoch
字段会不会出现在原始的 deb 安装包文件名中,但是理论上应该是和 rpm 包一样,epoch
只是一个属性值,一般不直接体现在原始的安装包文件名中。
安装包 name
、version
、arch
以下划线作为分隔,其中 upstream_version
与 debian_revision
以最后一个中划线作为分隔,以如下所示的安装包为例:
ceph-common_14.0.1-747-gc89e071-1bionic_amd64.deb
name: ceph-common
version: 14.0.1-747-gc89e071-1bionic
upstream_version: 14.0.1-747-gc89e071
debian_revision: 1bionic
arch: amd64
版本号的比较有 python 和 shell 两种方式:
import apt_pkg
apt_pkg.init_system()
a = '12.2.9-1ubuntu'
b = '12.2.9-1+ubuntu'
vc = apt_pkg.version_compare(a, b)
if vc > 0:
print('version a > version b')
elif vc == 0:
print('version a == version b')
elif vc < 0:
print('version a < version b')
~$ dpkg --compare-versions 12.2.9-1ubuntu lt 12.2.9-1+ubuntu && echo true
true
~$ dpkg --compare-versions 12.2.9-1ubuntu gt 12.2.9-1+ubuntu && echo true
参考资料
Debian Policy Manual
https://www.debian.org/doc/debian-policy/ch-controlfields.html#version
Python: How to compare Debian package versions
https://stackoverflow.com/questions/4957514/python-how-to-compare-debian-package-versions
最后修改于 2019-02-02