回答:
私はこれを自宅(〜3ホスト)でさまざまなscms(RCS、Subversion、git)で試してみました。私にとって今完璧に機能するセットアップは、setgitperms
フック付きgit です。
あなたが考慮する必要があるもの:
ファイルのアクセス許可と所有権の処理
svn
これを行うにはラッパーが必要でしたsetgitperms
フックはこれを透過的に処理します(post-checkout
ただし、フックをサポートするかなり新しいバージョンのgitが必要です)また、/etc
バージョン管理下のすべてではなく、実際に変更したファイル(私のように)だけが必要な場合は、この種の使用をサポートするscmが必要になります。
*
トップレベルの.gitignore
ファイルに「」を入れ、使用したいファイルのみを追加しますgit add --force
最後に、下にいくつかの問題のディレクトリがある/etc
し、いくつかのプログラムまたはデーモン(によって読み込まれたパッケージが設定スニペットをドロップできる場所/etc/cron.d
、
/etc/modprobe.d
など)。これらのプログラムの中には、RCSファイル(cronなど)を無視するのに十分なスマートなものとそうでないもの(modprobeなど)があります。.svn
ディレクトリについても同じです。再びgitに大きなプラス(トップレベル.git
ディレクトリを1つだけ作成します)。
別のオプションは、PuppetやCfengineなどの自動サーバー構成ツールを使用して、宣言型言語でサーバー構成をスクリプト化することです。
フロントエンドでの追加作業ですが、Puppetのようなユーティリティを使用すると、人間の介入をほとんど必要とせずにサーバーを自動的に再構築および構成できます。
私は最近シェフを探しています。バージョン管理でテンプレート化可能な(.erb)構成を保持するだけでなく、アクション(ノードに構成をアップロードした後のサービスの再起動など)を実行できます。Chefはパッケージ管理を支援するため、インターフェイスするノードとの依存関係を確認できます(つまり、sudoパッケージをインストールする必要があります)。ChefはRubyで簡単に拡張できるように見えるため、カスタムプロセスがある場合は、提供されているフレームワーク内でスクリプトを作成するだけです。
しかし、まだ試していないので、適切なgemを使用してクライアントとサーバーにRubyをインストールする必要があります(これはそれほど難しくありません)。全体的に、一度に多数のサーバーを管理するのは本当に簡単に見えます。
私はインフラストラクチャ全体でPuppetを実装していますが、バージョン管理でデータを保持することは非常に役立ちます。
Mercurialは、いくつかのメタデータが隠されたディレクトリに格納されている単なるファイルのコレクションであるため、Mercurialが好きです(管理しやすく、理解しやすく、使いやすい)。
私のPuppetファイルは/ usr / local / etc / puppet /(FreeBSD 7.1)にあります。Mercurialを追加するのに必要なすべて:
> cd /usr/local/etc/puppet
> hg init
すべての変更は、単純な「hg commit」でコミットされます。変更が何かをホースでつなぐ場合、1つのコマンドですべてのサーバーを特定のバージョンのファイル(sudoersなど)にロールバックできます。
実際の使用例は次のとおりです。Subversionを使用して、4つの異なるサーバー上の構成ファイルを管理します。コードで使用するのと同じ理由で、構成ファイルのバージョン管理を使用することをお勧めします。これは、バックアップと元に戻すボタンがすべて1つになっているためです。私がはるかに多くのサーバーを管理していて、それらのサーバーが構成の点ではるかに近い場合、berberichの答えに詳述されているPuppetのようなものを使用することになります。
アイデアは、サーバー上の特定のフォルダー(/ var / named /など)をチェックアウトできるリポジトリを1つ持つことができるということです。そのため、構成ファイルの履歴とバックアップの両方があります(間違えた場合、バックアップはボーナスです)あなたの手で編集追加のワイプGUI構成アプリケーション使用の咳のMac OS Xサーバーでのサーバ管理咳を)。その後、テストサーバーで簡単にテストし、その後、手動でファイルをコピーせずに動作するファイルで運用サーバーを更新します。
私は数年前にまさにこれを行うプロジェクトを作成しました:Savon
Subversionを使用してファイルを保存し、所有権、権限、SELinuxコンテキストの追跡などの追加機能を備えています。また、ファイルシステムの変更をレイヤーに論理的に分割できるため、たとえば、すべてのWebサーバーに個別に送信される変更を追跡できます。