我为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,但这似乎不是正确的方法。
是否有一种处理此类自定义的首选方法?
答案 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一无所知,但快速搜索意味着它们不支持已经存在多年的配置目录概念。有些人已经入侵了它,但除非它是开箱即用的,否则你将再次遇到原来的问题。