スポンサーリンク

MERGEMASTER(8) FreeBSD システム管理者マニュアル MERGEMASTER(8)

名称

mergemaster − アップグレード中の設定ファイルその他のマージ

書式

mergemaster [−scrvahipCP] [−m /path/to/sources] [−t /path/to/temp/root] [−d] [−u N] [−w N] [−D /path]

解説

mergemaster ユーティリティは、様々な設定や FreeBSD に関連したファイルを アップデートする作業を補助するために作られた Bourne シェルスクリプトで す。この作業を始める前に /etc ディレクトリをバックアップしておくことを 強 く勧めます。

このスクリプトは /usr/src/etc/Makefile を使って / から下の仮のルート環境 を作成し、そこに様々なファイルを格納します。 [−m] コマンドラインオプショ ンで違うソースディレクトリを指定することや、 [−D] コマンドラインオプショ ンで違う宛先ディレクトリを指定することもできます。そしてその環境中のそれ ぞれのファイルを、インストールされているものと比較します。スクリプトが新 しいファイルに変更点を見つけた場合や、新しいファイルに対応するインストー ルされているファイルがない場合には、それを処理するための 4 つの選択肢を示 します。新しいファイルをそのままインストールする、新しいファイルは消す、 新旧のファイルを sdiff(1) を使って適切にマージする、後で手でマージするた めにファイルを仮のルート環境に残しておく、のいずれかを選べます。

デフォルトでは、 /var/tmp/temproot に仮のルートを作り、 cvs(1) バージョン 文字列 %Id/%FreeBSD があるファイルについてはそれを比較して、もし同じであ れば仮のファイルを削除します。 $Id 文字列がない時や、あっても一致しない場 合には、ファイルそのものを比較します。 $Id 文字列を無視して全てのファイル を比較するように指定することもできます。

マージメニューのオプションは、古いファイルに対するカスタマイズを取り出し て、新しいファイルに簡単にマージできるようにデザインされています。カスタ マイズしていないファイルに対するファイルの変更を取り込むために、マージ機 能を使用することもできますが、推奨できません。

mergemaster ユーティリティは umask を調べて、022 以外であれば警告を出しま す。ほとんどの設定ファイルは world read パーミッションを与えることが強制 されているわけではありませんが、そうしないと問題になるかもしれません。も し 022 以外 の umask を選び、あとで何らかのトラブルが生じた場合、その原因 がこれかもしれません。 /etc/master.passwd は特例として扱います。このファ イルないしマージしたファイルをインストールすることを選択すると、このファ イルのパーミッションはセキュリティ上の理由から常に 600 (rw-------) になり ます。このファイルのアップデート版をインストールした後は、 pwd_mkdb(8) を -p オプション付きで実行して、パスワードデータベースの再構築と /etc/passwd の作り直しをさせる必要があります。

スクリプトは、 /usr/src/etc/Makefile が作成したファイルに付けた所有者 ID およびグループ ID と、 umask によって指定されたファイルパーミッションを用 います。 context diff を選ばない限り、デフォルトで unified diff を使って 差分を表示します。

mergemaster ユーティリティは、比較開始直前と実行完了前に、指定したスクリ プトを読み込みます。最も簡単な方法は、 .mergemasterrc において、スクリプ トへのパスを適切な変数へ設定することです。比較前に読み込まれるスクリプト は MM_PRE_COMPARE_SCRIPT で指定し、スクリプト完了後に実行するものは MM_EXIT_SCRIPT で指定します。これが、ローカルでの修正および特別な処理を行 うファイルを指定するための推奨方法です。これには、比較せずに削除したい ファイルも含みます。指定したスクリプトは、 mergemaster 内部から読み込まれ ますので、スクリプトの全変数がカスタムスクリプト中で使用可能です。 /etc/mergemaster.rc も使用可能です。これは、 .mergemasterrc の前に読み込 まれます。コマンドラインで指定されたオプションが最後に更新されますので、 両方のファイルに優先します。

オプションは以下の通りです:

       −s

全てのファイルの対について diff をとり、厳密な比較をします。 この比較は、CVS $Id 以外に対し、1 行ずつ実行されます。

−c
unified diff の代わりに context diff を用います。

−r
仮のルート環境を新規に作ることをせずに、以前掃除したディレク トリで mergemaster を再実行します。このオプションは他の全ての オプションと一緒に使えます。

−v
処理についてより冗長に出力します。あなたが初めて mergemaster を実行する時には、おそらくこのオプションを付けるべきでしょ う。さらにこのオプションは、インストールされている方の /etc にしかないファイルの一覧を提供します。

−a
自動実行。このオプションはインストールされているものと食い違 う全てのファイルを、手で処理するために仮のディレクトリに残し ておきます。もしすでに temproot ディレクトリがある場合には、 以前はなかったディレクトリに新しく作ります。このオプションは 冗長フラグを解除しますが、他の全てのオプションと一緒に使えま す。 -a オプションを使うと、-w オプションは無意味になります。

−h
使用法とヘルプ情報を表示します。

−i
宛先ディレクトリに存在しないファイルは、自動的にインストール します。

−p
世界構築前モード。 {build|install}world に不可欠なファイルの み比較します。これには /etc/make.conf も含まれます。

−C
標準の mergemaster の実行の後に、rc.conf[.local] のオプション とデフォルトのものとを比較します。

−P
置き換えるファイルを /var/tmp/mergemaster/preserved-files-<date> または mergemaster rc ファイルで指定したディレクトリに保存します。

−m /path/to/sources
make(1) を実行するディレクトリのパスを指定します。 (言い替え るとソースの場所です。-s がもう使われているので)

−t /path/to/temp/root
仮のルート環境をデフォルトの /var/tmp/temproot の代わりに /path/to/temp/root に作ります。

−d
仮のルートディレクトリの名前に、日付と時間を足します。 -t オ プションを指定しているときに日付も足したいなら、このオプショ ンは -t の後に置く必要があります。

−u N
umask を数字で指定します。デフォルトは 022 です。

−w N
sdiff(1) コマンドに画面幅を桁数で指定します。デフォルトは 80 です。

−D /path
ファイルをインストールする、宛先ディレクトリを指定します。

環境変数

mergemaster ユーティリティは、 PAGER 環境変数がセットされていればそれを使 い、さもなくば more(1) を使います。もし PAGER に、フルパスではなく、 PATH の範囲にないプログラムを指定している場合には、 mergemaster は選択肢ととも にどう続行するのかを催促します。 MM_PRE_COMPARE_SCRIPT と MM_EXIT_SCRIPT の変数は、前述のように使用します。スクリプト内部で使用する他の変数は、後 で詳述するように、 .mergemasterrc で指定可能です。

使用例

大抵の場合、あなたがする必要があるのは、プロンプトで mergemaster と打つこ とだけで、あとはスクリプトがあなたに代わって全ての作業をします。

context diff を使い、かつ mergemaster が処理が進むにつれ、よりたくさんの 説明をするようにするには:

# mergemaster -cv

mergemaster が仮のルート環境を /usr/tmp/root に作るように指定するには:

# mergemaster -t /usr/tmp/root

110 桁の画面と、厳密な比較を指定するには:

# mergemaster -sw 110

関連ファイル

       /etc/mergemaster.rc

$HOME/.mergemasterrc

mergemaster ユーティリティは、これらファイルがあれば読み込みます。コマン ドラインオプションは、rc ファイルオプションに優先します。 $HOME/.mergemasterrc は、 /etc/mergemaster.rc に優先します。全ての値をコ メントアウトした例を示します:

# mergemaster のオプションが、デフォルト値とともに一覧してあります
# 以下のオプションはコマンドラインが上書きします
#
# 仮のルート環境をインストールするディレクトリ
#TEMPROOT=’/var/tmp/temproot’
#
# CVS $Id の検査を省略して全てのファイルを比較する厳密な比較
#STRICT=no
#
# unified, context 等の diff の種類
#DIFF_FLAG=’-u’
#
# diff への追加オプション。-s を使用するとアンセットできます。

#DIFF_OPTIONS=’-I$FreeBSD:.*[$]’

# Ignores CVS Id tags

#
# より詳細な出力とチェックの追加を含める冗長モード
#VERBOSE=
#
# システム上に存在しないファイルは自動的にインストールする
#AUTO_INSTALL=
#
# /etc/rc.conf[.local] と /etc/defaults/rc.conf を比較する
#COMP_CONFS=yes
#
# 置き換えるファイルを保存する
#PRESERVE_FILES=yes
#PRESERVE_FILES_DIR=/var/tmp/mergemaster/preserved-files-‘date +%y%m%d-%H%M%S‘
#
# ’make’ を実行するディレクトリ (新しいファイルがある場所)
#SOURCEDIR=’/usr/src/etc’
#
# mergemaster がデフォルトのファイルモードとの比較に使う umask
#NEW_UMASK=022
#
# ファイルをインストールする、宛先ディレクトリを指定する
#DESTDIR=
#
# 以下のオプションはコマンドラインから上書きできません
# PAGER にフルパスを含めたくない人用
#DONT_CHECK_PAGER=
#
# 上を ’yes’ にしたら、ページャへの PATH が含まれているか確認してください
#PATH=/bin:/usr/bin:/usr/sbin
#
# 新旧の motd ファイルを比較しない
#IGNORE_MOTD=yes
#
# 比較開始前に実行するスクリプトやスクリプト完了後に実行するスクリプト
# のパスを指定する
#MM_PRE_COMPARE_SCRIPT=
#MM_EXIT_SCRIPT=

関連項目

cvs(1), diff(1), make(1), more(1), sdiff(1), pwd_mkdb(8)

/usr/src/etc/Makefile

       Nik Clayton,                      The Cutting Edge (using make world),     http://www.FreeBSD.org/doc/handbook/makeworld.html.  (訳注: 日本語版はhttp://www.jp.FreeBSD.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/makeworld.html)

診断

成功終了、ないしユーザが実行中に手動で脱出した場合には、終了ステータスは 0 です。

以下に挙げるいずれかの理由で失敗した場合には、終了ステータスは 1 です:

コマンドラインオプションが不正

仮のルート環境を作成するのに失敗

仮のルートにファイルを格納するのに失敗

歴史

mergemaster スクリプトは、 1998 年 3 月 13 日に私のウェブページの中でもっ と単純な形で comproot という名前で最初に公開されました。仮のルート環境を 作るというアイデアは、上で参照した Nik Clayton の make world tutorial か ら来ています。

作者

このマニュアルページとスクリプトは Douglas Barton ⟨DougB@FreeBSD.org⟩ が 書きました。

バグ

今のところわかっているバグはありません。なにか問題や、コメントや、提案が あれば、どうか作者まで報告してください。このプログラムになされた改良のい くつかはユーザからの提案によるものです。ありがとう。

FreeBSD 10.0 February 5, 2001 FreeBSD 10.0

スポンサーリンク