Spec文件中判断是升级or卸载

Spec文件中判断是升级or卸载

我们在写spec文件时,有pre、post、preun、postun等模块用于指示安装前后以及卸载前后要执行的动作,而软件升级实际上是先卸载后安装的过程,所以这些模块内动作的编写需要区分是卸载还是升级以便采取不同的动作。

那么如何来进行区分呢?

脚本片段传递一个参数,用于表示本软件包的个数。执行特定动作时,通过向 $1传递不同值,来表示不同动作(安装/升级/卸载),除了 %pretrans 和 %posttrans 它们的 $1 为 0 (rpm 4.4+ 支持 %pretrans 和 %posttrans)。对于安装、升级和卸载,所传递的参数值如下表所示:

项目安装(install)升级(update/upgrade)卸载(remove/erase)
%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
%pretrans$1 == 0$1 == 0(N/A)
%triggerprein安装本包: $1 == 0, $2 == 1 安装目标包: $1 == 1, $2 == 0$1 == 1, $2 == 1(N/A)
%triggerin$1 == 1, $2 == 1升级本包: $1 == 2, $2 == 1升级目标包: $1 == 1, $2 == 2(N/A)
%triggerun(N/A)$1 == 1, $2 == 1卸载本包: $1 == 0, $2 == 1卸载目标包: $1 == 1, $2 == 0
%triggerpostun(N/A)升级目标包: $1 == 1, $2 == 1卸载目标包: $1 == 1, $2 == 0
%posttrans$1 == 0$1 == 0(N/A)

注意,如果安装相同软件包的多个版本,这些参数值将会不同(这发生于同时安装包,如 kernel 和 multilib 包。然而,它会引发错误,防止软件包升级完成)。所以,使用以下结构的脚本是个好主意:

%pre
if [ $1 -gt 1 ] ; then   # -gt大于
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值