このスクリプトは /usr/src/etc/Makefile を使って / から下の仮のルート環境を作成し、そこに様々なファイルを格納します。 [-m ] コマンドラインオプションで違うソースディレクトリを指定することや、 [-D ] コマンドラインオプションで違う宛先ディレクトリを指定することもできます。 そしてその環境中のそれぞれのファイルを、 インストールされているものと比較します。 スクリプトが新しいファイルに変更点を見つけた場合や、 新しいファイルに対応するインストールされているファイルがない場合には、 それを処理するための 4 つの選択肢を示します。 新しいファイルをそのままインストールする、 新しいファイルは消す、 新旧のファイルを sdiff(1) を使って適切にマージする、 後で手でマージするためにファイルを仮のルート環境に残しておく、 のいずれかを選べます。
デフォルトでは、 /var/tmp/temproot に仮のルートを作り、 cvs(1) バージョン文字列 %Id/%FreeBSD があるファイルについてはそれを比較して、 もし同じであれば仮のファイルを削除します。 $Id 文字列がない時や、あっても一致しない場合には、 ファイルそのものを比較します。 $Id 文字列を無視して全てのファイルを比較するように指定することもできます。
マージメニューのオプションは、 古いファイルに対するカスタマイズを取り出して、 新しいファイルに簡単にマージできるようにデザインされています。 カスタマイズしていないファイルに対するファイルの変更を取り込むために、 マージ機能を使用することもできますが、推奨できません。
ユーティリティは umask を調べて、022 以外であれば警告を出します。 ほとんどの設定ファイルは world read パーミッションを与えることが 強制されているわけではありませんが、 そうしないと問題になるかもしれません。 もし 022 以外 の umask を選び、あとで何らかのトラブルが生じた場合、 その原因がこれかもしれません。 /etc/master.passwd は特例として扱います。 このファイルないしマージしたファイルをインストールすることを選択すると、 このファイルのパーミッションはセキュリティ上の理由から 常に 600 (rw-------) になります。 このファイルのアップデート版をインストールした後は、 pwd_mkdb8 を -p オプション付きで実行して、 パスワードデータベースの再構築と /etc/passwd の作り直しをさせる必要があります。
スクリプトは、 /usr/src/etc/Makefile が作成したファイルに付けた所有者 ID およびグループ ID と、 umask によって指定されたファイルパーミッションを用います。 context diff を選ばない限り、 デフォルトで unified diff を使って差分を表示します。
ユーティリティは、 比較開始直前と実行完了前に、指定したスクリプトを読み込みます。 最も簡単な方法は、 .mergemasterrc において、スクリプトへのパスを適切な変数へ設定することです。 比較前に読み込まれるスクリプトは MM_PRE_COMPARE_SCRIPT で指定し、スクリプト完了後に実行するものは MM_EXIT_SCRIPT で指定します。 これが、 ローカルでの修正および特別な処理を行うファイルを指定するための推奨方法です。 これには、比較せずに削除したいファイルも含みます。 指定したスクリプトは、 内部から読み込まれますので、 スクリプトの全変数がカスタムスクリプト中で使用可能です。 /etc/mergemaster.rc も使用可能です。 これは、 .mergemasterrc の前に読み込まれます。 コマンドラインで指定されたオプションが最後に更新されますので、 両方のファイルに優先します。
オプションは以下の通りです:
context diff を使い、かつ が処理が進むにつれ、よりたくさんの説明をするようにするには:
# mergemaster -cv
が仮のルート環境を /usr/tmp/root に作るように指定するには:
# mergemaster -t /usr/tmp/root
110 桁の画面と、厳密な比較を指定するには:
# mergemaster -sw 110
ユーティリティは、これらファイルがあれば読み込みます。 コマンドラインオプションは、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=
/usr/src/etc/Makefile
以下に挙げるいずれかの理由で失敗した場合には、終了ステータスは 1 です:
コマンドラインオプションが不正
仮のルート環境を作成するのに失敗