【发布时间】:2014-10-31 05:54:24
【问题描述】:
问题描述:
- 我制作了一个 rpm 包,它删除了卸载时的所有文件。
- 我想制作一个 rpm 包,它也可以处理升级选项 (-U)
- 所以我以这种方式实现 rpm spec 文件(基于 $1 值),
但由于此实现不存在于已安装的版本中。以前的 rpm 删除了我的所有文件夹。 我正在考虑编辑以前的规范文件。但无法找到此规范文件的路径。
我该如何解决这个问题。
感谢和问候,
【问题讨论】:
问题描述:
但由于此实现不存在于已安装的版本中。以前的 rpm 删除了我的所有文件夹。 我正在考虑编辑以前的规范文件。但无法找到此规范文件的路径。
我该如何解决这个问题。
感谢和问候,
【问题讨论】:
这不是它的工作原理。磁盘上不存在以前的规范文件。它包含的 scriptlet 存储在 rpm 数据库中。你不能“编辑”它。
您可以通过运行 rpm --noscripts -e <package> 来阻止脚本运行,但您不想在 ugprade 期间或删除任何其他软件包时这样做。
我假设您的软件包正在删除 %post 中的文件。如果它们不是您可以轻松重新创建/等的文件。那么您唯一的选择是复制%pre 中的所有文件,然后在专为此类紧急清理而设计的特殊触发器中将它们全部恢复。
来自http://rpm.org/api/4.4.2.2/triggers.html:
还有另一种类型的触发器可用——triggerpostun。这些 是在其目标包被删除后运行的触发器; 当包含触发器的包是 删除。
虽然这种类型的触发器几乎没有用处,但它们允许 包来修复另一个包的 postun 引入的错误(或 由该软件包的早期版本)。
您也不需要手动删除您的软件包正常安装的任何文件(在您的 rpm 的 %files 部分和 rpm -qf <package> 列表中列出的内容)。当您的软件包被删除时,rpm 会自动为您删除那些文件(并在升级期间自动安装新软件包版本的文件)。
【讨论】: