設定ファイルの集中管理2006年06月13日 13時06分53秒

設定ファイルをまとめて管理すると絡めて紹介されているのに気が付いた。発想自体はとても面白い。しかし、この様な場面にはあまり、make は向いていないように思われる。おそらく、tar cvf - -C ~/config | tar xf - -C / の様に config 以下を tar で固めた方が管理の手間が省けると思う。

現に、Makefile の管理と設定ファイルの管理が必須になっている。かつ、この場合だとパーミッションの設定の融通が効かない。tar だと -xp オプションなどもあり、良きに計らってくれる。

make について。このような場合は、%pattern を使った方がよい。 % Pattern matching wild card metacharacter. の部分を参照。%pattern を使うと、


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} $? $@

の大部分が一つのルールで済む。


.SUFFIXES: .fnoc .conf

VPATH = boot etc etc/X11

all: ${TARGET_FILES}

/%.conf: %.fnoc
	${INSTALL} $? $@

これで、.conf で終わるターゲットは全てできると思う。このコードは実際に実行して試してはいない。/ などで、VPATH 外にファイルのターゲットがあるのが少々怪しい気がする。%parteen を使うと obj/%.o : %.c などの様にして、ソースはディレクトリ構造を持ちながらも、全てのオブジェクトファイルを obj 以下に階層なしで置くということもできる。いくつかの注意点を上げる。1. .fnoc を .conf としてインストールする形にした。make のルールは慣れていないと混乱する元になるので、わざと修飾子を変えて分かりやすくしている。2. また、この形でやるには、config 以下のディレクトリと、インストール後のディレクトリが完全に対称でなければならない。例えば、上記の場合、xorg.conf は config/etc/x11/xorg.conf に無くてはならない。

この形の make は、基本的に %pattern に依る一般的な置換作業の応用である。また、.SUFFIXES は忘れてはならない。.conf や .fnoc は標準では無いため、自分で加える必要がある。VPATH も各ディレクトリ毎に追加する必要がある。make は VPATH にも移動し、本来の make の実行ディレクトリの一部として作業しようとする。

残念ながら、こちらにも三つ程欠点がある。まずは、.conf 以外の場合は、羅列する必要がある。上の場合は refuse などがその例だ。また、VPATH を維持する手間も忘れられない。久しぶりにディレクトリを足したときに動かないと悩む典型的な原因だ。こちらにも相変わらず、パーミッションの問題はある。

それに引き替え、tar だとこのような問題は起きない。そういった意味では、Makefile に tar を書けばいいだけかもしれない。

このような理由により、tar の方が make よりも適していると思われる。しかし、config ディレクトリとインストールの試みは面白いので、次に設定を大きく変える必要があるときに、試してみたい。前回に設定した時は、規定の位置に置いたままで、管理することにこだわりすぎていた。違う役割をするホストのときに、どのように動作を変えれば良いかなどが課題になると思う。