## Name

gfservice — リモートホストから Gfarm のサーバーを制御する。

## Synopsis

`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 は、「gfmd`n`」 (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 コマンドを実行します。 このとき、設定ファイルで変数 「gfmd`n`_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` にこのスレーブホストを 加え、設定ファイルで定義されているすべてのホストに配布します。 変数「gfmd`n`_PRIVATE_MODE」の値が「true」に セットされている場合は、同様に `gfsd.conf` ファイル を更新し、すべての gfmd ホストと gfsd ホストに配布します。 変数「gfmd`n`_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` に設定されたサーバーリストから、 そのスレーブホストを削除します。 変数「gfmd`n`_PRIVATE_MODE」の値が「true」に セットされている場合は、同様に `gfsd.conf` ファイル を更新し、すべての gfmd ホストと gfsd ホストに配布します。

## SUB-COMMANDS FOR GFSD

以下に挙げているのは、gfsd を操作するサブコマンドです。 コマンド行に与えるホストID は、「gfsd`n`」 (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 コマンドを実行します。 このとき、設定ファイルで変数 「gfsd`n`_CONFIG_GFARM_OPTIONS」が宣言されていれば、 その値が config-gfsd にオプションとして付与されます。 また、gfservice は gfhost コマンド を用いて、リモートホストをファイルシステムノードとして登録します。 変数「gfsd`n`_AUTH_TYPE」の値が「sharedsecret」 の場合、共有秘密鍵ファイルを gfmd1 から gfsd ホストへコピーします。

unconfig-gfsd `ホストID`

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

## SUB-COMMANDS FOR CLIENT

以下に挙げているのは、クライアントを操作するサブコマンドです。 コマンド行に与えるホストID は、「gfmd`n`」 (gfmd1, gfmd2, ...)、「gfsd`n`」(gfsd1, gfsd2, ...)、 「client`n`」(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`

  変数「client`n`_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`" という名前のシェル関数で、そのサブコマンドのエージェントが依存している 他のサブコマンドのリストを返す必要があります。