打包 RPM,避免创建 .rpmnew 文件

Packaging RPM, avoid creating .rpmnew file

我正在打包我自己的一些软件,作为我需要的安装的一部分 将一些配置文件放在 3. 派对使用的目录中。

为避免覆盖已在本地更改的配置,该文件在 RPM .spec 文件中被标记为配置文件:

%config(norelace) /opt/lmd/conf/srv1.conf

问题是升级 rpm 现在会生成文件

 /opt/lmd/conf/srv1.conf.rpmnew

if /opt/lmd/conf/srv1.conf 已在本地更改。 3.d 派对软件读取 /opt/lmd/conf/* 中的所有内容。

我能否以某种方式在 RPM .spec 文件中标记配置文件以不生成这样的 .rpmnew 文件?

我不知道。这(以及人为的等价物 .bak.off.tmp 等)就是为什么大多数工具在读取配置文件时会出现 *.conf 或类似的原因。

如果您不能修改第三方工具来解决该问题,那么除了不直接安装到该目录并让用户进行复制外,您真的无能为力。

(您也可以打包旧文件或旧配置文件的总和,然后将它们与 %post 中的当前文件进行检查,等等。但这很丑陋,需要手动操作,并且容易出现故障。)

可能能够手动remove/move您的%post(或%posttrans)脚本中的.rpmnew文件,但是我不知道这是否真的可能(时间方面)。

进行这些备份是有充分理由的,并且只有在这些文件被更改的情况下才进行。这里描述了何时创建 .rpmsave 和何时创建 .rpmnew:http://www-uxsup.csx.cam.ac.uk/~jw35/docs/rpm_config.html

存在工具rpmconf,可以帮助查找、合并和删除这些文件。但是因为它查询 rpm 数据库(并且因为它是交互式的)你不应该从 rpm scriptlet 调用它。

如果第 3 方 SW 读取 /opt/lmd/conf/* 中的所有内容,那么我会调用该错误,因为最佳实践是只读取 /opt/lmd/conf/.conf 这样的方式,例如httpd - 阅读 /etc/httpd/conf.d/.conf。因此,请联系您的供应商并将其报告为错误。

另一种选择是让您放入目录的配置文件默认执行 nothing,即所有选项都被注释掉。

(我仍然认为这不是 应该解决的问题,但其他供应商应该......因为这对任何打包配置文件的人来说都是一个问题。 )