【rpm编程】在安装和升级 %pre、%post、%preun 或者 %postun 阶段执行脚本
在安装和升级 %pre、%post、%preun 或者 %postun 阶段执行脚本
RPM 规范文件有几个部分,允许包在安装和删除时运行代码。这些代码被称为scriptlet,主要用于使用包中的信息更新正在运行的系统。当调用 scriptlet 时,它们将被提供一个参数。
这个参数,通过 $1
访问(对于 shell
脚本)是这个名称的包的数量,当操作完成时它将留在系统上。所有脚本必须以0退出状态退出。
- 脚本%pre 和 %post 分别在安装rpm包之前和之后运行。
- 脚本 %preun 和 %postun 分别在卸载rpm包之前和之后运行。
- 脚本 %pretrans 和 %posttrans 分别在事务的开始和结束时运行。
升级时,脚本按以下顺序运行:
- 新软件包的%pre
(安装软件包) - 新软件包的%post
- 旧软件包的%preun
(移除旧安装包) - 旧软件包的%postun
整体执行流程:假设安装、升级或卸载一个 RPM 包,脚本运行顺序如下:
- 安装:
%pre
→ 安装文件 →%post
- 升级:旧版本的
%preun
→ 替换文件 → 新版本的%pre
→ 安装文件 → 新版本的%post
→ 旧版本的%postun
- 卸载:
%preun
→ 删除文件 →%postun
安装 | 升级 | 卸载 | |
%pretrans | $1 == 0 | $1 == 0 | 不适用 |
%pre | $1 == 1 | $1 == 2 | 不适用 |
%post | $1 == 1 | $1 == 2 | 不适用 |
%preun | 不适用 | $1 == 1 | $1 == 0 |
%postun | 不适用 | $1 == 1 | $1 == 0 |
%posttrans | $1 == 0 | $1 == 0 | 不适用 |
%pre
echo "-------------"
echo "This is pre"
echo "Install Value: "
echo "Upgrade Value: "
echo "Uninstall Value: "
echo "-------------"
%post
echo "-------------"
echo "This is post"
echo "Install Value: "
echo "Upgrade Value: "
echo "Uninstall Value: "
echo "-------------"
%preun
echo "-------------"
echo "This is preun"
echo "Install Value: "
echo "Upgrade Value: "
echo "Uninstall Value: "
echo "-------------"
%postun
echo "-------------"
echo "This is postun"
echo "Install Value: "
echo "Upgrade Value: "
echo "Uninstall Value: "
echo "-------------"
安装rpm软件包
以下是安装 rpm 时的脚本值
# rpm -ivh /tmp/rpmbuild/RPMS/x86_64/jack-1.0.0-1.x86_64.rpm
Preparing... ################################# [100%]
------------
This is pre
Install Value: 1
Upgrade Value: 1
Uninstall Value: 1
------------
Updating/installing...
1:jack-1.0.0-1 ################################# [100%]
------------
This is post
Install Value: 1
Upgrade Value: 1
Uninstall Value: 1
------------
更新rpm软件包
# rpm -Uvh /tmp/rpmbuild/RPMS/x86_64/jack-2.0.0-1.x86_64.rpm
Preparing... ################################# [100%]
------------
This is pre
Install Value: 2
Upgrade Value: 2
Uninstall Value: 2
------------
Updating/installing...
1:jack-2.0.0-1 ################################# [ 50%]
------------
This is post
Install Value: 2
Upgrade Value: 2
Uninstall Value: 2
------------
------------
This is preun
Install Value: 1
Upgrade Value: 1
Uninstall Value: 1
------------
Cleaning up/removing...
2:jack-1.0.0-1 ################################# [100%]
------------
This is postun
Install Value: 1
Upgrade Value: 1
Uninstall Value: 1
参考资料
1. spec文件中的 %pre %post %preun %postun
2. 在安装/升级 rpm 时如何在 %pre、%post、%preun 或者 %postun 阶段(规范文件)执行脚本