rpm -Uvh 升级时的陷阱

Posted morgan363

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rpm -Uvh 升级时的陷阱相关的知识,希望对你有一定的参考价值。

问题现象

        用rpm -Uvh升级后,原先的一个软链接被删除了,而采用先rpm -e 卸载rpm包,再rpm -ivh 安装包的方法,这个软链接还在。这个软链接是在rpm包安装的时候建立,也只有在rpm卸载的时候会删除。

        为什么Uvh升级的时候会删除它?

 

解决过程

        软链接的删除是写在 sepc文件的%preun段,软链接的建立在spec文件的%post段,所以我去查了升级的时候,spec文件里各个段的执行顺序。

 

升级时执行顺序

        1、执行新包spec文件中 %pre 段.
        2、安装新包的相关依赖包.
        3、执行新包spec文件中的 %post 段.
        4、执行旧包spec文件中的 %preun 段.
        5、删除新包中不需要的旧文件。
        6、执行旧包spec文件中的 %postun 段.

        答案就很显然了,升级过程中是先安装新包,再卸载旧包,所以软链接就被删除掉了。

 

解决方法

        当进行不同操作的时候,会传递不同的参数给段,完整的参数传递及释义如下。

%pre和%post段
当传递的第一个参数为1时,表示新安装一个rpm包。
当传递的第一个参数为2时,表示升级一个已经存在的包。
 
%preun和%postun段
当传递的第一个参数为0时,表示删除一个包。
当传递的第一个参数为1时,表示更新一个包。

 

        因此,在删除链接之前判断一下所传的参数是0还是1就ok了。

        这是个坑!

 

以上是关于rpm -Uvh 升级时的陷阱的主要内容,如果未能解决你的问题,请参考以下文章

Go 使用json时的陷阱

在程序以状态退出后执行 EXIT 陷阱时的 Bash 函数范围状态!= 0(设置 -e)

添加片段时的 FlyOut 菜单设计问题

java中在for循环中remove元素时的陷阱

perl/shell 脚本中存在语法错误时的 rpm 构建预防

升级Win10官方工具“陷阱”移除:方式简单粗暴