Subversionは、ソースをバージョン管理するためにインポートしたあと、チェックアウトをする必要があります。
Subversionがいくら便利でも/etcのファイルをインポートしたあとで、削除してからチェックアウトなんてことはできないので/etcのバージョン管理は、RCSに頼ってきました。
/etc下のファイルを管理するという意味では、Mercurialは有望です。
Mercurialは、管理対象のファイルは、そのままでリポジトリを作成できます。
悩みの種は、/etcにもキャッシュやロックなどの一時ファイルがあるので、これを除外する必要があります。
これを解決するのがetckeeperです。
etckeeperは、除外する必要のあるファイルを.hgignoreに設定してくれます。
etckeeperのインストール
aptでインストールできます。
$ sudo aptitude install etckeeper パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 拡張状態情報を読み込んでいます パッケージの状態を初期化しています... 完了 以下の新規パッケージがインストールされます: etckeeper 0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。 25.7kB のアーカイブを取得する必要があります。 展開後に 340kB のディスク領域が新 たに消費されます。 拡張状態情報を書き込んでいます... 完了 取得:1 http://jp.archive.ubuntu.com jaunty/universe etckeeper 0.30ubuntu2 [25.7kB] 25.7kB を 0s 秒でダウンロードしました (74.0kB/s) パッケージを事前設定しています ... 未選択パッケージ etckeeper を選択しています。 (データベースを読み込んでいます ... 現在 52149 個のファイルとディレクトリがイン ストールされています。) (.../etckeeper_0.30ubuntu2_all.deb から) etckeeper を展開しています... man-db のトリガを処理しています ... etckeeper (0.30ubuntu2) を設定しています ... パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 拡張状態情報を読み込んでいます パッケージの状態を初期化しています... 完了 拡張状態情報を書き込んでいます... 完了 $
設定
etckeeperは、Mercurial以外にもGitやbazaar、darcsといったバージョン管理ツールをサポートしています。
デフォルトは、bazaarのようですが、使い慣れたMercurialを選択します。
$ head /etc/etckeeper/etckeeper.conf # The VCS to use. VCS="hg" # VCS="git" # VCS="bzr" # VCS="darcs" # Options passed to git commit when run by etckeeper. #GIT_COMMIT_OPTIONS="" $
バージョン管理
etckeeper initで初期化すると.hgignoreファイルが生成されてMercurialのリポジトリが作成され、ファイルが追加されます。
$ sudo etckeeper init $
aptやdpkgに連動してファイルをコミットしてくれます。
手動で修正したときには、下記のコマンドでコミットします。
$ sudo etckeeper commit -m "コメント" $
差分やステータスの表示は、hgコマンドを使います。
これは、便利だ!