Nikolai Prokoschenko Asked: 2009-07-13 23:11:21 +0800 CST2009-07-13 23:11:21 +0800 CST 2009-07-13 23:11:21 +0800 CST 通过 RPM 管理配置? 772 我需要为我们小型部门网络中的几台服务器提供一些配置定制。我们目前正在使用 RHEL5,因为我不想重复工作,所以我想创建具有该配置的 RPM 并将它们上传到我们的 RHN。 现在的问题:假设我想通过/etc/ntp.conf. 可悲的是,没有/etc/ntp.d/将我的文件放入其中,因此我必须ntp.conf用我的 RPM 覆盖。我该如何正确地做到这一点,即在ntp更新时不会丢失该配置并且也没有可能的配置文件冲突? rpm rhel5 5 个回答 Voted David Pashley 2009-07-13T23:26:00+08:002009-07-13T23:26:00+08:00 我可以建议一个替代解决方案吗?您可能会发现像 Puppet 或 Cfengine2 这样的配置管理工具可以满足您的需求。您编写清单文件来描述您希望系统的外观,然后它会消失并更改系统,使其看起来像那样。请注意您所描述的系统外观的重要区别,而不是您如何更改系统。ntp 的一个例子可能是: class ntp { package {"ntpd": ensure => latest, } file { "/etc/ntp/ntp.conf": source => "puppet:///ntp/ntp.conf", owner => "root", group => "root", mode => 644, require => Package["ntpd"], } service { "ntpd": ensure => running, enable => true, subscribe => File["/etc/ntp/ntp.conf"], } } 当您在特定节点中包含此类时,您将安装 ntpd 包,将文件复制到服务器并确保守护程序正在运行。如果 puppet 对 ntp.conf 进行任何更改,它将重新启动 ntp 守护进程(感谢 subscribe 行)。 这如何解决您的问题?那么,当安装新版本的ntp时,如果包覆盖了配置文件,puppet会将旧版本复制回来。如果有任何差异,它将在更改时显示差异,因此您可以查看已进行了哪些更改,因此您可以注意到任何差异并在需要这些更改时更新您的中心版本。 Best Answer freiheit 2009-07-14T00:04:05+08:002009-07-14T00:04:05+08:00 用大卫的解决方案代替使用木偶。真的。 但是,如果您确定,您可以创建一个包含“/etc/ntp.conf.rassie”的包 rassie-ntp-conf。在规范文件中,您需要一个%post将您的配置复制到默认配置上的一个,以及一个%triggerin -- ntp-server执行相同操作的“”。这样,如果以后的升级覆盖了配置,触发器将复制回它。也许在 /etc/cron.daily 中放一些东西来做同样的事情来确定……可能还需要让所有这些脚本service ntpd condrestart在 cp 之后执行。 这就是基础。如果您想为更多软件包执行此操作,则可以改为构建一个标准脚本,该脚本通过 /etc/rassie/ 来查找要复制到 /etc 的配置,并让 %post 和 %triggerin 东西运行它。 但是,真的,忽略这一点并使用 puppet 或 Chef 或 cfengine... 这种“通过 RPM 推出配置”方案充满了微妙的问题,这些问题源于 RPM 并非旨在让两个不同的包争夺的基本问题一个文件。难以测试,难以调试,正是那种聪明的解决方案,让你以后希望你一开始就使用 puppet。 Chad Huneycutt 2009-07-14T13:37:11+08:002009-07-14T13:37:11+08:00 无论您决定如何推出更改,如果您需要修改 ntp.conf(或任何配置文件,真的)并且不想批量替换文件,请查看 Augeas ( http://augeas.net)。有一点学习曲线,但它消除了解析/编辑文件的许多复杂性。 3dinfluence 2009-07-14T04:17:38+08:002009-07-14T04:17:38+08:00 从长远来看,我认为 Puppet 或 CFEngine 是要走的路。但作为第一步,更容易实现版本控制系统(如 subversion 或 git)应该可以工作。即使在 Puppet 和 CFEngine 下,您也需要保留配置文件的更改历史记录。 Vechiato 2009-07-19T05:08:41+08:002009-07-19T05:08:41+08:00 我试图只使用 rpms 来处理。只有当您的配置文件非常简单时才有可能。 最好的方法,但实现起来并不简单,是使用像每个人都建议的 puppet 和 cfengine 这样的工具。
我可以建议一个替代解决方案吗?您可能会发现像 Puppet 或 Cfengine2 这样的配置管理工具可以满足您的需求。您编写清单文件来描述您希望系统的外观,然后它会消失并更改系统,使其看起来像那样。请注意您所描述的系统外观的重要区别,而不是您如何更改系统。ntp 的一个例子可能是:
当您在特定节点中包含此类时,您将安装 ntpd 包,将文件复制到服务器并确保守护程序正在运行。如果 puppet 对 ntp.conf 进行任何更改,它将重新启动 ntp 守护进程(感谢 subscribe 行)。
这如何解决您的问题?那么,当安装新版本的ntp时,如果包覆盖了配置文件,puppet会将旧版本复制回来。如果有任何差异,它将在更改时显示差异,因此您可以查看已进行了哪些更改,因此您可以注意到任何差异并在需要这些更改时更新您的中心版本。
用大卫的解决方案代替使用木偶。真的。
但是,如果您确定,您可以创建一个包含“/etc/ntp.conf.rassie”的包 rassie-ntp-conf。在规范文件中,您需要一个
%post
将您的配置复制到默认配置上的一个,以及一个%triggerin -- ntp-server
执行相同操作的“”。这样,如果以后的升级覆盖了配置,触发器将复制回它。也许在 /etc/cron.daily 中放一些东西来做同样的事情来确定……可能还需要让所有这些脚本service ntpd condrestart
在 cp 之后执行。这就是基础。如果您想为更多软件包执行此操作,则可以改为构建一个标准脚本,该脚本通过 /etc/rassie/ 来查找要复制到 /etc 的配置,并让 %post 和 %triggerin 东西运行它。
但是,真的,忽略这一点并使用 puppet 或 Chef 或 cfengine... 这种“通过 RPM 推出配置”方案充满了微妙的问题,这些问题源于 RPM 并非旨在让两个不同的包争夺的基本问题一个文件。难以测试,难以调试,正是那种聪明的解决方案,让你以后希望你一开始就使用 puppet。
无论您决定如何推出更改,如果您需要修改 ntp.conf(或任何配置文件,真的)并且不想批量替换文件,请查看 Augeas ( http://augeas.net)。有一点学习曲线,但它消除了解析/编辑文件的许多复杂性。
从长远来看,我认为 Puppet 或 CFEngine 是要走的路。但作为第一步,更容易实现版本控制系统(如 subversion 或 git)应该可以工作。即使在 Puppet 和 CFEngine 下,您也需要保留配置文件的更改历史记录。
我试图只使用 rpms 来处理。只有当您的配置文件非常简单时才有可能。
最好的方法,但实现起来并不简单,是使用像每个人都建议的 puppet 和 cfengine 这样的工具。