mergemasterは-sivaでなく-UPiで。

mergemasterについて、FreeBSD-questionsに面白い投稿(http://lists.freebsd.org/pipermail/freebsd-questions/2008-September/182096.html)があった。
もし結論を早く知りたい人がいれば、結末から読んでください。


2009/2/16 追記。本記事も陳腐化したので、mergemasterをさらにさらにさらに早くをどうぞ。



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を無視する設定。