mergemasterを少しだけ楽に


200812追記。本件は古い内容なので、こちらへ。


FreeBSDをアップグレードするときにいつも面倒なのが/etc配下のファイルを更新すること。

アップグレードの手引きには素っ気なくmergemasterと書いてある。
mergemasterは新旧/etc配下ファイルの差分をチェックし、必要であればユーザに選択、マージさせるよくできたスクリプト
だが、手引きの通り素のまま実行すると、間欠的にファイルの差分チェックを求められるので面倒だ。
/etc配下にはご存知の通りpasswdなど超重要ファイルがあり、失敗するといろいろとヘビーな状態になるので緊張するが、この、間欠的というのがミスのもととなる。
が、-a、-rオプションを使えばそれなりに楽にはなる。
アップグレードする度にいつも何だったっけなあ、と思うのでメモっておく。

# mergemaster -siva
# mergemaster -sivrt <一回めで使用したテンポラリディレクトリ>

aオプションを指定すると、とりあえず差分のないファイルをインストールしてくれる。
残りのファイル、つまり差分のあるファイルはテンポラリディレクトリに残る。
で、tオプションでそのテンポラリディレクトリを指定し、rオプションをmergemasterに与えれば、アップグレードにより差分の発生したファイルのみを対象に作業ができるので効率的、という話。
なお、sオプションは各ファイルの照合を一行ずつやります、というオプションで、iは照合時、インストール先にファイルがなければインストールする、というオプション。詳しくはman mergemaster。

テンポラリディレクトリは、-sivaで作業した際に、これこれのファイルがインストールされていませんよ、と教えてくれるのだが、そのときにディレクトリも教えてくれるのでそれを指定する。

# mergemaster -siva
<中略>
/var/tmp/temproot.0304.23.20.42/COPYRIGHT
# mergemaster -sivrt /var/tmp/temproot.0304.23.20.42/

まあ、見て分かるように/var/tmp/temprootの後は、日付、時間、分、秒と並んでるので、一回めの出力結果をわざわざ注意して見てなくてもいいけど。