【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 包,脚本运行顺序如下:

  1. 安装:%pre → 安装文件 → %post
  2. 升级:旧版本的 %preun → 替换文件 → 新版本的 %pre → 安装文件 → 新版本的 %post → 旧版本的 %postun
  3. 卸载:%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 阶段(规范文件)执行脚本

3. spec文件:%systemd_post()

posted @ 2023-09-11 10:49  苏格拉底的落泪  阅读(1335)  评论(0)    收藏  举报