設定ファイルをまとめて管理する

はじめに

Unix系OSの設定ファイルはあちこちのディレクトリに散らばっているので、管理が面倒です。私はこういった設定ファイルを ˜/config/ 以下に、 つまりrootでない一般ユーザのディレクトリ1か所にまとめて管理しています。ここではそのやり方をご紹介します。

設定ファイル編集作業例

まず作業例から見てください。 /etc/hosts を編集したい場合なら、作業は以下のようになります。


% cd ˜/config/
% vi etc/hosts
〜編集する〜
% sudo make

メリット

設定ファイルを1か所にまとめて管理すると、以下のようなメリットがあります。

root権限での作業を極力減らせる

最後の make だけはrootでやりますが、それまでのファイル編集は一般ユーザのままで行えます。

バックアップを取りやすい

自分のホームディレクトリのバックアップを取るついでに、 ˜/config/ もバックアップしてしまいましょう。

リストアが容易

˜/config/ をバックアップから戻してきて、そこで make するだけです。 ファイルの更新時刻によっては touch が必要になるかもしれません。

またディレクトリ構成が違う別マシンを設定する場合でも、自分が変更したファイル (だけ) の最新版が手元にあるので、作業はずいぶん楽になります。

ヴァージョン管理しやすい

設定ファイルの編集履歴を記録しておきたい場合があります。ファイルを ˜/config/ にまとめておけば、あとはこのディレクトリをお好みのヴァージョン管理ツールに登録するだけです。

ディレクトリ構成

私のマシン (FreeBSD) の場合、 ˜/config/ のディレクトリ構成は以下のようになっています。


% ls -CF ˜/config/
Makefile       etc/           usr.local.etc/
boot/          sys.i386.conf/ usr.sup/

./boot:
loader.conf

./etc:
X11.xorg.conf   hosts           portsnap.conf   sysctl.conf
cvsupfile       make.conf       rc.conf         ttys
fstab           manpath.config  resolv.conf     usbd.conf

./sys.i386.conf:
BLADEDANCE

./usr.local.etc:
lighttpd.conf       nullmailer.remotes  pkgtools.conf

./usr.sup:
ports-all-refuse



Makefile

Makefile の内容は以下の通りです (抜粋)。


TARGET_FILES = \
	/boot/loader.conf \
	/etc/X11/xorg.conf \
	/etc/cvsupfile \

... 中略 ...

	/usr/local/etc/nullmailer/remotes \
	/usr/local/etc/pkgtools.conf \
	/usr/sup/ports-all/refuse

INSTALL = /usr/bin/install -o root -m 0644

all: ${TARGET_FILES}

/boot/loader.conf: boot/loader.conf
	${INSTALL} $? $@

/etc/X11/xorg.conf: etc/X11.xorg.conf
	${INSTALL} $? $@

... 中略 ...

/usr/local/etc/pkgtools.conf: usr.local.etc/pkgtools.conf
	${INSTALL} $? $@

/usr/sup/ports-all/refuse: usr.sup/ports-all-refuse
	${INSTALL} $? $@

# end of file



作業手順

最初の設定

上記例を参考に、 ~/config/ ディレクトリと Makefile を作成してください。

既存ファイルの編集

/etc/hosts を編集したい場合なら、作業は以下のようになります。


% cd ˜/config/
% vi etc/hosts
〜編集する〜
% sudo make

ファイルの追加

まだ ˜/config/ 以下で管理していない設定ファイルを扱いたい場合は、以下のようにします。例として、fooというアプリをインストールすると /usr/local/etc/foo.conf という設定ファイルが出来たので、これをカスタマイズしていきたい、という場合を考えます。

1. /usr/local/etc/foo.conf˜/config/ 以下へコピー

編集前の元ファイルを、 ˜/config/ 以下へコピーします。扱いやすいようにサブディレクトリを掘りましょう。私は /usr/local/etc/ 以下のファイルは ˜/config/usr.local.etc/ 以下に置くようにしているので


% cp /usr/local/etc/foo.conf ˜/config/usr.local.etc/

となります。お好みで ˜/config/usr/local/etc/ にしても構いません。

2. Makefile 編集

foo.confMakefile に追加します。 書き方は上記例のマネで。 TARGET_FILES と依存関係行との両方を追加するのをお忘れなく。

似たものを2か所に書くのがやや面倒です。なんとか1か所で済ませられる書き方がないかと調べましたが、分かりませんでした。BSD Make と GNU Make 共用でうまい書き方ありませんでしょうか >Makeグルの皆様

3. (必要なら) ヴァージョン管理ツールへチェックイン

˜/config/ をヴァージョン管理ツールで管理したい場合、自分のカスタマイズを進めていく前のこの時点でチェックインしておくと便利でしょう。

4. ˜/config/usr.local.etc/foo.conf を編集

5. cd ˜/config/; sudo make

4と5は、上記の「既存ファイルの編集」と同じです。

6. fooの動作確認

fooを動かしてみましょう。 うまく動かなければ、4〜6を繰り返します。

7. (必要なら) ヴァージョン管理ツールへチェックイン

fooがちゃんと動き、カスタマイズ内容も安定したら、チェックインしてツールに記録します。


©2006 MIURA Masahiro. All rights reserved.