単一の共有gitリポジトリでetckeeperを使用することは可能ですか?


9

いくつかの人々がetckeeperを使用してバージョン管理を私の/ etcディレクトリに適用することを推奨していることに気づきました。

デフォルトのインストールでは、管理しようとしている/ etcと同じマシンにリポジトリが配置されるように見えます。これはバージョン管理には問題なく機能しますが、ファイルのサーバー外のバックアップを作成するという追加の利点はありません。また、/ etcの一部をソースマシン間で複製することもできます。

中央の管理マシンで単一のgitリポジトリ共有して、各サーバーのetckeeperが同じ場所にデータを保存できるようにすることは可能ですか?

(私は今、ファイルをコミットして元に戻すためのsvnといくつかのカスタムスクリプトで同様のことをしていますが、変更を加えるときは必ずコミットする必要があります。)

回答:


8

まず、/ etc / etckeeper / etckeeper.confでgit用に構成されたinstall etckeeperを使用します。ディストリビューションまたはソースからのetckeeperのインストール方法に従ってください。

まもなく、/ etc / .gitが作成されます

サーバー上で、プッシュする(安全な)リポジトリがあることを確認してください...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

最初のホストで、ローカルリポジトリをssh経由でサーバーにプッシュします。

# cd /etc && git push faruser@farhost:somedir

もちろん、この場合、somedirは相対的である可能性があります(sshの慣例に従います)

/ etcに影響する変更を加えたとき(およびetckeeperによって/etc/.gitに侵入されたとき)はいつでもこれを行うと、マシンのローカルリポジトリとオフマシンリポジトリの両方を使用できます。

または、パスワードなしのsshをセットアップし、/ etc / etckeeper / commit.d /にフックを作成して、マシンが常に接続されている場合に自動的に実行されるようにします。


2
これは素晴らしいですね。ローカルリポジトリをリモートリポジトリのサブディレクトリに保存する方法はありますか?単一のリモートリポジトリを使用して複数のサーバーの(個別の)構成を保存することで、同様のことをしたいと思います。
Andrew Ferrier、

缶はgit pushあなたの作成したgitのレポの方に動作しますか?おそらくあなたはcommit.d下のフックがそれのように、本当に私は良いアイデアですsomedirで裸のレポを作成する必要が
larrycai

3

リモートブランチ構成を追加して、etckeeperリポジトリのマスターブランチを各サーバーからリモートリポジトリのブランチにマップすることができます。これを行うには、各サーバーで次のコマンドを実行します。

cd /etc
git branch -m master $HOSTNAME
git remote add origin git@git.example.com:path/to/single/repo.git
git push -u origin master:$HOSTNAME

このセットアップの後、その後git push、各サーバーのマスターブランチから中央リポジトリの専用サーバーブランチに変更が送信されます。

ブランチには共通の開始点はありませんが、次のコマンドを実行することで、2つの異なるサーバーを表す2つの異なるブランチの同じファイルを簡単に比較できます。

git diff origin/server1 origin/server2 -- file

これは、jojooが提案する自動設定と組み合わせることができます。


git push -u origin master:$ HOSTNAMEはここでは機能しません。リモートリポジトリは空のベアリポジトリです。エラー:src refspec masterは一致しません。
Bertl

1

自動的に行う方法、全文:

クライアント上にファイル/etc/etckeeper/commit.d/60-push(chmod + xを忘れないでください)を作成します。

#!/bin/sh
git push central_server:/var/git/client_name.git master

central_serverはssh設定で定義されています。以下を参照してください。/var/git/client_name.gitは中央サーバー上のディレクトリで、git repoが含まれています。

root(!)の〜/ .ssh / configには次のようなものが含まれているはずです:

host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

次に、central_serverでgitリポジトリを初期化する必要があります

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

/ etcを少し編集してテストし、etckeeperが「テストプッシュ」をコミットします。


1

それはポイントではありません。構成を広く配布したい場合は、各マシンのローカルリポジトリに加えて別のリポジトリをセットアップし、必要に応じて各マシンにそこから選択してもらいます。これにより、各マシンは(実際には分岐して)逸脱し、リビジョン管理を維持できます。


これを行う方法がわからない(2番目のリポジトリ)。詳しく説明できますか?
ブレント

おそらく、リポジトリの1つを「中央リポジトリ」にクローンする必要があります。必要なのは1つだけです。そこから変更を加えることができ、各サーバーはリビジョンに保存されているパッチを選択することができます。最初の設定方法はDSCMによって異なります。gitについては、kernel.org
pub / software / scm /

-2

etckeeperをバックアップポリシーにしたくありません。構成ファイルのコピーを用意しておくのは良いことですが、災害復旧計画として認定するには十分ではありません。

代わりに、システムの実際のバックアップを作成することに集中してください。単純リストは、tarballをテープに送るためのcronjobになる可能性があります。誰ももうテープを使用しません。さて、すべてのファイルを専用のNASrsync するcronjob 。より堅牢なバックアップソリューションについては、AmandaBaculaをご覧ください。

そして学者の場合、他のgitリポジトリと同じように、etckeeperリポジトリをgithubプッシュすることができました。


これをバックアップポリシーにすることについて誰も話していません。しかし、私の経験では、すべてを1か所に、より安全なサーバーに置くと便利です。
ブレント

1
それから私は誤解しました。あなたが本当に探しているものがシステム構成を一元的に保存して配布する手段である場合、おそらくPuppet(reductivelabs.com/products/puppet)が役立ちます。
Shazburg 2009年

例として、すべての構成を1つのホストにプッシュしています。構成の変更を視覚化するために使用されるトラックが実行されます(もちろん、何かが機能しない場合はチケットを記述します...)非常に便利です。例として、すべてのホストのcrontabを比較できます。数回のクリック。
jojoo 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.