https://blog.csdn.net/mrhesongze/article/details/81984409

假如你升级前的php-tclip包的版本是1.0。升级后的php-tclip包的版本是2.0。
当你执行yum update php-tclip -y 命令升级时,%post和%postun段的执行顺序如下:
首先,执行新的2.0包spec文件中的%post段代码。
然后,执行旧的1.0包spec文件中的%postun段代码。

当升级时,完整的执行流程如下:
1、执行新包spec文件中 %pre 段.
2、安装新包的相关依赖包.
3、执行新包spec文件中的 %post 段.
4、执行旧包spec文件中的 %preun 段.
5、删除新包中不需要的旧文件。
6、执行旧包spec文件中的 %postun 段.

解决方案

 

其实不同的操作,会传不同的参数给 %postun段。当,传给%postun段的第一个参数是0时,代表卸载。我们的本意只有在卸载的时候,才需要执行%postun段的代码,自动注释php.ini的相关选项。我们只要增加判断就可以了。代码如下:

 

  1. %postun
  2. if [ $1 = “0” ] ; then
  3. conf_path=“/php-fpm/lib/php.ini”
  4. sed -i ‘s/^\[tclip\]/;\[tclip\]/g’ $conf_path
  5. sed -i ‘s/^extension=tclip.so/;extension=tclip.so/g’ $conf_path
  6. fi

 

完整的参数传递如下:

%pre和%post段

当传递的第一个参数为1时,表示新安装一个rpm包。
当传递的第一个参数为2时,表示升级一个已经存在的包。

%preun和%postun段

当传递的第一个参数为0时,表示删除一个包。
当传递的第一个参数为1时,表示更新一个包。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注