问题现象

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

这是个坑!

最新文章

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

热门文章

  1. 20162305李昱兴 2016-2017-2 《Java程序设计》第2周学习总结
  2. LINUX系统运行查看
  3. AtCoder Regular Contest 099
  4. [国家集训队2011]happiness
  5. HBase 协处理器---基本概念和regionObserver的简单实现
  6. java中规范语句
  7. Java子类强制转父类类型不会变
  8. java实现定时任务的三种方法 - 转载
  9. SubSets,SubSets2, 求数组所有子集
  10. MFC--自定义CMFCTabCtrl的实现