ksaitoの日記

日々試したことの覚え書き

/etcのバージョン管理

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コマンドを使います。
これは、便利だ!