dmake [-c dmake-rcfile] [-g dmake-group] [-j dmake-max-jobs] [-m {serial | parallel | distributed | grid}] [-o dmake-odir]
注: このマニュアルページは、Solaris make ユーティリティーのマニュアルページを補足します。dmake ユーティリティーは Linux オペレーティングシステム上で動作しますが、dmake オプションはほかの make ユーティリティーとは無関係です。
分散メイク (dmake) はメイクファイルを解析し、並行して構築可能なターゲットを特定し、設定された多数のホストにそれらのターゲットの構築を分散します。
標準的な make ユーティリティーを使用している場合は、dmake への切り替えに伴ってメイクファイルに変更を加える必要があるとしても、変更はわずかです。dmake は、make ユーティリティーの超集合です。make が入れ子になっていて、最上位のメイクファイルが「make」を呼び出す場合、$(MAKE) を使用する必要があります。
ユーザーは dmake を「dmake ホスト」上で実行し、ジョブを構築サーバーに分散します。ジョブを dmake ホストに分散することもでき、その場合は dmake ホストも構築サーバーになります。dmake は、(メイクファイルに基づいて) 同時に構築可能であると dmake が判断したメイクファイルターゲットに基づいてジョブを分散します。
次の要件を満たしていれば、どのマシンも構築サーバーとして使用できます。
dmake ホスト (使用中のマシン) から、構築サーバー上でコマンドをリモート実行するためのパスワードを要求されることなく、rsh (または ssh) を使用できる必要があります。(使用するリモートシェルを指定する方法については次を参照してください。)
次の例は、Solaris オペレーティングシステムが動作するマシン上で、which コマンドと一緒に rsh または ssh をテストとして使用した結果を示しています。
demo% rsh machine-name which dmake /bin/dmake demo% ssh machine-name which dmake /bin/dmake
rsh または ssh の呼び出しは、追加の出力が返されないクリーンな状態である必要があります。
dmake ソフトウェアがインストールされている bin ディレクトリに構築サーバーからアクセスできる必要があります。デフォルトでは、dmake は構築サーバー上の dmake 実行可能ファイルへの論理パスが dmake ホストと同じであると仮定します。この仮定は、実行時構成ファイルのホストエントリの属性としてパス名を指定することによってオーバーライドできます。
ホスト上に /etc/opt/SPROdmake/dmake.conf ファイルが存在していて、読み取り可能であり、適切な情報が含まれている。このファイルが存在しない場合は、dmake はこのシステムでジョブを 1 つだけ分散します。
dmake ホストから、使用される構築サーバーや、各構築サーバーに割り当てられる dmake ジョブの数を制御できます。特定の構築サーバー上で実行できる dmake ジョブの数も、そのサーバー上で制限できます。
代替の実行時構成ファイルを指定します。デフォルトの実行時構成ファイルは $(HOME)/.dmakerc です。
ジョブの分散先にする構築サーバーグループの名前を指定します。サーバーグループは実行時構成ファイル内に定義します。デフォルトのサーバーグループは、実行時構成ファイル内の最初のグループです。
実行時構成ファイル内で指定された構築サーバーのグループに対して分散される最大のジョブ総数を指定します。ジョブの最大数のデフォルトは、構築サーバーグループ内で指定されたすべてのジョブの合計です。ジョブは、ホストが実行時構成ファイル内で表示される順に、ホストから 1 つずつ減算または加算されます。たとえば、実行時構成ファイル内で指定されるすべてのジョブの合計が、次のように 8 つだとします。
host earth { jobs = 3 } host mars { jobs = 5 }
ここで、dmake-max-jobs が 11 に指定された場合、dmake は次のようにして、現在のジョブの総数の最大値 (8 つ) にジョブをあと 3 つ追加します。
host earth { jobs = 5 } host mars { jobs = 6 }
また、dmake-max-jobs が 4 に指定された場合、dmake は 4 つのジョブを (元の 8 つから) 削除して、次のようになります。
host earth { jobs = 1 } host mars { jobs = 3 }
次のいずれかのキーワードを指定します。
dmake は make の標準の直列バージョンのように動作します。
dmake は dmake ホストにのみジョブを分散します。
dmake は完全な分散モードで動作します。これが dmake のデフォルトです。
dmake は SGE (Solaris Grid Engine) を使用してビルドジョブを分散します。
dmake が一時出力ファイルを書き込んだり、一時出力ファイルを読み取ったりできる共通の物理ディレクトリを指定します。使用されるディレクトリは $(HOME)/.dmake で、このディレクトリまたは指定されるディレクトリは、すべての構築サーバーから表示できる必要があります。このオプションは、ローカルホスト上の $(HOME) ディレクトリと、すべてのリモートホスト上の $(HOME) ディレクトリが同一の物理 $(HOME) ディレクトリでない場合にのみ使用します。たとえば、root ユーザーがこのオプションを使用します。
このマニュアルページで以下に説明するこれらのオプション、環境変数、およびメイクファイルマクロは、同じ動作を変更します。優先順位は次のように定義されます。
コマンド行オプション
メイクファイルマクロ
環境変数
dmake のデフォルト
dmake によって、いくつかの構築サーバー上にターゲットを同時に構築できます。並行処理によって、大規模なシステムまたはプロジェクトを構築するのに必要な時間が大幅に削減されます。dmake は、並行性とタイミングを制御するために、特殊なメイクファイルターゲット .PARALLEL、.NO_PARALLEL、.LOCAL、および .WAIT を提供します。
逐次に処理するターゲットを示すには、このターゲットを使用します。
並列で処理するターゲットを示すには、このターゲットを使用します。
ローカルホスト上で逐次に処理するターゲットを示すには、このターゲットを使用します。
依存関係リストにこのターゲットを指定すると、処理が並列の場合であっても、dmake はターゲットより優先される依存関係が完了するまで待機したあと、後続のターゲットを処理します。
これらのターゲットを使用して記述したメイクファイルは、Solaris 1.x および Solaris 2.x とともに配布される make の標準バージョンと互換性を保ちます。標準の make は、エラーを出さずに (またアクションを実行せずに) これらのターゲットを受け入れます。
dmake ジョブの分散は、次の 2 つの方法で制御されます。
dmake ホスト上の dmake ユーザーは、構築サーバーとして使用するマシンと、各構築サーバーに分散するジョブの数を指定できます。
構築サーバーの所有者 (/etc/opt/SPROdmake/dmake.conf ファイルを変更できるユーザー) は、その構築サーバーに分散できる dmake ジョブの最大の総数を制御できます。
dmake は実行を開始すると、ジョブの分散先を知るために、実行時構成ファイルを検索します。一般的に、このファイルは dmake ホスト上のホームディレクトリに配置され、.dmakerc という名前が付けられます。dmake は次の場所の実行時構成ファイルを次の順序で検索します。
コマンド行で -c オプションを使用して指定したパス名
DMAKE_RCFILE メイクファイルマクロを使用して指定したパス名
DMAKE_RCFILE 環境変数を使用して指定したパス名
$(HOME)/.dmakerc
実行時構成ファイルが見つからない場合、dmake は並列モードに切り替わり、dmake ホストに 2 つのジョブ (デフォルト) を分散します。これは、-j オプションか、DMAKE_MAX_JOBS を使用して変更できます。
実行時構成ファイルには、構築サーバーのリストと、各構築サーバーに分散するジョブの数を含めることができます。次は、単純な実行時構成ファイルのサンプルです。
# My machine. This entry causes dmake to distribute to it falcon { jobs = 1 } hawk eagle { jobs = 3 } # Manager's machine. She's usually at meetings heron { jobs = 4 } avocet
エントリ falcon、hawk、eagle、heron、および avocet は、構築サーバーとしてリストされています。
各構築サーバーに分散するジョブの数を指定できます。ジョブのデフォルト数は 2 です。
"#" 文字で始まる任意の行は、コメントとして解釈されます。
この構築サーバーの一覧には、dmake ホストでもある falcon が含まれています。dmake ホストは構築サーバーとして指定することもできます。これを実行時構成ファイルに含めない場合、dmake ジョブはこれに対して分散されません。
また、実行時構成ファイル内に構築サーバーのグループを構築することもできます。これは、状況に応じて、構築サーバーの異なるグループを容易に切り替える柔軟性を提供します。たとえば、異なるオペレーティングシステムのビルド用に異なる構築サーバーのグループを定義したり、特殊なソフトウェアがインストールされている構築サーバーのグループを定義したりすることができます。構築サーバーはすべて同じアーキテクチャーで、同じバージョンの SunOS がインストールされている必要があります。
次の実行時構成ファイルにはグループが含まれています。
earth { jobs = 2 } mars { jobs = 3 } group lab1 { host falcon { jobs = 3 } host hawk host eagle { jobs = 3 } } group lab2 { host heron host avocet { jobs = 3 } host stilt { jobs = 2 } group labs { group lab1 group lab2 } group sunos5.x { group labs host jupiter host venus { jobs = 2 } host pluto { jobs = 3 } }
形式上のグループは "group" ディレクティブで指定され、グループの構成要素の一覧は中括弧 ({}) で区切られます。
グループの構成要素である構築サーバーは、オプションの "host" ディレクティブによって指定されます。
グループはほかのグループの構成要素となることができます。
個々の構築サーバーは、構築サーバーのグループも含んでいる実行時構成ファイル内にリストできます。この場合、dmake はこれらの構築サーバーを、名前の付いていないグループの構成要素として扱います。
dmake は、次の一覧によって指定されるホストの単一グループに、1 から 4 の優先順位でジョブを分散させます。
コマンド行で -g オプションの引数として指定されたグループ
DMAKE_GROUP メイクファイルマクロで指定されたグループ
DMAKE_GROUP 環境変数で指定されたグループ
実行時構成ファイルにリストされている先頭の形式上のグループ
実行時構成ファイル内で指定されるグループおよびホストの名前は、二重引用符で囲むことができます。これにより、グループおよびホストの名前の一部として表示される文字シーケンスに関して、高い柔軟性を得ることができます。たとえば、グループの名前が数字で始まる場合、次のように二重引用符で囲むようにしてください。
group "123_sparc"
上記のとおり、dmake ソフトウェアがインストールされている bin ディレクトリに構築サーバーからアクセスできる必要があります。デフォルトでは、dmake は構築サーバー上の dmake 実行可能ファイルへの論理パスが dmake ホストと同じであると仮定します。この仮定は、実行時構成ファイルのホストエントリの属性としてパス名を指定することによって無効にできます。例:
group sparc-cluster { host wren { jobs = 10 , path = "/opt/solarisstudio12.4/bin" } host stimpy { path = "/bin" } }
/etc/opt/SPROdmake/dmake.conf ファイルは構築サーバーのファイルシステムにあります。このファイルを使用して次を指定します。
その構築サーバー上で同時に実行できる (すべてのユーザーからの) dmake ジョブの最大の総数。
すべての dmake ジョブが実行される /usr/bin/ の優先順位。
次は、dmake.conf ファイルのサンプルです。
max_jobs: 8 nice_prio: 5
このファイルは、構築サーバー上で実行が許可される (すべての dmake ユーザーからの) dmake ジョブの最大数を 8 に設定します。実行されるジョブの優先順位は、nice_prio コマンドを使用して変更できます。nice(1) を参照してください。
構築サーバー上に /etc/opt/SPROdmake/dmake.conf ファイルが存在しない場合、そのサーバー上で dmake ジョブは実行を許可されません。
リモートシェルのパスは dmakerc ファイルに指定できます。例:
host earth { jobs = 3 } host mars { jobs = 5 , rsh = "/bin/ssh" }
rsh= が指定されない場合、dmake はデフォルトで /bin/rsh を使用します。
rsh と同様に、ssh がパスワードを必要とせずにリモートホストにログインでき、警告またはエラーを出さないようにすることはユーザーの責任です。
環境変数またはメイクファイルマクロのいずれかとして次を定義できます。
代替の実行時構成ファイルを定義します。デフォルトの実行時構成ファイルは $(HOME)/.dmakerc です。
ジョブの分散先となる構築サーバーグループの名前を定義します。サーバーグループは実行時構成ファイル内で定義されます。デフォルトのサーバーグループは、実行時構成ファイル内の最初のグループです。
実行時構成ファイル内で指定された構築サーバーのグループに対して分散される最大のジョブ総数を定義します。ジョブの最大数のデフォルトは、構築サーバーグループ内で指定されたすべてのジョブの合計です。ジョブは、ホストが実行時構成ファイル内で表示される順に、ホストから 1 つずつ減算または加算されます。例については、このマニュアルページの -j オプションを参照してください。
次のいずれかのキーワードを含むことができます。
dmake はシステムの現在の負荷に応じて並列ジョブの制限を調整できます。システムが過負荷でない場合、dmake はユーザーによって定義された制限を使用します。システムが過負荷な場合、dmake は「現在の」制限を、ユーザーによって定義された制限よりも小さく設定します。
この変数が設定されない場合、dmake はシステムの現在の負荷に応じて並列ジョブの制限を調整します。これが dmake のデフォルトです。
dmake の自動調整メカニズムをオフにします。
次のいずれかのキーワードを含むことができます。
dmake は make の標準の直列バージョンのように動作します。
dmake は dmake ホストにのみジョブを分散します。
dmake は完全な分散モードで動作します。これが dmake のデフォルトです。
dmake は SGE (Solaris Grid Engine) を使用してビルドジョブを分散します。
dmake が一時出力ファイルを書き込んだり、一時出力ファイルを読み取ったりできる共通の物理ディレクトリを定義します。この環境変数またはマクロは、ローカルホスト上の $(HOME) ディレクトリと、すべてのリモートホスト上の $(HOME) ディレクトリが同一の物理 $(HOME) ディレクトリでない場合にのみ使用します。たとえば、root ユーザーがこのオプションを使用します。
ログファイルの形式を定義します。次のいずれかのキーワードを含むことができます。
各構築ジョブが開始されると、dmake はシステムとコマンドの名前をログファイルに出力します。また、コマンドそれ自身から何らかの出力がある場合、ジョブが完了したとき、dmake はコマンド出力とともに、システムとコマンドの名前をふたたびログファイルに出力します。
例:
host1 --> 1 job echo "Done host1" host2 --> 1 job echo "Done host2" host1 --> Job output echo "Done host1" Done host1 host2 --> Job output echo "Done host2" Done host2
これが dmake のデフォルトです。
dmake は並列ジョブの出力を直列化でき、ログファイルが読みやすくなります。このモードでは、各ジョブが完了すると、dmake はコマンドを 1 度だけ出力し、コマンド出力がその直後に続きます。
例:
echo "Done host1" Done host1 echo "Done host2" Done host2
デフォルトの実行時構成ファイル。構築サーバーと構築サーバーのグループの名前が含まれています。
このファイルは構築サーバーに配置され、すべての dmake ユーザーによって構築サーバーに分散できるジョブの最大総数を指定するために使用されます。また、すべての dmake ジョブが実行される際の /usr/bin/nice の優先順位を指定するためにも使用されます。
分散モードで dmake を使用した場合に何か問題が発生する場合は、次の点を確認してください。
$HOME 環境変数がアクセス可能なディレクトリに設定されているか
% ls -la $HOME
ファイル $HOME/.dmakerc が存在するか、このファイルの読み取りが可能か、このファイルの情報が正しいか
% cat $HOME/.dmakerc
$HOME/.dmakerc ファイルに記載されているすべてのホストは活動中である必要があります。/usr/sbin/ping コマンドを使用して、各ホストを検査してください。
% /usr/sbin/ping $HOST
$HOST は、$HOME/.dmakerc ファイルでホストとして示されているシステムの名前です。
dmake コマンド、rxm コマンド、および rxs コマンドを見つけるための which コマンドを使用して、dmake バイナリのパスが正しいことを確認します。
% which dmake % which rxm % which rxs
各ホストへのリモートログイン (rsh または ssh) がパスワードなしで動作し、各リモートログインの所要時間が許容範囲 (2 秒未満) である。
% time rsh $HOST uname -a
各ホスト上にファイル /etc/opt/SPROdmake/dmake.conf が存在するか。このファイル内の情報は正しいか。このファイルが存在しない場合は、dmake はこのシステムでジョブを 1 つだけ分散します。
% rsh $HOST cat /etc/opt/SPROdmake/dmake.conf
各ホストの dmake バイナリのパスが正しいか
% rsh $HOST `which dmake` % rsh $HOST `which rxm` % rsh $HOST `which rxs`
各ホストから構築領域を利用できるか (rwx):
% cd $BUILD % rm $HOST.check.tmp % echo "Build area is available from host $HOST" > $HOST.check.tmp % rsh $HOST cat $BUILD/$HOST.check.tmp
$BUILD には、構築領域のフルパスを指定してください。
その $HOME は各ホストから使用可能か
% cd $HOME % rm $HOST.check.tmp % echo "HOME is available from host $HOST" > $HOST.check.tmp % rsh $HOST cat $HOME/$HOST.check.tmp
make (1S) , rsh (1) , ssh (1) , hosts (4) , hosts.equiv (4) , attributes (5) , largefile (5) , qrsh(1)
Oracle Solaris Studio の完全なドキュメントセットにアクセスしてください。
http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation