mergemasterについて、FreeBSD-questionsに面白い投稿([http://lists.freebsd.org/pipermail/freebsd-questions/2008-September/182096.html](http://lists.freebsd.org/pipermail/freebsd-questions/2008-September/182096.html))があった。
もし結論を早く知りたい人がいれば、結末から読んでください。
2009/2/16 追記。本記事も陳腐化したので、[mergemasterをさらにさらにさらに早く](http://d.hatena.ne.jp/flageo/20090216/p1)をどうぞ。
mergemasterにはかなり前に自動アップデート機能が追加されていたらしく…。
具体的には、mergemasaterに-Uオプションを与えて実行する。
これは、ユーザ変更がされていないファイルであれば自動的にアップデートするというもの。
便利は便利なのだが、その性質上、ユーザ変更の有無を比較するための原本が必要になる。
その原本が/var/db/mergemaster.mtree。
今までに何度かmergemasterを実行していれば上記ファイルはあるはずだが、ない場合には「ソースをアップデートする前に」mergemasterを一回カラ打ちする必要がある。
実行例
$ mergemaster
*** Unable to find mtree database. Skipping auto-upgrade.
*** Creating the temporary root environment in /var/tmp/temproot
*** /var/tmp/temproot ready for use
*** Creating and populating directory structure in /var/tmp/temproot
mtree -eU -f /usr/src/etc/mtree/BSD.root.dist -p /var/tmp/temproot/
(略)
こうしておけば、次からmergemaster -Uとやるだけで、かなりのファイルを自動アップデートしてくれて楽になるはず。
しかし、自動アップデートはやはり怖いので、入れ替え前のファイルはどこかに保存しておきたい。だから-Pオプションも追加。バックアップは/var/tmp/mergemaster/preserved-files-`date +%y%m%d-%H%M%S`に作られる。
さらに、アップグレードにより新規に追加されたファイルは問答無用でインストールしていいはずなので、-iオプションも追加。
つまりmergemaster -UPi
ところで、mergemasterの設定ファイルであるmergemaster.rcは/usr/share/examples配下にない。何でないのだろう、と思っていたのだが、なんとmergemasterのマニュアル内にあった。最後まで読んでなかったよ…。
というわけで、以下のファイルを/etc/mergemaster.rcとして保存しておけばオプション要らず。
/etc/mergemaster.rc
AUTO_INSTALL=yes
AUTO_UPGRADE=yes
PRESERVE_FILES=yes
PRESERVE_FILES_DIR=/var/tmp/mergemaster/preserved-files-`date +%y%m%d-%H%M%S`
IGNORE_MOTD=yes
VERBOSE=yes
AUTO_UPGRADEが-Uオプションに対応するが、現時点(7.1-BETA2)ではマニュアルに記載されていない。
4行目以降はmergemasterのマニュアルを参考に書いた。
PRESERVE_FILES_DIRはバックアップファイルを置くディレクトリ書式の指定。
IGNORE_MOTDはmotdを無視する設定。