RPM在卸载期间“跳过”拥有的文件

时间:2014-06-20 19:48:11

标签: rpm rpm-spec

我为我的团队正在构建的一个软件创建了一个RPM。安装工作很好,但我添加逻辑以使软件卸载并将系统恢复到工作状态。

作为安装的一部分,我必须在文件系统上放置一个配置文件。但是,当我卸载RPM时,此文件将保留在目录中,这会导致在卸载软件包后服务无法正常运行。

.SPEC文件:

%files
...
%attr(640, tomcat, tomcat) /var/lib/owf/lib/OWFsecurityContext.xml
...

安装日志:

cat Install.log | grep "OWFsecurityContext"
...
D: fini      100640  1 ( 498, 501)      2336    /var/lib/owf/lib/OWFsecurityContext.xml;53a41ad5
...

RPM拥有的文件:

$ rpm -ql OurToolName | grep "OWFsecurityContext"
/var/lib/owf/lib/OWFsecurityContext.xml

卸载日志

$ cat Remove.log | grep "OWFsecurityContext"
D: fini      100640  1 ( 498, 501)      2336 /var/lib/owf/lib/OWFsecurityContext.xml skip

为什么RPM"跳过此文件?有没有办法(除了强制删除%postun部分)告诉RPM删除这个文件,就像它拥有的所有其他文件一样?

修改

在@EtanReisner的评论之后,看来该文件归两个软件包所有:我在这个问题中创建的软件包(通过%files部分中的显式文件引用,以及OWF)安装RPM,它拥有文件所在的整个目录。

鉴于该文件最终归两个软件包所有,有没有办法明确告诉RPM除了它的状态,除了在%postun scriptlet中强行删除它之外,还要删除它?

2 个答案:

答案 0 :(得分:1)

您需要将其标记为%config文件。发生的事情是它将文件留下,因为它与数据库认为不应该匹配,并且它不会让您无意中丢失数据。如果您将其明确标记为配置文件,则在卸载时它将重命名为/var/lib/owf/lib/OWFsecurityContext.xml.rpmsave,这不应与任何内容冲突。

答案 1 :(得分:1)

我不知道有什么方法可以让RPM忽略竞争所有权并删除文件,就像你正在尝试的那样(以及我前几天挖掘的代码,以确定为什么RPM会是跳过文件并没有沿着这些行提供任何内容,但我当时并不是在寻找它。

我认为出于这种原因,我们通常不鼓励整个目录所有权。

相关问题