以RPM配置依赖项

时间:2016-03-11 08:32:11

标签: centos rpm haproxy

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

这样做当然意味着我的config-RPM依赖于原始RPM。描述有点尴尬,但它有效。

在后续文件中,提到了更新的问题。更新RPM需要特殊处理以避免卸载。 rpm程序传递参数$1,您可以在%pre%preun scriptlet中对其进行测试,以发现这是升级并且在那里无需保存原始配置文件(或恢复它们)。通过将配置文件的新版本复制到其他版本上,其余的scriptlet将是相同的。

进一步阅读:

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

通常的做法是拥有一个插入式配置目录,例如: /etc/httpd/conf.d/,你的包将丢弃其配置,你会告诉另一个守护进程,例如httpd,要在%post / %postun中正常重启。

我对HAProxy一无所知,但快速搜索意味着它们不支持已经存在多年的配置目录概念。有些人已经入侵了它,但除非它是开箱即用的,否则你将再次遇到原来的问题。