前言
本文的“版本比较”主要是指比较 openEuler 操作系统两个版本之间的 rpm 包的版本差异,只比较版本差异,不比较文件内容的差异。
比较版本主要用于分析两个操作系统版本之间软件包的版本变化。
工具
oe_diff
工具地址:https://gitee.com/icanpool/shcanpool/blob/master/misc/sh/oe_diff.sh
帮助信息:
[root@localhost canpool]# bash shcanpool/misc/sh/oe_diff.sh -h
diff rpm packages between the two systems based on dnf repository
usage:
bash oe_diff.sh [-h] [-a REPOSITORY [-a ...]] [-b REPOSITORY [-b ...]] [-u] [-t]
optional arguments:
-a REPOSITORY A dnf repository address link (can be specified multiple times)
-b REPOSITORY B dnf repository address link (can be specified multiple times)
-u the flag that only output difference items
-t the flag that rpm name does not contain the dist suffix
-h show the help message and exit
examples:
bash oe_diff.sh -a A_ADDR -b B_ADDR
bash oe_diff.sh -a A_ADDR1 -a A_ADDR2 -b B_ADDR1 -b B_ADDR2
参数介绍:
- -a REPOSITORY:A版本操作系统的dnf仓库源地址,可以指定多次-s来指定多个源
- -b REPOSITORY:B版本操作系统的dnf仓库源地址,可以指定多次-s来指定多个源
- -u:如果指定该标志,将只输出差异项
- -t:如果rpm包文件名中没有dist后缀,如:oe2203sp1、oe2403,需要指定该标志
备注:
- 如果指定的dnf仓库源中包含二进制rpm、源rpm、调试rpm,工具将分组比较,先比较所有二进制rpm、再比较所有源rpm、最后比较所有调试rpm。
示例:
- 比较 openEuler-22.03-LTS-SP1 和 openEuler-22.03-LTS-SP3 两个版本之间 src.rpm 的差异
bash shcanpool/misc/sh/oe_diff.sh -a https://mirrors.jxust.edu.cn/openeuler/openEuler-22.03-LTS-SP1/source/ -a https://mirrors.jxust.edu.cn/openeuler/openEuler-22.03-LTS-SP1/update/source/ -b https://mirrors.jxust.edu.cn/openeuler/openEuler-22.03-LTS-SP3/source/ -b https://mirrors.jxust.edu.cn/openeuler/openEuler-22.03-LTS-SP3/update/source/ -u | tee oe2203sp1_diff_oe2203sp3.csv
比较结果分为多个字段,说明如下:
- type:指示rpm的类型,分为:binary,source,debug
- pkg_name:指示软件包名称
- op:指示变更操作,分为:equal updated degraded added removed unknown
- equal:相等
- updated:升级
- degraded:降级(根据版本比较结果判断是降级,如果只是release号降低,不一定代表版本降级,可能是gitee的两个版本分支修改记录不一致,但功能一致)
- added:新增
- removed:删除(废弃/清退)
- unknown:未知(版本未比较出大小)
- version_change:版本变化路线,A -> B
- a_rpm_name:A版本操作系统中的rpm包文件名
- a_ver_full:A版本操作系统的rpm包的完整版本号
- b_rpm_name:B版本操作系统中的rpm包文件名
- b_ver_full:B版本操作系统的rpm包的完整版本号
备注:比较之后发现存在降级的情况,其中mariadb确实存在版本号bug
oepkg
工具地址:https://gitee.com/icanpool/shcanpool/blob/master/misc/py/oepkg.py
帮助信息:
[root@localhost canpool]# python3 shcanpool/misc/py/oepkg.py cmp -h
usage: oepkg.py compare [-h] [--once] file1 file2
positional arguments:
file1 rpm filename list file1
file2 rpm filename list file2
optional arguments:
-h, --help show this help message and exit
--once remove duplicates
参数介绍:
- -file1:A版本操作系统的rpm包列表文件(已经过升序排列)
- -file2:B版本操作系统的rpm包列表文件(已经过升序排列)
- –once:如果指定该标志,将只输出差异项
备注:
- 工具只负责对比,不识别rpm包是二进制rpm、源rpm还是调试rpm包,由用户准备相关rpm列表文件
- 只要有两份rpm列表文件便可以对比,不限于 openEuler 两个版本之间对比,也可以 CentOS 和 openEuler 对比