开发者社区> 问答> 正文

打rpm包时,遇到一个问题

已解决

最近完成了PHP5.5.25的rpm打包。今天在升级其中一个扩展的时候发现,只要升级成功之后,扩展在配置文件中相关配置项就会被注释掉。是什么原因?

展开
收起
exinnet 2016-01-25 16:37:43 2741 0
1 条回答
写回答
取消 提交回答
  • 淘宝技术专家
    采纳回答

    原因

    为啥在执行yum update 命令时,会导致扩展的配置项被自动注释掉呢?原因就在于spec执行顺序。
    假如你升级前的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的相关选项。我们只要增加判断就可以了。代码如下:

    %postun
    if [ $counter == 0 ] ; then
    conf_path="/php-fpm/lib/php.ini"
    sed -i 's/^[tclip]/;[tclip]/g' $conf_path
    sed -i 's/^extension=tclip.so/;extension=tclip.so/g' $conf_path
    fi
    完整的参数传递如下:

    %pre和%post段

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

    %preun和%postun段

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

    参考文档

    Packaging software with RPM, Part 2: Upgrading and uninstalling software

    2019-07-17 18:26:28
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载