如何使用 rpmbuild 更新预先存在的配置文件?

Posted

技术标签:

【中文标题】如何使用 rpmbuild 更新预先存在的配置文件?【英文标题】:how to update a pre-existing config file using rpmbuild? 【发布时间】:2011-09-14 11:55:03 【问题描述】:

我一直在研究如何使用 rpmbuild 规范文件来更新已经存在的配置文件。

例如,在我的 rpm 中,我想在配置文件中添加行,例如/etc/stunnel/stunnel

[SomeAppName]
accept = 8006
connect = 127.0.0.1:5006

我目前在我的 %install 部分有这个:

cat stunnel/stunnel.conf >> %buildroot/etc/stunnel/stunnel.conf

现在显然这是垃圾,因为每次我运行 rpm 时,它都会将这些相同的行添加到配置文件中。

我也不希望 /etc/stunnel/stunnel.conf 文件成为我的 rpm 文件的一部分,因为我不希望在我擦除我的 rpm 包时将其删除。

我的问题是:

    如何将 /etc/stunnel/stunnel.conf 排除在我的 rpm 中? 在 rpm 期间向配置文件添加行的正确方法是什么? 请有人提供一些链接,我可以在其中查看如何使其正常工作,或者我可以在我的规范文件中使用的几行示例。

我已经查看了Max Rpm 的官方指南,但到目前为止我还没有找到我的问题的答案。

【问题讨论】:

【参考方案1】:

a) 正是出于这个原因,许多更现代的工具也支持与平面文件平行的 .d 配置目录。例如,我的 Debian wheezy 发行版将 /etc/stunnel 视为一个目录,其中每个 .conf 文件都是一个单独的 stunnel 配置。

b) 既定的替代方案似乎是一个条件结构,如

grep -q '[SomeAppName]' %buildroot/etc/stunnel/stunnel.conf || cat ...

(或者,如果不确定 stunnel.conf 是否已经存在)

grep -s '[SomeAppName]' %buildroot/etc/stunnel/stunnel.conf || cat ...

【讨论】:

没想过使用 .d 目录。这可以看作是我在 redhat 上,而 apache 已经使用了这种方法 :) 我还需要将 %config /etc/stunnel/stunnel.conf 放在 %files 部分吗? 如果您要使用 .d 解决方案 - 不。否则 - 我对 RPM 包了解不足,无法回答这个问题。 你能把你的答案改成 grep -s 这比 -q 效果更好,因为如果找不到文件,它不会给出错误

以上是关于如何使用 rpmbuild 更新预先存在的配置文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 vbscript 填充预先存在的 Excel 表单

如何将预先存在的 sqlite 文件放入 <Application_Home>/Library/?

如何将用户定义的参数传递给 rpmbuild 以填充变量

如何使用 .yml 文件更新现有的 Conda 环境

CentOS 上的 rpmbuild 问题 - /home/me/rpmbuild/tmp/rpm-tmp.58942 的退出状态错误

如何将预先存在的 sqlite 文件导入核心数据 iOS 7.1