【问题标题】:Packaging RPM, avoid creating .rpmnew file打包 RPM,避免创建 .rpmnew 文件
【发布时间】:2016-03-17 12:46:14
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: linux rpm


    【解决方案1】:

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

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

    【讨论】:

    • 我喜欢这个。另一种方法是在%post 处理程序中注释.rpmnew 文件out 中的所有内容。
    【解决方案2】:

    我不知道。这就是为什么大多数工具在读取配置文件时会使用 glob *.conf 或类似工具。

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

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

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

    【讨论】:

    • 我在%post 部分添加了rm -f /opt/lmd/conf/srv1.conf.rpmnew || true,目前这是一个足够公平的解决方法。
    • 我不相信你需要 || truerm -f 但可以肯定。此外,您应该绝对向第三方提交错误,让他们最终修复此问题。
    • 我同意...提交错误。盲目地删除它是一个的主意。快速示例:他们添加了一个新命令,如果您将其关闭,则会引入安全问题。您放入的新配置启用了 2.0.0 中的选项。但是您的 1.1 配置文件只是保留在那里,使该选项处于禁用状态。
    【解决方案3】:

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

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

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

    【讨论】:

    • 当然 - 但这对我没有任何帮助,无论是形状还是形式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2020-06-09
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多