rpm -Uvh 升级时的陷阱

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

问题现象

用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了。

这是个坑!

目录
相关文章
Yum工具详解(二)-----Yum配置阿里源
Yum工具详解(二)-----Yum配置阿里源
2539 1
解决办法:发生故障,这可能是有软件包被要求保持现状的缘故
解决办法:发生故障,这可能是有软件包被要求保持现状的缘故
628 0
|
1月前
|
存储 Cloud Native Linux
CentOS“平替”方案问题之Fedora Linux的定义如何解决
CentOS“平替”方案问题之Fedora Linux的定义如何解决
25 0
|
3月前
|
Ubuntu Linux
【问题复盘】在Ubuntu 20.04下安装OFED驱动 复盘:在Ubuntu 20.04下安装OFED驱动
整个问题主要是由于不同的内核版本导致文件路径不同,进而导致安装过程中某些库无法按预期安装而出现问题。 为什么使用最新的OFED驱动解决了问题呢?推测是最新驱动补充了之前缺失的某些文件,因此后续安装过程能够正常进行。 例如,在OFED 5.4中,某个安装所需的文件F位于A处,但安装程序却在B处查找该文件,导致报错。而在OFED 5.8中,该安装所需的文件F被移回到B处,此时不管去哪里查找都能找到文件F,因此安装可以正常进行。
|
3月前
|
Java 编译器 Linux
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
70 0
|
4月前
|
数据库 容器
RPM属性依赖的解决方法: YUM线上升级
【5月更文挑战第14天】RPM属性依赖的解决方法: YUM线上升级。
45 1
|
4月前
|
Linux
Linux学习易错点-网络yum源的配置过程
Linux学习易错点-网络yum源的配置过程
80 1
解决办法:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
解决办法:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
1359 0
|
Linux C语言
Linux gcc升级全过程,过程超详细
Linux gcc升级全过程,过程超详细
4422 0
Linux gcc升级全过程,过程超详细
|
Linux
LINUX安装依赖库冲突的最终版本:下列软件包有未满足的依赖关系/但是它将不会被安装/无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
LINUX安装依赖库冲突的最终版本:下列软件包有未满足的依赖关系/但是它将不会被安装/无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
822 0