読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

それ etckeeper でできるよ - /etc 以下を Git で自動的にバージョン管理

Git Linux

こんにちはこんにちは。一昨日、さくら VPS に Git をインストールするエントリーを書きましたが、実はバージョン管理は etckeeper にもお世話になっています。

etckeeper というのは、Git 等のバージョン管理ツールを用いて、/etc 以下をほぼ自動的に管理してくれる有り難いツールです。下記のタイミングで自動的にコミットしてくれます。手動で任意のタイミングでコミットすることもできます。

  • yum コマンド実行の前後
  • 日付が新しくなったとき

以下、さくら VPSCentOS 5.5 -64bit)で etckeeper を使えるようになるまでの手順をまとめてみましたので、よろしければ参考にしてください。

目次

  • 1. Git のインストール
  • 2. etckeeper のダウンロード
  • 3. etckeeper の設定ファイルの編集
  • 4. etckeeper のインストール
  • 5. etckeeper の使い方

1. Git のインストール

etckeeper を使うためには、Git 等のバージョン管理ツールがインストールされている必要があります。Git 以外も使えるのですが、やっぱ Git でしょ、ということで Git のインストールから。

インストールには ひと手間必要ですが、一昨日エントリーを(がんばって)書きましたので、そちらを参照してください。

2. etckeeper のダウンロード

git clone コマンドで etckeeper ソースをダウンロードできます。ダウンロードしたいディレクトリに移動してから、git clone を実行してください。

# cd /usr/local/src
# git clone git://git.kitenet.net/etckeeper
(出力結果)
Cloning into etckeeper...
remote: Counting objects: 2507, done.
remote: Compressing objects: 100% (1632/1632), done.
remote: Total 2507 (delta 1594), reused 1258 (delta 793)
Receiving objects: 100% (2507/2507), 440.79 KiB | 188 KiB/s, done.
Resolving deltas: 100% (1594/1594), done.

3. etckeeper の設定ファイルの編集

etckeeper がダウンロードできたら、インストールする前に、設定ファイルを編集します。下記のとおり yumrpm を使う設定にしてください。

# vi /usr/local/src/etckeeper/etckeeper.conf
# The VCS to use.
#VCS="hg"
VCS="git"  ## デフォルトで Git を使うようになっているはず
#VCS="bzr"
#VCS="darcs"

# Options passed to git commit when run by etckeeper.
GIT_COMMIT_OPTIONS=""

# Options passed to hg commit when run by etckeeper.
HG_COMMIT_OPTIONS=""

# Options passed to bzr commit when run by etckeeper.
BZR_COMMIT_OPTIONS=""

# Options passed to darcs record when run by etckeeper.
DARCS_COMMIT_OPTIONS="-a"

# Uncomment to avoid etckeeper committing existing changes
# to /etc automatically once per day.
#AVOID_DAILY_AUTOCOMMITS=1

# Uncomment to avoid etckeeper committing existing changes to
# /etc before installation. It will cancel the installation,
# so you can commit the changes by hand.
#AVOID_COMMIT_BEFORE_INSTALL=1

# The high-level package manager that's being used.
# (apt, pacman-g2, yum etc)
HIGHLEVEL_PACKAGE_MANAGER=yum  ## CentOS なので apt から yum へ変更

# The low-level package manager that's being used.
# (dpkg, rpm, pacman-g2, etc)
LOWLEVEL_PACKAGE_MANAGER=rpm  ## CentOS なので dpkg から rpm へ変更

4. etckeeper のインストール

まず、make コマンドでバイナリファイルを生成します。

# cd /usr/local/src/etckeeper
# make
(出力結果)
sed -i~ s/Version:.*/Version: $(perl -e '$_=<>;print m/\((.*?)\)/'
rm -f etckeeper.spec~
./etckeeper-bzr/__init__.py build || echo "** bzr support not built"
Traceback (most recent call last):
File "./etckeeper-bzr/__init__.py", line 6, in ?
from bzrlib.errors import BzrError
ImportError: No module named bzrlib.errors
** bzr support not built

上記のように bzrlib.errors というモジュールがない旨のエラーが発生するのですが、特に問題ないようです。

make install コマンドでインストールできるのですが、make -n install とすると、実際にはインストールせずに、インストールを実行したらどうなるかを事前に把握することができます。何かと便利です。

# cd /usr/local/src/etckeeper
# make -n install
(出力結果)
mkdir -p /etc/etckeeper/ /var/cache/etckeeper/
cp -dR *.d /etc/etckeeper/
install  -m 0644 -D etckeeper.conf /etc/etckeeper/etckeeper.conf
install  -D etckeeper /usr/bin/etckeeper
install  -m 0644 -D etckeeper.8 /usr/share/man/man8/etckeeper.8
install  -m 0644 -D bash_completion /etc/bash_completion.d/etckeeper
install  -m 0644 -D yum-etckeeper.py /usr/lib/yum-plugins/etckeeper.py
install  -m 0644 -D yum-etckeeper.conf /etc/yum/pluginconf.d/etckeeper.conf
./etckeeper-bzr/__init__.py install --root= || echo "** bzr support not installed"
echo "** installation successful"

etckeeper-bzr がインポートされませんが、etckeeper 自体のインストールは成功するようですので、make install コマンドで実際にインストールします。

# cd /usr/local/src/etckeeper
# make install
(出力結果)
mkdir -p /etc/etckeeper/ /var/cache/etckeeper/
cp -dR *.d /etc/etckeeper/
install  -m 0644 -D etckeeper.conf /etc/etckeeper/etckeeper.conf
install  -D etckeeper /usr/bin/etckeeper
install  -m 0644 -D etckeeper.8 /usr/share/man/man8/etckeeper.8
install  -m 0644 -D bash_completion /etc/bash_completion.d/etckeeper
install  -m 0644 -D yum-etckeeper.py /usr/lib/yum-plugins/etckeeper.py
install  -m 0644 -D yum-etckeeper.conf /etc/yum/pluginconf.d/etckeeper.conf
./etckeeper-bzr/__init__.py install --root= || echo "** bzr support not installed"
Traceback (most recent call last):
File "./etckeeper-bzr/__init__.py", line 6, in ?
from bzrlib.errors import BzrError
ImportError: No module named bzrlib.errors
** bzr support not installed
echo "** installation successful"
** installation successful

5. etckeeper の使い方

# etckeeper init

で /etc に Git リポジトリが作成され etckeeper の監視が開始されます。

(出力結果)
Initialized empty Git repository in /etc/.git/

最初のコミットもしておきましょう。

# etckeeper commit "First commit"

ちなみに

# etckeeper commit -m "First commit"

ではないので気をつけてください。Git と異なり -m は不要です。

最初のコミットが終わったら、前述のとおり、下記のタイミングで自動的にコミットされます。

  • yum コマンド実行の前後
  • 日付が新たになったとき

もしくは、任意のタイミングでコミットしたり。

# etckeeper commit "(message)"

/etc でフツーに Git のコマンドも使用可能です。

# cd /etc
# git commit -m "(message)"

ログを確認したいときは Git コマンドで OK

# cd /etc
# git log

その他、etckeeper に独自コマンドを追加したりもできますが、詳細は後述の参考サイトを参照してください。

ではでは。

おまけ - Git の参考書籍(入門書)

一昨日も書きましたが、Git コマンドに慣れるには下記 2冊がオススメです。

入門git

入門git

入門Git

入門Git

ちなみに濱野純さんって Git のメンテナだったんですね。小飼弾さんの「アルファギークに逢いたい」 を読んで、恥ずかしながら昨日知りました。現役のおじさんはカッコいいです♪