在 RPM 中配置依赖项

Configure dependencies in RPM

我已经为安装在我们客户的机器上的 Centos 6.6 构建了一个 RPM 包。 该软件包包含我们自己的软件,针对特定用例进行了定制,还使用了开源软件包 HAProxy。

HAProxy(RPM 版本 1.5.4-2.el6_7.1)在 /etc/haproxy/haproxy.conf 中带有默认配置,如果不更改此文件则无法自定义。 但我希望配置成为我生成的包的一部分。如果 /etc/haproxy/haproxy.conf 文件在我的包中,RPM 会抛出错误,因为它也是 haproxy-package 的一部分。

我已经通过提供一个使用不同配置文件启动 HAProxy 的自定义新贵脚本解决了这个问题,但这似乎不是正确的方法。

是否有处理此类自定义的首选方法?

你的做法是正确的。在 EL6 和 sysv 上,除了创建自定义 haproxy 包或自定义 haproxy 服务或创建客户在安装后运行的脚本之外别无选择。我认为创建另一项服务是最佳选择。

请注意,在带有 SystemD 的 EL7 上,您有更好的选择,因为您可以使用 SystemD 的 Drop-In 功能。有关更多信息,请参阅:

完成此操作的通常方法是拥有一个嵌入式配置目录,例如/etc/httpd/conf.d/,您的包将在其中删除其配置,您将告诉其他守护进程,例如httpd,在您的 %post/%postun 中正常重启。

我对 HAProxy 一无所知,但快速搜索表明他们不支持这种已经存在多年的配置目录概念。有几个人破解了它,但除非它是开箱即用的,否则您将 运行 再次遇到您原来的问题。

在这种情况下,我创建了一个 RPM,它将配置文件安装到不同的子目录中,并在其 %post%preun 小脚本中修改不合作包的配置文件:

  • 安装时,我重命名了原始配置文件,并从这些路径名创建了符号链接到覆盖的配置文件,并且
  • 卸载时,软件包删除了符号链接并恢复了原始软件包的文件。

这样做当然意味着我的配置 RPM 依赖于原始 RPM。描述起来有点尴尬,但它确实有效。

后续提到了updating的问题。更新 RPM 需要特殊处理以避免卸载东西。 rpm 程序传递了一个参数 </code>,您可以在 <code>%pre%preun 脚本中对其进行测试,以注意到这是一个 升级 并且无需保存原始配置文件(或恢复它们)。 scriptlet 的其余部分将是相同的,只需将配置文件的新版本复制到其他版本即可。

进一步阅读: