博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注💖点赞👍收藏⭐留言💬
目录
- 升级命令
- 执行顺序
- 重要参数
- 版本问题
- 注意事项
升级命令
rpm安装包的升级命令为 rpm -Uvh ${安装包文件名}
。执行此命令后,会先安装新版本的rpm安装包,然后再卸载旧版本。
如果在执行升级时,当前计算机的rpm数据库中没有该软件的任何版本,那么升级的执行效果将和新安装一样。
执行顺序
升级时,spec中各个阶段的脚本将按以下顺序运行:
%pretrans of new package
%pre of new package
(package install)
%post of new package
%triggerin of other packages (set off by installing new package)
%triggerin of new package (if any are true)
%triggerun of old package (if it’s set off by uninstalling the old package)
%triggerun of other packages (set off by uninstalling old package)
%preun of old package
(removal of old package)
%postun of old package
%triggerpostun of old package (if it’s set off by uninstalling the old package)
%triggerpostun of other packages (if they’re set off by uninstalling the old package)
%posttrans of new package
我们在制作rpm安装包,就需要根据这个执行顺序,考虑新旧两个版本安装包的spec文件的内容。
重要参数
在rpm安装过程中,每个阶段的脚本被调用时,会接收到一个参数$1
。此参数的含义是在操作完成时留在系统上的此名称的包的数量。因此,对于安装、升级和卸载的常见情况,我们有:
install | upgrade | uninstall | |
---|---|---|---|
%pretrans | $1 == 1 | $1 == 2 | (N/A) |
%pre | $1 == 1 | $1 == 2 | (N/A) |
%post | $1 == 1 | $1 == 2 | (N/A) |
%preun | (N/A) | $1 == 1 | $1 == 0 |
%postun | (N/A) | $1 == 1 | $1 == 0 |
%posttrans | $1 == 1 | $1 == 2 | (N/A) |
请注意,如果安装了同一软件包的多个版本,这些值会有所不同(这主要发生在可并行安装的软件包中,如内核和multilib软件包。但是,当有报错阻止了软件包升级完成时,也可能发生这种情况。)因此,以下代码算是一个最佳实践:
%pre
if [ $1 -gt 1 ] ; then
# echo " 进入升级!"
# 输入您的逻辑。
fi
对于%pre和%post脚本,应该检查$1
是否大于1,而不是检查是否等于2。
在编写spec脚本时,此参数可以在升级流程中发挥较大的作用。
版本问题
版本的命名规则最好统一,推荐三段式的${主版本号}.${次版本号}.${修订号}
。应该避免上个版本三段式,下个版本二段式。
如果在开发前期没有规划好,或者后期计划有变,出现三段式和二段式混用,rpm也能进行版本号的比较。需要注意的是,在rpm看来,任意${主版本号}.${次版本号}.${修订号}
在主版本号和次版本号相同的情况下,都会比二段式的版本更加新,即使修订号为零,也是如此。
如下图所示,rpm认为4.0.0和4.0是不同的版本,且4.0.0是较新的版本。
注意事项
如果在升级时,不小心输入为安装指令,这种情况下会同时存在新旧两个版本的软件,如果这不是你所期望的,可以在安装命令运行完成后,再通过rpm -e
卸载旧版本。如果两个版本安装在同一个目录下,新旧文件混合在一起,其实也不用担心,在执行卸载时,rpm会按照软件包中的文件列表将文件逐个删除,如果其中有文件属于别的软件包(即两个软件包拥有一个名字相同的文件),则rpm并不删除。所以卸载不会导致新版本软件不可用。
如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。