rpm -Uvh 升级时的陷阱
2024-10-20 07:48:23
问题现象
用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了。
这是个坑!
最新文章
- Ubuntu系统字体安装
- COJ0700 数学(一)
- 【crunch bang】增加壁纸图片文件
- Objective-C: 字符串NSString与NSMutableString
- jQuery的jsonp跨域是这么回事.
- C++实现网格水印之调试笔记(四)—— 完成嵌入
- 有些方法为什么会声明称static静态的
- 如何从数据库(实体提供者)读取安全用户(转自http://wiki.jikexueyuan.com/project/symfony-cookbook/entity-provider.html)
- LeetCode: Distinct Subsequences [115]
- PowerShell 批量修改AD属性
- Java中的集合框架(上)
- JS文件中获取contextPath的方法
- C++何时需要NEW对象,new和定义对象的区别
- Python排序算法——冒泡排序
- C#调用Delphi DLL获取字符串(C# IntPtr 与 string互转 )
- Typescript高级类型与泛型难点详解
- 【C++】C++中int与string的相互转换
- php获取ip地址所在的地理位置的实现
- 基于ARM9和嵌入式Linux系统的多功能综合通信控制系统的框架
- Mock.js的简单使用