透過 RPM 管理配置?

透過 RPM 管理配置?

我需要為我們的小型部門網路中的多台伺服器提供一些配置自訂。我們目前使用的是 RHEL5,因為我不想重複工作,所以我想使用該配置建立 RPM 並將它們上傳到我們的 RHN。

現在的問題是:假設我想通過/etc/ntp.conf.遺憾的是,沒有地方/etc/ntp.d/可以放入我的文件,因此我必須用ntp.conf我的 RPM 覆蓋它。我如何正確地做到這一點,即在ntp更新時不會丟失該配置,並且也不會發生可能的配置文件衝突?

答案1

採用大衛的解決方案,使用木偶代替。真的。

但是,如果您下定決心,可以建立一個包含「/etc/ntp.conf.rassie」的 rassie-ntp-conf 套件。在規範文件中,您需要一個%post將您的配置複製到預設配置的文件,還需要一個「%triggerin -- ntp-server」來執行相同的操作。這樣,如果以後的升級覆蓋了配置,觸發器將複製回來。也許將一些內容放入 /etc/cron.daily 中以執行相同的操作以確保確實...可能service ntpd condrestart也需要讓所有這些腳本在 cp 之後執行 a 操作。

這就是基礎知識。如果您想對更多套件執行此操作,您可以建立一個透過 /etc/rassie/ 運行的標準腳本,以查找要複製到 /etc 中的配置,並讓 %post 和 %triggerin 內容運行它。

但是,實際上,忽略這一點並使用puppet 或Chef 或cfengine...這種「透過RPM 推送配置」方案充滿了微妙的問題,這些問題源於RPM 的根本問題,即RPM 的設計目的不是為了讓兩個不同的軟體包相互競爭一個文件。難以測試,難以調試,正是這種聰明的解決方案,會讓您以後希望一開始就選擇 puppet。

答案2

我可以建議替代解決方案嗎?您可能會發現像 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 守護程序(感謝訂閱線)。

這如何解決您的問題?好吧,當安裝新版本的 ntp 時,如果套件覆蓋了設定文件,puppet 會將舊版本複製回來。如果存在任何差異,它將在更改時顯示差異,以便您可以看到已進行的更改,以便您可以注意到任何差異,並在需要這些更改時更新您的中央版本。

答案3

無論您決定如何推出更改,如果您需要修改 ntp.conf(或任何配置文件,實際上)並且不想批量替換該文件,請查看 Augeas(http://augeas.net)。有一點學習曲線,但它消除了解析/編輯檔案的許多複雜性。

答案4

我嘗試過僅使用 rpm 來處理。只有當您的設定檔非常簡單時才有可能。

最好的方法,但實施起來並不簡單,就是像大家建議的那樣使用 puppet 和 cfengine 等工具。

相關內容