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 −r −v −a −h −i −p −C −P −m /path/to/sources −t /path/to/temp/root −d −u N −w N −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
のオプションが、デフォルト値とともに一覧してあります |
#DIFF_OPTIONS=’-I$FreeBSD:.*[$]’ |
# Ignores CVS Id tags |
# |
関連項目
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 |