# マニュアルページ dmake.1

## 名前

         dmake - 分散メーク(DistributedMake)

## 形式

         dmake [-c dmake-rcfile] [-g dmake-group] [-j dmake-max-jobs]
         [-m {serial | parallel  | grid}] [-o dmake-odir]

## 機能説明

         注: このマニュアルページは、Solaris の make ユーティリティの
         マニュアルページを補完するものです。 dmake ユーティリティは
         Linux オペレーティングシステムでも動作しますが、 dmake のオ
         プションは他の make ユーティリティと比べて独自のものです。

         分散メーク (dmake) はメークファイルを解析して、並行して構築
         可能なターゲットを特定し、設定された多数のホストにの構築作業
         を分散します。

         標準の make ユーティリティを使用している場合、dmake へ移行す
         る際に必要なメークファイルの変更は、(あったとしても) ほとん
         どありません。dmake は make ユーティリティのスーパーセットで
         す。make を入れ子にするときは、一番上の makefile が make を
         呼び出す場合に $(MAKE) を使用しなければなりません。

         分散メークは、"dmake ホスト" で実行され、"ジョブ"を"構築サー
         バー"に分散します。ジョブは dmake ホストにも分散できます。こ
         の場合は、dmake ホストも構築サーバーになります。dmake は、
         ユーザーのメークファイルの内容を解析し、並行して構築できると
         判断したターゲットごとにジョブを分散させます。

         次の要件を満たしていれば、どのマシンも構築サーバーとして使用
         できます。

         - dmake ホスト (使用中のマシン) から、rsh を使用して構築サー
           バー上でコマンドをリモートで実行できる。このとき、パスワー
           ドの入力を求めるプロンプトは表示されないこと。次の例は、
           Solaris オペレーティングシステムを実行しているマシンの場合
           の dmake に対する which コマンドの使用結果を示しています。

                demo% rsh <分散メークを行うマシン名> which dmake
                /opt/SUNWspro/bin/dmake

           rsh を実行した時に、不要な出力があってはいけません。

         - dmake ソフトウェアがインストールされている bin ディレクト
           リに、構築サーバーからアクセス可能でなければなりません。デ
           フォルトで、dmake は、構築サーバー上の dmake 実行可能ファ
           イルへの論理パスが dmake ホスト上と同じであると仮定しま
           す。この仮定を変更するには、実行時構成ファイルのホストエン
           トリの属性としてパス名を指定します。

         dmake ホストから、使用する構築サーバー、および、各構築サー
         バーに割り当てる dmake ジョブ数を指定することができます。特
         定の構築サーバー上で実行することができる dmake ジョブ数の制
         限は、そのサーバーにも適用されます。

## オプション

         -c dmake-rcfile
              実行時構成ファイルを指定します。デフォルトの実行時構成
              ファイルは ~/.dmakerc です。

         -g dmake-group
              ジョブの分散先にする構築サーバーグループの名前を指定し
              ます。サーバーグループは実行時構成ファイルに定義してく
              ださい。デフォルトのサーバーグループは、実行時構成ファ
              イル中の最初のグループです。

         -j dmake-max-jobs
              実行時構成ファイル中の構築サーバーの指定グループに分散
              される最大ジョブ総数を指定します。デフォルトの最大ジョ
              ブ数は、構築サーバーグループに指定されるジョブの総数で
              す。ジョブは、実行時構成ファイルの中で出現する順に 1 つ
              ずつホストから減算、またはホストに加算されます。たとえ
              ば、実行時構成ファイルに指定されるジョブの総数が 8 で、

                   host earth { jobs = 3 }
                   host mars  { jobs = 5 }

              <分散する最大ジョブ数> を 11 と指定する場合、dmake は次
              のようにして、現在の最大ジョブ総数 (8) にさらに 3 つの
              ジョブを加算します。

                   host earth { jobs = 5 }
                   host mars  { jobs = 6 }

              また、<分散する最大ジョブ数> を 4 と指定する場合、dmake
              は次のようにして、元のジョブ数 8 から 4 つのジョブを減
              算します。

                   host earth { jobs = 1 }
                   host mars  { jobs = 3 }

         -m {serial | parallel | distributed | grid}
              次のいずれかのキーワードを指定します。

              serial      dmake を標準の make と同じように逐次動作さ
                          せます。

              parallel    ジョブを dmake ホストにだけ分散させます。

              distributed dmake を完全な分散モードで動作させます。こ
                          れは dmake のデフォルトです。

              grid        構築ジョブの分散に SGE (Sun Grid Engine) を
                          使います。

         -o dmake-odir
              dmake が一時出力ファイルを書き込みおよび読み取りできる
              共通物理ディレクトリを指定します。使用されるディレクト
              リは $(HOME)/.dmake です。このディレクトリと指定した
              ディレクトリは、すべての構築サーバーから見えなければな
              りません。このオプションは、ユーザーのローカルホスト上
              の $(HOME) ディレクトリとユーザーのすべての遠隔ホスト上
              の $(HOME) ディレクトリが、異なる物理 $(HOME) ディレク
              トリである場合にだけ使用してください。たとえば、このオ
              プションはスーパーユーザーが使用します。

         Note: これらのオプションと環境変数、およびこのマニュアルペー
               ジで後述するメークファイルのマクロによって、同じ動作が
               変更されます。優先順位は次のとおりです。

               1. コマンド行オプション

               2. メークファイルのマクロ

               3. 環境変数

               4. dmake のデフォルト

## 使用

      特殊な目的のターゲット
         dmake を使うと、構築サーバー上でターゲットを並行して構築でき
         ます。並行して処理を行うと、大規模なシステムやプロジェクトを
         構築するのに要する時間を大幅に短縮できます。dmake は、並行処
         理とタイミングを制御するために .PARALLEL 、 .NO_PARALLEL 、
         LOCAL 、 .WAIT という、特殊なメークファイルターゲットを使用
         します。

         .NO_PARALLEL:    このターゲットは、逐次処理を行うターゲット
                          を指定するために使用します。

         .PARALLEL:       このターゲットは、並行処理を行うターゲット
                          を指定するために使用します。

         .LOCAL:          このターゲットは、ローカルホスト上で逐次処
                          理を行うターゲットを指定するために使用しま
                          す。

         .WAIT            依存関係リストにこのターゲットを指定する
                          と、dmake は、並行処理の場合でも、この前の
                          依存関係の処理が終了するまで待機してから、
                          次の依存関係を処理します。

         このようなターゲットを使って記述してあるメークファイルは、
         Solaris 1.x と Solaris 2.x で配布される標準 make でも互換性
         を保っています。標準の make はこれらのターゲットを許容し、エ
         ラーを出しません (処理も行いません) 。

      dmake ジョブの制御
         dmake ジョブの分散は、次の 2 つの方法で制御されます。

         1. dmake ホスト上の dmake ユーザーは、構築サーバーとして使用
           したいマシンと各構築サーバーに分散したいジョブ数を指定する
           ことができます。

         2. 構築サーバーの所有者（
           /etc/opt/SPROdmake/dmake.conf ファイルを変更できるユー
           ザー）は、その構築サーバーに分散可能な dmake ジョブの最大
           総数を制御することができます。

      dmake ホスト
         dmake は、実行を開始すると、実行時構成ファイルを検索して、
         ジョブを分散する場所を調べます。一般に、このファイルは dmake
         ホスト上のユーザーのホームディレクトリに置いて、.dmakerc と
         いう名前を付けます。dmake は、次の場所と順序で実行時構成ファ
         イルを検索します。lp1.  -c オプションを使ってコマンド行で指
         定されたパス名

         2.   DMAKE_RCFILE というメークファイルのマクロを使って指定さ
              れたパス名

         3.   環境変数 DMAKE_RCFILE を使って指定されたパス名

         4.   ~/.dmakerc

         実行時構成ファイルが見つからない場合は、dmake は並行モードに
         切り替え、(デフォルトの) 2 つのジョブを dmake ホストに分散し
         ます。-j オプションまたは DMAKE_MAX_JOBS を使用してこの設定
         を変更することもできます。

         実行時構成ファイルには、構築サーバーのリストと、各構築サー
         バーに分散したいジョブ数を含めることができます。次は、単純な
         実行時構成ファイルの例です。

              # 自分のマシン。このエントリにより dmake はこのマシンにジョブを分散します。
              falcon { jobs = 1 }
              hawk
              eagle { jobs = 3 }
              # マネージャーのマシン。マネージャーはいつも会議中です。
              heron { jobs = 4 }
              avocet

         falcon、hawk、eagle、heron、avocet の各エントリが構築サー
         バーとして一覧表示されています。

         各構築サーバーに分散したいジョブ数を指定することができます。
         デフォルトのジョブ数は 2 です。

         "#" 文字で始まる行はコメントとして解釈されます。

         注:     この構築サーバーの一覧には、dmake ホストでもある
               falcon が含まれています。dmake ホストは構築サーバーと
               しても指定することができます。実行時構成ファイルに
               falcon を含めない場合、falcon には 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 の優先順位でジョブを分散させます。

         1. -g オプションへの引数としてコマンド行に指定されたグループ

         2. DMAKE_GROUP というメークファイルのマクロによって指定され
            たグループ

         3. 環境変数 DMAKE_GROUP によって指定されたグループ

         4. 実行時構成ファイルで 1 番目に列挙されている形式上のグルー
            プ

         実行時構成ファイルに指定するグループとホストの名前は、二重引
         用符で囲むことができます。これにより、グループとホストの名前
         をより柔軟な文字シーケンスで表現できます。たとえば、グループ
         の名前が数字で始まる場合、この名前は二重引用符で囲まなければ
         なりません。

         group "123_sparc"

         上記のとおり、dmake ソフトウェアがインストールされている bin
         ディレクトリは、構築サーバーからアクセス可能でなければなりま
         せん。デフォルトでは dmake は、構築サーバー上の dmake 実行可
         能ファイルへの論理パスが dmake ホスト上と同じであると仮定し
         ます。この仮定を変更するには、実行時構成ファイルのホストエン
         トリの属性としてパス名を指定します。次に例を示します。

         group sparc-cluster {
            host wren   { jobs = 10 , path = "/export/SUNWspro/bin" }
            host stimpy { path = "/opt/SUNWspro/bin"                }
         }

      構築サーバー
         /etc/opt/SPROdmake/dmake.conf ファイルは、構築サーバーのファ
         イルシステム中に置かれています。このファイルは、次の内容を指
         定するために使用します。

         Required  該当する構築サーバー上で並行処理できる、すべての
                   ユーザーからの dmake ジョブの最大総数 (必須指定)。

         Optional  すべての dmake ジョブに適用される、/usr/bin/nice
                   で指定する優先順位 (必要に応じて)。

         次に dmake.conf ファイルの例を示します。
              max_jobs: 8
              nice_prio: 5

         このファイルは、すべての dmake ユーザーから構築サーバー上で
         実行が許可される最大 dmake ジョブ数を 8 に設定します。ジョブ
         を実行する優先順位は、nice_prio コマンドで変更することができ
         ます。詳細は、nice(1) を参照してください。

         注:     /etc/opt/SPROdmake/dmake.conf ファイルが構築サーバー
               上にない場合には、そのサーバー上では dmake ジョブの実
               行は許可されません。

## 環境変数 / マクロ

         以下は、環境変数またはメークファイルのマクロとして定義するこ
         とができます。

         DMAKE_RCFILE             実行時構成ファイルを定義します。デ
                                  フォルトの実行時構成ファイルは
                                  ~/.dmakerc です。

         DMAKE_GROUP              ジョブの分散先にする構築サーバーグ
                                  ループの名前を定義します。サーバー
                                  グループは実行時構成ファイルに定義
                                  されます。デフォルトのサーバーグ
                                  ループは、実行時構成ファイルの 1 番
                                  目のグループです。

         DMAKE_MAX_JOBS           実行時構成ファイルの中で指定されて
                                  いる構築サーバーグループに分散され
                                  る最大ジョブ数を定義します。デフォ
                                  ルトの最大ジョブ数は、構築サーバー
                                  グループに指定されるジョブの総数で
                                  す。ジョブは、実行時構成ファイルの
                                  中で出現する順に 1 ずつホストから減
                                  算、またはホストに加算されます。例
                                  については、このマニュアルページの
                                  -j オプションを参照してください。

         DMAKE_ADJUST_MAX_JOBS    次のいずれかのキーワードを含めるこ
                                  とができます。

         YES  システムの現在の負荷に応じて、dmake が並列ジョブの制限
              を調整できるようにします。システムの負荷が過剰でない場
              合、dmake はユーザーが定義した制限を使用します。システ
              ムの負荷が過剰な場合、dmake は「現在の」制限を、ユー
              ザーが定義した制限より下に設定します。

              この変数が設定されない場合、dmake はシステムの現在の負
              荷に応じて並列ジョブの制限を調整します。これは dmake の
              デフォルトになります。

         NO   dmake の自動調整機構をオフに切り替えます。

         DMAKE_MODE
              次のいずれかのキーワードを含めることができます。

              serial      dmake を標準の make と同じように逐次動作さ
                          せます。

              parallel    dmake がジョブを dmake ホストにだけ分散する
                          ようにします。この動作は、Sun WorkShop
                          TeamWare 1.x の ParallelMake プログラムと同
                          じです。

              distributed dmake を完全な分散モードで動作させます。こ
                          れは dmake のデフォルトです。

              grid        構築ジョブの分散に SGE (Sun Grid Engine) を
                          使います。

         DMAKE_ODIR
              dmake が一時出力ファイルを書き込む先、もしくは一時出力
              ファイルを読み取る元の共通の物理ディレクトリを定義しま
              す。この環境変数やマクロは、ローカルホスト上のホーム
              ディレクトリとすべてのリモートホスト上のホームディレク
              トリが同じ物理ホームディレクトリでない場合にだけ使用し
              ます。たとえば、スーパーユーザーがこのオプションを使用
              します。

## ファイル

         $(HOME)/.dmakerc    デフォルトの実行時構成ファイル。構築サー
                             バーと構築サーバーグループの名前が含まれ
                             ます。

         /etc/opt/SPROdmake/dmake.conf
                             構築サーバー上にあるこのファイルは、すべ
                             ての dmake ユーザーによって構築サーバー
                             に分散することができる最大ジョブ総数を指
                             定するために使用されます。また、すべての
                             dmake ジョブに適用される /usr/bin/nice
                             で指定する優先順位を指定するためにも使用
                             されます。

## 関連項目

         HTML ブラウザで以下の URL を指定して、完全な Sun Studio 9 マ
         ニュアルセットにアクセスできます。

            /opt/SUNWspro/docs/index.html (Solaris の場合)
            /opt/sun/sunstudio9/docs/index.html (Linux の場合)

         デフォルトの /opt または /usr 以外のディレクトリにコンパイラ
         がインストールされている場合は、実際のパスをシステム管理者に
         お尋ねください。

         更に詳しい情報は、以下のマニュアルページを参照してください。
         make(1)、 rsh(1)、 hosts(4)、 hosts.equiv(4)、 attri-
         butes(5)、 largefile(5)、 qrsh(1)