1. 使用-U 进行升级新的rpm包的version一定要大于现有的version号(好像是在说废话),否则不能升级
2. 介绍rpm包中预定义的脚本:
%pre 在安装包之前运行
%post 在安装包之后运行
%preun 在卸载包之前运行
%postun 在卸载包之后运行
这些脚本可以帮助用户在不同的时间点完成一些必须的事情。
然后再说下RPM -U中这些脚本的调用步骤:
运行新包的 %pre
安装新文件
运行新包的 %post
运行旧包的 %preun
删除新文件未覆盖的所有旧文件
运行旧包的 %postun
大家可以仔细看看以上步骤,细心的应该已经能发问了:
1. 在执行%pre和%post上如何区分是install还是upgrade
2. 在执行%preun和%postun又如何区分upgrade和uninstall
这里就要介绍rpm的一个内部变量了:$1
Action | Count |
Install the first time | 1 |
Upgrade | 2 or higher (depending on the number of versions installed) |
Remove last version of package | 0 |
对了,在需要通过$1 的值来区分是哪个操作, 如:
[plain] view plaincopy
if [ "$1"="1" ];then
xxxx
fi
由于在上一个release的rpm包中没有在%preun进行类似的判断,导致在upgrade中调用了%preun,这个脚本会对现有的rpm进行一些破坏。无法挽回
当然也为接下来的知识点做了铺垫,只能感叹,RPM真是博大精深啊!
请关注这个参数:--nopreun
rpm -Uvh --nopreun xxx-1.1-1.x86_64.rpm