15 Feb 2013
gfservice 1 Gfarm
gfservice リモートホストから Gfarm のサーバーを制御する。
`gfservice` オプション サブコマンド ホストID 引数 ...

## DESCRIPTION

`gfservice` は、Gfarm の管理者がリモートホスト上の サーバー (`gfmd`、`gfsd`、PostgreSQL) を操作するためのツールです。 今のところ、OpenLDAP には対応していません。 サーバーの実行開始、停止、セットアップ (`config-gfarm` や `config-gfsd` の実行)、 サーバー廃止の後始末といったことができます。

`gfservice` のコマンド行は、たとえば次のようになります。

    	gfservice start-gfmd gfmd2

ここで、「start-gfmd」はサブコマンド、 「gfmd2」 はホストID をそれぞれ表しています。 このコマンド行を実行すると、`gfservice` は 「gfmd2」と名付けられたホスト上の gfmd の 実行開始を試みます。 リモートのサーバーホストを指定する際、`gfservice` では ホスト名の代わりにホストID を用います。 ホストID (gfmd1、 gfmd2、...) は `gfservice` 用 の設定ファイルで定義します。 以下に、設定ファイルの記述例を載せます。

    	gfmd1=metadb1.example.com
    	gfmd1_CONFIG_GFARM_OPTIONS="-A $LOGNAME -X"
    	gfmd2=metadb2.example.com
    	gfmd2_CONFIG_GFARM_OPTIONS="-A $LOGNAME -X"

    	gfsd1=spool1.example.com
    	gfsd2=spool2.example.com

`gfservice` は、読み込むべき設定ファイルのパスを次の要領 で決定します。

1. 「`-f` ファイル」オプションが指定 されていれば、そのファイルを読み込みます。

2. 上記以外の場合で、環境変数 `GFSERVICE_CONF` が定義され、 かつ値が空文字列でなければ、値として記されたファイルを読み込みます。

3. 上記以外の場合は、`$HOME/.gfservice` を読み込みます。

`gfservice` は設定ファイルの読み込みに失敗すると、 エラーメッセージを出力して、ただちに終了します。 設定ファイルそれ自体は Bourne シェルスクリプトで、`gfservice` はそのファイルを自身の一部として取り込みます (正確に言えば、スクリプト として評価します)。 設定ファイルについての詳しい説明は、gfservice.conf(5) を参照して下さい。

`gfservice` は、リモートホストと接続するために、SSH (Secure Shell) を使用します。 サブコマンド 1 個の処理を遂行する間、何度も `ssh` を実行することがあるので、SSH エージェント (OpenSSH の `ssh-agent` など) を用いるか、パスフレーズが空の 認証キーを用いるなどして、パスフレーズを毎回入力しなくて済むように することをお薦めします。

SSH に加えて、`gfservice` はリモートホスト上で root 権限を得るために Sudo コマンドを使用します。 各リモートホストの `sudoers` ファイル (Sudo の設定 ファイル) に以下のような行を足して下さい。

    	user ALL=(root, _gfarmfs, _gfarmmd) NOPASSWD: gfservice-agent

ここで、user は `gfservice` を実行するユーザの名前です。 NOPASSWD は必須ではありませんが、省くと `sudo` は何度も パスワードを訊いてくることがあります。

gfservice は SSH と Sudo を用いて、リモートホスト上にある `gfservice-agent` というエージェントコマンドを実行します ので、`gfservice` コマンドで操作したいホストすべてに、 `gfservice-agent` をインストールしておく必要があります。

`gfservice`はユーザが新しくサブコマンドを追加できるよ うに、プラグインシステムを採用しています。 詳しい説明は "PLUG-IN SYSTEM" の節を参照して下さい。

## OPTIONS

`-d`

  デバッグ情報を出力します。 `gfservice` は、このオプションを `gfservice-agent` に渡しますので、 `gfservice-agent` からもデバッグ情報が出力されます。

`-f` ファイル

  デフォルトの設定ファイルの代わりに、「ファイル」を 読み込みます。

`-t` 時間

  操作のタイムアウトを、「時間」秒とします。 `gfservice` がサーバープログラム (gfmd、gfsd、バックエンド データベース) の実行開始ないし終了を試みる際、処理が完了するか、もしくは `gfservice` の指定時間が経過するかまで待ちます。 「時間」として 「no」を指定すると、タイムアウトは 起きなくなります。 デフォルト値は、「no」です。

`-k`

  このオプションが`config-gfarm` サブコマンドもしくは `config-gfarm-master` サブコマンドと共に指定された場合、 `gfservice` は `gfkey` コマンドを用いて 共有秘密鍵ファイルを作成します。

## SUB-COMMANDS FOR GFMD

以下に挙げているのは、`gfmd` を操作するサブコマンドです。 コマンド行に与えるホストID は、「gfmdn」 (gfmd1, gfmd2, ...) でなくてはなりません。 それ以外の場合、`gfservice` はエラーを通知してただちに 終了します。

`backend-db-status` ホストID

  バックエンドデータベースが実行中であれば、終了コード 0 で終了します。 それ以外の場合は、1 で終了します。

`gfmd-status` ホストID

  gfmd が実行中であれば、終了コード 0 で終了します。 それ以外の場合は、1 で終了します。

`start-backend-db` ホストID

  バックエンドデータベースが実行中でなければ、実行を開始します。

`start-gfmd` ホストID

  `gfmd` が実行中でなければ、実行を開始します。

`start-gfmd-master` ホストID

  サブコマンド `start-gfmd` の別名です。

`start-gfmd-slave` ホストID

  サブコマンド `start-gfmd` と同じですが、gfmd には `-S` オプションが付与されます。

`start-gfarm` ホストID

  バックエンドデータベースおよび `gfmd` が実行中でなければ、 実行を開始します。

`start-gfarm-master` ホストID

  サブコマンド `start-gfarm` の別名です。

`start-gfarm-slave` ホストID

  サブコマンド `start-gfarm` と同じですが、gfmd には `-S` オプションが付与されます。

`stop-backend-db` ホストID

  バックエンドデータベースが実行中なら、実行を停止します。

`stop-gfmd` ホストID

  `gfmd` が実行中なら、実行を停止します。

`stop-gfarm` ホストID

  バックエンドデータベースおよび `gfmd` が実行中なら、 実行を停止します。

`kill-gfmd` ホストID

  `gfmd` が実行中なら、強制停止 (SIGKILL を送付) します。

`restart-backend-db` ホストID

  サブコマンド `stop-backend-db` と `start-backend-db` を続けて実行します。

`restart-gfmd` ホストID

  サブコマンド `stop-gfmd`」と 「`start-gfmd` を続けて実行します。

`restart-gfmd-master` ホストID

  サブコマンド `restart-gfmd` の別名です。

`restart-gfmd-slave` ホストID

  サブコマンド `stop-gfmd` と `start-gfmd-slave` を続けて実行します。

`restart-gfarm` ホストID

  サブコマンド `stop-gfarm` と `start-gfarm` を続けて実行します。

`restart-gfarm-master` ホストID

  サブコマンド `restart-gfarm` の別名です。

`restart-gfarm-slave` ホストID

  サブコマンド `stop-gfarm` と `start-gfarm-slave` を続けて実行します。

`promote` ホストID

  `gfmd` をスレーブからマスターへ昇格させます。

`promote-gfmd` ホストID

  サブコマンド `promote` の別名です。

`set-gfmd-conf` ホストID 設定名称 値

  リモートホスト上の `gfmd.conf` ファイルに

      	設定名称 値

  という行を加えます。 既に `gfmd.conf` に 「設定名称」という行が存在している場合、 `gfservice` はそれを削除してから、新たに行を追加します。

`set-gfsd-conf` ホストID 設定名称 値

  リモートホスト上の `gfsd.conf` ファイルに

      	設定名称 値

  という行を加えます。 既に `gfsd.conf` に 「設定名称」という行が存在している場合、 `gfservice` はそれを削除してから、新たに行を追加します。

`unset-gfmd-conf` ホストID 設定名称

  リモートホスト上の `gfmd.conf` ファイルから 「設定名称」行を削除します。 `gfmd.conf` ファイルに「設定名称」 行がない場合、ファイルは更新されません。

`unset-gfsd-conf` ホストID 設定名称

  リモートホスト上の `gfsd.conf` ファイルから 「設定名称」行を削除します。 `gfsd.conf` ファイルに「設定名称」 行がない場合、ファイルは更新されません。

`backup-backend-db` ホストID

  リモートホスト上のバックエンドデータベースのバックアップを行い、 バックアップデータを標準出力へ出力します。

`backup-gfmd-conf` ホストID

  リモートホスト上の `gfarm2.conf` ファイルを、標準出力 へ出力します。

`backup-gfsd-conf` ホストID

  リモートホスト上の `gfsd.conf` ファイルを、標準出力 へ出力します。

`backup-usermap` ホストID

  リモートホスト上の `usermap` ファイルを、標準出力 へ出力します。

`restore-backend-db` ホストID

  リモートホスト上のバックエンドデータベースのデータを復旧します。 バックアップデータは、標準入力から読み込みます。

`restore-gfmd-conf` ホストID

  リモートホスト上の `gfmd.conf` ファイルを復旧します。 `gfservice` は、`gfmd.conf` の バックアップデータを標準入力から読み込みます。

`restore-gfsd-conf` ホストID

  リモートホスト上の `gfsd.conf` ファイルを復旧します。 `gfservice` は、`gfsd.conf` の バックアップデータを標準入力から読み込みます。

`restore-usermap` ホストID

  リモートホスト上の `usermap` ファイルを復旧します。 `gfservice` は、`usermap` の バックアップデータを標準入力から読み込みます。

`config-gfarm` ホストID

  リモートホスト上で `config-gfarm` コマンドを実行します。 このとき、設定ファイルで変数 「gfmdn_CONFIG_GFARM_OPTIONS」が宣言されていれば、 その値が `config-gfarm` にオプションとして付与されます。 レプリケーション機能を有効にするときは、このサブコマンドは使用せず、代わりに `config-gfarm-master` ないし `config-gfarm-slave` を使って下さい。 `-k`オプションが指定されている場合、 `gfservice`は `gfkey` コマンドを用いて gfmd ホスト上に共有秘密鍵ファイルを作成します。

`config-gfarm-master` ホストID

  このサブコマンドは `config-gfarm` と基本的に同じですが、 gfmd のレプリケーションが自動的に有効になります。

`config-gfarm-slave` ホストID マスターホストID

  サブコマンド `config-gfarm` と基本的に同じですが、 レプリケーション機能が自動的に有効になり、 「マスターホストID」上で動作する gfmd のスレーブ として動作します。 `gfservice` は `gfmdhost` コマンドを 用いてこのスレーブホストをサーバーリストに加えます。 また、マスター gfmd ホスト上の `gfarm2.conf` ファイル を更新して、`metadb_server_list` にこのスレーブホストを 加え、設定ファイルで定義されているすべてのホストに配布します。 変数「gfmdn_PRIVATE_MODE」の値が「true」に セットされている場合は、同様に `gfsd.conf` ファイル を更新し、すべての gfmd ホストと gfsd ホストに配布します。 変数「gfmdn_AUTH_TYPE」の値が「sharedsecret」 の場合、共有秘密鍵ファイルをマスター gfmd ホストからこのスレーブ gfmd ホストへコピーします。

`unconfig-gfarm` ホストID

  サブコマンド `stop-gfsd` を実行して、その後 gfmd や バックエンドデータベースが作成したファイルやディレクトリをすべて削除します。 スレーブ gfmd を廃止する場合は、代わりにサブコマンド `unconfig-gfarm-slave` を使用して下さい。

`unconfig-gfarm-master` ホストID

  サブコマンド `unconfig-gfarm` の別名です。

`unconfig-gfarm-slave` ホストID マスターホストID

  サブコマンド `unonfig-gfarm` と基本的に同じですが、 以下の追加処理を行います。 `gfmdhost` コマンドを用いてサーバーリストから、その スレーブホストを削除します。 また、設定ファイルで定義されているすべてのホストの `gfarm2.conf` を更新し、 `metadb_server_list` に設定されたサーバーリストから、 そのスレーブホストを削除します。 変数「gfmdn_PRIVATE_MODE」の値が「true」に セットされている場合は、同様に `gfsd.conf` ファイル を更新し、すべての gfmd ホストと gfsd ホストに配布します。

## SUB-COMMANDS FOR GFSD

以下に挙げているのは、`gfsd` を操作するサブコマンドです。 コマンド行に与えるホストID は、「gfsdn」 (gfsd1, gfsd2, ...) でなくてはなりません。 それ以外の場合、`gfservice` はエラーを通知してただちに 終了します。

`gfsd-status` ホストID

  gfsd が実行中であれば、終了コード 0 で終了します。 それ以外の場合は、1 で終了します。

`start-gfsd` ホストID

  `gfsd` が実行中でなければ、実行を開始します。

`stop-gfsd` ホストID

  `gfsd` が実行中なら、実行を停止します。

`restart-gfsd` ホストID

  サブコマンド`stop-gfsd` と `start-gfsd` を続けて実行します。

`set-gfsd-conf` ホストID 設定名称 値

  gfmd 用の `set-gfsd-conf` サブコマンドと同じです。

`unset-gfsd-conf` ホストID 設定名称

  gfmd 用の `unset-gfsd-conf` サブコマンドと同じです。

`backup-gfsd-conf` ホストID

  gfmd 用の `backup-gfsd-conf` サブコマンドと同じです。

`backup-usermap` ホストID

  gfmd 用の `backup-usermap` サブコマンドと同じです。

`restore-gfsd-conf` ホストID

  gfmd 用の `restore-gfsd-conf` サブコマンドと同じです。

`restore-usermap` ホストID

  gfmd 用の `restore-usermap` サブコマンドと同じです。

`config-gfsd` ホストID

  リモートホスト上で `config-gfsd` コマンドを実行します。 このとき、設定ファイルで変数 「gfsdn_CONFIG_GFARM_OPTIONS」が宣言されていれば、 その値が `config-gfsd` にオプションとして付与されます。 また、`gfservice` は `gfhost` コマンド を用いて、リモートホストをファイルシステムノードとして登録します。 変数「gfsdn_AUTH_TYPE」の値が「sharedsecret」 の場合、共有秘密鍵ファイルを gfmd1 から gfsd ホストへコピーします。

`unconfig-gfsd` ホストID

  サブコマンド `stop-gfsd` を実行して、その後 gfsd が 作成したファイルやディレクトリをすべて削除します。

## SUB-COMMANDS FOR CLIENT

以下に挙げているのは、クライアントを操作するサブコマンドです。 コマンド行に与えるホストID は、「gfmdn」 (gfmd1, gfmd2, ...)、「gfsdn」(gfsd1, gfsd2, ...)、 「clientn」(client1, client2, ...) のいずれか でなくてはなりません。 それ以外の場合、`gfservice` はエラーを通知してただちに 終了します。

`mount` ホストID ディレクトリ オプション...

  リモートホスト上の「ディレクトリ」に、Gfarm2 ファイルシステムをマウントします。 引数「オプション」は `gfarm2fs` コマンドへの引数とみなされます。

`unmount` ホストID ディレクトリ

  リモートホスト上の「ディレクトリ」にマウントされた Gfarm2 ファイルシステムをアンマウントします。

`umount` ホストID ディレクトリ

  サブコマンド `unmount` の別名です。

`set-gfarm-conf` ホストID 設定名称 値

  リモートホスト上の `gfarm2.conf` ファイルに

      	設定名称 値

  という行を加えます。 既に `gfarm2.conf` に 「設定名称」という行が存在している場合、 `gfservice` はそれを削除してから、新たに行を追加します。

`unset-gfarm-conf` ホストID 設定名称

  リモートホスト上の `gfarm2.conf` ファイルから 「設定名称」行を削除します。 `gfarm2.conf` ファイルに「設定名称」 行がない場合、ファイルは更新されません。

`backup-gfarm-conf` ホストID

  リモートホスト上の `gfarm2.conf` ファイルを、標準出力 へ出力します。

`backup-shared-key` ホストID

  リモートホスト上の共有秘密鍵ファイルを、標準出力へ出力します。

`restore-gfarm-conf` ホストID

  リモートホスト上の `gfarm2.conf` ファイルを復旧します。 `gfservice` は、`gfarm2.conf` の バックアップデータを標準入力から読み込みます。

`restore-shared-key` ホストID

  リモートホスト上の共有秘密鍵ファイルを復旧します。 `gfservice` は、共有秘密鍵のバックアップデータを標準入力 から読み込みます。

`config-client` ホストID

  変数「clientn_AUTH_TYPE」の値が「sharedsecret」 の場合、共有秘密鍵ファイルを gfmd1 からクライアントホストへコピーします。

`unconfig-client` ホストID

  リモートホスト上の `gfarm2.conf` ファイルおよび 共有秘密鍵ファイルを削除します。

`gfcmd` ホストID コマンド名 コマンド引数 ...

  リモートホスト上で Gfarm コマンドを実行します。

`gfcmd-root` ホストID コマンド名 コマンド引数 ...

  リモートホスト上にて、root 権限で Gfarm コマンドを実行します。

`grid-proxy-init` host-id コマンド引数 ...

  リモートホスト上で `grid-proxy-init` コマンドを実行します。

## SUB-COMMANDS FOR MULTIPLE HOSTS

以下に挙げているのは、複数のホストを操作するサブコマンドです。 コマンド行で、ホストID を指定することはできません。

`start-all`

  すべてのバックエンドデータベース、gfmd、gfsd を起動します。

`stop-all`

  すべての gfsd、gfmd、バックエンドデータベースを停止します。

`kill-gfmd-all`

  すべての gfmd を強制停止 (SIGKILL を送付) します。

`restart-all`

  サブコマンド `stop-all` と `start-all` を続けて実行します。

`config-all`

  gfmd1 に対して "`config-gfarm-master`" を実行し、それ以外のすべての gfmd に対して "`config-gfarm-slave`" を実行します。 次にすべての gfsd に対して "`config-gfsd`" を実行します。 最後にすべてのクライアントに対して、"`config-client`" を 実行します。

`unconfig-all`

  すべてのクライアントに対して、"`unconfig-client`" を実行 します。 次にすべての gfsd に対して "`unconfig-gfsd`" を実行します。 最後にすべての gfmd に対して "`unconfig-gfarm`" を 実行します。

## PLUG-IN SYSTEM

`gfservice`はユーザが新しくサブコマンドが追加できるよ うに、プラグインシステムを採用しています。指定されたサブコマンドを `gfservice`が提供していない場合、 `gfservice`コマンドは %%DATADIR%%/gfarm/gfservice 以 下のサブコマンド名のファイルを参照します。

サブコマンドのファイルは Bourneシェルスクリプトで書きます。 サブコマンド "name" のサブコマンドファイル は、`gfservice`から実行される "`subcmd_name`"という名 前のシェル関数、 `gfservice-agent`から実行される "`subcmd_name_agent`" という名前のシェル関数が実装されている必要があります。

サブコマンドがユーザが追加した別のサブコマンドに依存している時のために、 サブコマンド "name" のサブコマンドファイル は、 "`name_depends`" と いう名前のシェル関数で、そのサブコマンドが依存している他のサブコマンド のリストを返す必要があります．サブコマンドのリストはスペースで区切られ たサブコマンドの文字列です．依存している他のサブコマンドがない場合は空文字列を返して 下さい。同様に、サブコマンドファイルは "`name_agent_depends`" という名前のシェル関数で、そのサブコマンドのエージェントが依存している 他のサブコマンドのリストを返す必要があります。