CentOS に etckeeper をインストール
etckeeper は /etc 配下のファイルを VCS で自動管理するためのプログラムで、Ubuntu なんかでは sudo apt-get install etckeeper とやるだけでインストールできるわけですが。(概要は Ubuntu Weekly Recipe:第58回 ファイルのバージョンを管理する|gihyo.jp … 技術評論社 あたりをご覧ください。)
CentOS では少し手順が必要だったのでメモです。ちなみにバージョンは CentOS 5.3。
git のインストール
etckeeper の利用には hg/git/bzr/darcs のような DVCS が必要になるわけですが、etckeeper 自体が Git で管理されているので、今回は git を入れることにします。後述しますが、git 1.5.4 以降をいれておいたほうが無難です。
CentOS/Gitのインストール - Yoshimopedia を参考に・・・まず、/etc/yum.repos.d/git.repo を作成し、(※以降すべて root で操作しています)
[git] name=Base git repository baseurl=http://www.kernel.org/pub/software/scm/git/RPMS/$basearch enabled=1 gpgcheck=0
のように編集。
次に、/etc/yum.repos.d/rpmforge.repo を作成し、
[rpmforge] name = Red Hat Enterprise $releasever - RPMforge.net - dag mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge enabled = 0 gpgcheck = 0
のように編集。(※enabled = 0 にしているので yum 実行時に --enablerepo=rpmforge を付けないと有効になりません。本番環境の RHEL 上では rpmforge を勝手に使われるのを防ぐためこのような指定にしてますが、通常利用だと enabled = 1 のほうが便利だと思います。)
yum install git-1.5.6.1-1 --enablerepo=rpmforge
でインストールが完了と。
(2010-04-04 追記)
ここで「Error performing checksum」エラーになる場合は、
wget http://skvidal.fedorapeople.org/hashlib/python-hashlib-20081119-2.i386.rpm rpm -ivh python-hashlib-20081119-2.i386.rpm
を実行してください。詳細は
に書きました。
(2010-11-10 追記)
Webtatic.com のほうが Git のバージョンも新しいし、インストールも楽そうです。
(追記ここまで)
etckeeper のソースを取得
cd /usr/local/src git clone git://git.kitenet.net/etckeeper
こんな感じで。
etckeeper.conf の編集
cd etckeeper
vi etckeeper.conf
とやって、ファイル末尾の箇所を
# The high-level package manager that's being used. # (apt, pacman-g2, yum etc) HIGHLEVEL_PACKAGE_MANAGER=yum # The low-level package manager that's being used. # (dpkg, rpm, pacman-g2, etc) LOWLEVEL_PACKAGE_MANAGER=rpm
このように編集します。(rpm の指定をしていますが、私は試していないのでうまくいくかわかりません。)
また、念のためファイルの先頭が
# The VCS to use. # VCS="hg" VCS="git" # VCS="bzr" # VCS="darcs"
になっていることも確認しておきます。
unclean.d/50test の編集(※git 1.5.4 未満の場合)
当初は CentOS 5.1にGitをパッケージで入れる - ひげろぐ を参考に Dag(外部リポジトリ)を使って git を入れていたんですが、この方法でインストールできるバージョンは git 1.5.2.1 と少し古くて。
この状態でも etckeeper のインストールはうまくいくんですが、yum を実行したタイミングで
etckeeper: pre transaction commit usage: git-ls-files [-z] [-t] [-v] (--[cached|deleted|others|stage|unmerged|killed|modified])* [ --ignored ] [--exclude=<pattern>] [--exclude-from=<file>] [ --exclude-per-directory=<filename> ] [--full-name] [--abbrev] [--] [<file>]* Installing : postgresql-server [1/1] etckeeper: post transaction commit usage: git-ls-files [-z] [-t] [-v] (--[cached|deleted|others|stage|unmerged|killed|modified])* [ --ignored ] [--exclude=<pattern>] [--exclude-from=<file>] [ --exclude-per-directory=<filename> ] [--full-name] [--abbrev] [--] [<file>]*
のようなエラーになってしまいます。
原因は unclean.d/50test にある
[ -d .git ] && [ -n "`git ls-files --modified --deleted --others --exclude-standard`" ]
この処理で。git-ls-files で 1.5.4 からのオプションである --exclude-standard を使っているのが問題のようです。
note : --exclude-standard is not yet in a released version of git as of november 2007, you'll have to use --exclude-from=.gitignore --exclude-from=.git/info/exclude ... if you don't have it
とあるように、unclean.d/50test の該当行を
[ -d .git ] && [ -n "`git ls-files --modified --deleted --others --exclude-from=.gitignore --exclude-from=.git/info/exclude`" ]
に書き換えておけば使えるはずです。
Dag から落とせる git は、gitを本家のリポジトリからCentOS5.2にインストール - 橋本幸樹の無愛想な日記 にあるように、manpage が入らなかったり不便があるようなので、kernel.org から落としたほうがいいみたいですね。
etckeeper のインストール
make install
とするだけです。ログを見ると、
[root@localhost etckeeper]# make install mkdir -p /etc/etckeeper/ /var/cache/etckeeper/ cp -a *.d /etc/etckeeper/ install -m 0644 -D etckeeper.conf /etc/etckeeper/etckeeper.conf install -D etckeeper /usr/sbin/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 ? import bzrlib ImportError: No module named bzrlib ** bzr support not installed echo "** installation successful" ** installation successful
のように妙なエラーが出ていますが、特に問題なくインストールはできているので気にしないようにしましょう。
あと、make && make install としてしまった場合も上記のエラーが出てしばらく悩んでしまいましたが、make install だけ実行する形でいいようです。
使い方
etckeeper init etckeeper commit 'First import'
というようにリポジトリを初期化しておけば、あとは yum 実行のタイミングで勝手に etckeeper commit が呼び出されます。
自分で /etc を編集したような場合は etckeeper commit でコミットすることもできます。svn や git に慣れていると、つい -m オプションをつけてしまいそうになりますが、要らないので気をつけましょう。さもなくば、
[root@localhost etc]# git log commit 23ae9cc8604a5fa8c76498574dd700ca54e77e94 Author: root <root@localhost.localdomain> Date: Tue Oct 13 00:27:47 2009 +0900 -m commit 35803ec9a69becdb789ac43fdab3d084f7aaf8e3 Author: root <root@localhost.localdomain> Date: Sun Oct 11 02:40:50 2009 +0900 -m commit d1e37c638cff0ff727c7789ba06f56a3427e9613 Author: root <root@localhost.localdomain> Date: Sat Oct 10 04:26:42 2009 +0900 -m
こんな悲しいログが残ってしまいます。
rpm のほうは今回入れる機会がなかったので試していませんが、最悪 yum コマンドで rpm を入れる方法でなんとかなるみたいです。(参考: hook into rpm install/update/deletion of any package (for etckeeper) - Linux Archive)
その他のソリューション(ついで)
上記のリンクに載ってましたが、Cft というのを使っても設定ファイルを管理できるみたいですね。
別のソリューションとして SVV というのものもあります。一般ユーザで /etc 配下の必要なファイルだけ管理したい、という向きのようです。
/etc/*などのファイルをバージョン管理するためのソフトウェアです。
/etc/*などのファイルを、root権限なしに管理できます。
ファイルのパーミッションなどの情報も保存されます。