ROBUST/ja

コンセプト
ROBUST は、入出力コネクタからなるシステムと、ハイパーグリッドや OpenSimulator 向けに作られたサービスの橋渡しをします. OGS1 はモジュラアーキテクチャに置き換えられます. コアモジュールやサードパーティー提供のモジュールを使って、簡単に拡張することができます.

ROBUST は融通の利くサーバ・シェルで、地域が既に使っているモジュールと同じモジュールをロードすることもできます. このため、既存のコードはほぼ 100% そのまま使用でき、柔軟性に富んでいます.

ROBUST サーバは、設定ファイルに従って "in" コネクタをロードします. これらのコネクタは、必要となる処理・ストレージがあるモジュールや、"out" コネクタをロードします. このような仕組みで、各 ROBUST サーバはグリッドサービスを個別に、もしくはまとめて動作させたり、グリッドサービスのプロキシとして動作したりすることができるようになっています.

設定
サーバは起動時に設定ファイルを読み込みます. 設定ファイルの名前は、デフォルトでアセンブリの名前に .ini を付け足したものとなっています. ROBUST サーバのデフォルトの名前は Robust.exe なので、設定ファイルのデフォルトの名前は Robust.ini となります. OpenSimulator 一式の中に、Robust.ini.example が入っています. ROBUST の全てのサービスが稼働するポートは、次の通り、デフォルトで 8003 となっています.

; * Startup セクションには、このサーバインスタンスで起動する ; * 全てのコネクタがリストアップされています. ; * 1 つだけ指定しても、サーバ・スイートに含まれるもの全部を ; * 指定しても構いません. ; * 複数のコネクタはカンマで区切って指定します. ; * ; * これらは IN コネクタとしてサーバで使用されます. ; * IN コネクタはこの設定ファイルを読み込み、必要なサービスや ; * データベースのコネクタをロードします. ; * [Startup] ServiceConnectors = "OpenSim.Server.Handlers.dll:AssetServiceConnector,OpenSim.Server.Handlers.dll:InventoryServiceInConnector" ; * 全てのサービスで共通の設定です. ; * サーバインスタンス全体のネットワーク設定です. ; * [Network] port = 8003 ; * 例えば、以下の設定で、従来のアセットサーバと全く同じになります. ; * (上で指定された) IN コネクタで読み込まれ、OUT コネクタ (ローカル ; * データベースモジュール) をロードします. OUT コネクタは順番に、 ; * アセットローダーとデータベース接続情報を読み込みます. ; * [AssetService] LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService" DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll" AssetLoaderArgs = "assets/AssetSets.xml" StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=grid;User ID=grid;Password=grid;" ; * この設定で、インベントリサーバのモジュールをロードします. ; * これは、従来のインベントリサーバと同じように動作します. ; * [InventoryService] LocalServiceModule = "OpenSim.Services.InventoryService.dll:InventoryService" UserServerURI = "http://127.0.0.1:8002" SessionAuthentication = "false" StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=grid;User ID=grid;Password=grid;"

コマンドライン引数

 * -inifile
 * .ini ファイルの場所を指定します. デフォルトの場所からは読み込まず、この場所から読み込みます.


 * -console
 * コンソールの種類を指定します. basic, local, rest の中から選択します.


 * -logfile
 * サーバがログを書き込むログファイルの場所を指定します.


 * -prompt
 * サーバのプロンプト文字列を指定したものに変更します.

[Startup] セクション

 * ServiceConnectors
 * カンマ区切りの IN コネクタのリストです. それぞれの要素の書式は :<クラス名> となります. 適用できるクラスが dll に 1 つしかない場合、クラス名は省略できます.


 * Prompt
 * サーバのプロンプト文字列を指定したものに変更します.


 * Console
 * コンソールの種類を指定します. basic, local, rest の中から選択します.


 * Logfile
 * サーバがログを書き込むログファイルの場所を指定します.

[Network] セクション

 * Port
 * リッスンするネットワークポートを設定します. 全てのサービスがこのポートで動作します.

コネクタの設定
これらの設定はコネクタモジュールにあり、ROBUST サーバ全体の設定として存在するものではありません. 指定可能なオプションの完全な解説は、コネクタの説明書にあります. このマニュアルではサンプルの設定ファイルにある項目だけをリストアップしています.

[AssetService] セクション

 * LocalServiceModule [コネクタの設定項目]
 * このコネクタにサービスを提供するモジュールを指定


 * DefaultAssetLoader [サービスの設定項目]
 * デフォルトのアセット一式をロードするアセット・ローダーがある DLL


 * AssetLoaderArgs [サービスの設定項目]
 * アセットのロード元パス (ファイルシステム・アセット・ローダー向け)


 * StorageProvider [サービスの設定項目]
 * データベース・プロバイダがある DLL


 * ConnectionString [サービスの設定項目]
 * データベース・プロバイダに渡す接続文字列

[InventoryService] セクション

 * LocalServiceModule [コネクタの設定項目]
 * このコネクタにサービスを提供するモジュールを指定


 * UserServerURI [コネクタの設定項目]
 * 接続先ユーザ・サーバの URI


 * SessionAuthentication [サービスの設定項目]
 * インベントリ・セションを検証する（デフォルトは false です！)


 * StorageProvider [サービスの設定項目]
 * データベース・プロバイダがある DLL


 * ConnectionString [サービスの設定項目]
 * データベース・プロバイダに渡す接続文字列

他のコネクタを使用する際、新しいセクションを追加する必要があることもあります.

UGAIM から UGRM への移行例
'''このセクションは OpenSimulator 0.6.6 から OpenSimulator 0.6.7 へ移行する場合のものです. ''' このバージョンでは、ROBUST サーバの名前は OpenSim.Server.exe となっています.

UGAIM から UGRM への移行:

私の初期設定:

ハイパーグリッド完全対応で、インターネットからアクセスできる、グリッドモードのシステムです. MySQL を使っていて、2 つのサーバに分割しています.

UGAIM と MySQL 5.0 は 32 ビットの CentOS 5.3 Xen VM と 64 ビットの CentOS 5.3 に分かれています.

各地域は、32 ビットの Windows XP SP3 Home にある、各地域専用の OpenSim.exe インスタンスで動いています.

OSWI も Windows で動いています.

地域をシャットダウンします. UGAIM を停止します.

それから、次の箇所でインベントリ・サーバのポートを 8004 から 8003 に変えます.

OpenSim.ini:          "inventory_server_url"          - 地域全体とUGRM サーバ

GridCommon.ini:       "InventoryServerURI"            - 地域全体とUGRM サーバ

UserServer_Config.xml: "default_inventory_server"     - UGRM サーバ

MySQL データベースでは、"users" テーブルで、全てのユーザの userInventoryURI フィールドを修正する必要があります.

OSWI 設定ファイルで、"$userInventoryURI" を修正します.

AssetServer_Config.xml と InventoryServer_Config.xml は UGRM サーバから削除しても大丈夫です.

UGRM サーバで、OpneSim.Server.ini ファイルをコピーして OpenSim.Server.ini にして編集し、[AssetService] セクションと [InventoryService] セクションの "ConnectionString" を適切な値に変更します.

UGRM を起動します. 地域を起動します.

Semi-unrelated Note: Melanie_t によると、他の 3 つのサーバを再起動しなくても、UGRM サーバは別個に起動することができるようです. しかし、ユーザ・サーバを再起動すると、その後にメッセージング・サーバのコンソールで "register" コマンドを発行しなければなりません.

UGRM から URM への移行例
'''このセクションは OpenSimulator 0.6.6 から OpenSimulator 0.6.8 へ移行する場合のものです. ''' このバージョンでは、ROBUST サーバの名前は OpenSim.Server.exe となっています.

UGRM から URM への移行:

これは上の「UGAIM から UGRM への移行」例の続きです. そのうち、2 つの例をマージするかもしれません.

地域をシャットダウンします. UGRM を停止します.

'''以下のファイルは決して書き換えないでください. リポジトリから取り出してきたそのままの状態で使う必要があります. ''' config-include/Grid.ini config-include/GridHypergrid.ini config-include/Standalone.ini config-include/StandalioneHypergrid.ini

'''さらに、config-include/*Common.ini.example に新しく追加された設定項目を、config-include/*Common.ini に追加してください. '''

それから、次の箇所でインベントリ・サーバのポートを 8001 から 8003 に変えます.

UserServer_Config.xml:     "default_grid_server"     - URM サーバ

MessagingServer_Config.xml: "default_grid_server"    - URM サーバ

URM サーバで、OpenSim.Server.ini.example をコピーして OpenSim.Server.ini にします. これを修正して、以前の設定を反映させます. それから、[GridService] セクションの "ConnectionString" の項目を適切な値に変更してください.

GridServer_Config.xml は URM サーバから削除しても大丈夫です.

URM を起動します. 地域を起動します.

URM から ROBUST への移行例
'''このセクションは OpenSimulator の最新の Git Master の版 (2010 年 3 月 2 日にコミットした a9580eb) へ移行する場合のものです. '''

presence-refactor ブランチの時点から、デフォルトの設定は 1 個のサーバが全てのリソース系サービスを動かし、そのサーバに SIM がいくつあっても構わないものとなっています.

地域をシャットダウンします. URM を停止します.

'''以下のファイルは決して書き換えないでください. リポジトリから取り出してきたそのままの状態で使う必要があります. ''' config-include/Grid.ini config-include/GridHypergrid.ini config-include/Standalone.ini config-include/StandalioneHypergrid.ini

'''さらに、config-include/GridCommon.ini.example に新しく追加された設定項目を、config-include/GridCommon.ini に追加してください. '''

ROBUST サーバで、Robust.ini.example をコピーして Robust.ini にします. これを修正して、以前の設定を反映させます. 特に、"ConnectionString" の項目は適切な値に変更してください. 新しい設定項目が [GridService] セクションにもあります. グリッドのデフォルト／代替リージョンを設定できるようになっています.

グリッドをハイパーグリッドに対応させたい場合は -- ユーザの出入りを可能にするには -- Robust.ini.example ではなく、Robust.ini.HG.example を設定のベースとして利用します. コピーして Robust.ini にして、編集します.

*_Config.xml 系ファイルは全て廃止されましたので、削除しても大丈夫です.

サービスを起動します: $ [mono] Robust.exe

デフォルトの設定では 2 個のプロセスを起動します. 片方はポート 8002 をリッスンし、もう片方は 8003 をリッスンします. インターネットに公開する必要のあるサービスはポート 8002 に、公開する必要のないサービスは全てポート 8003 に割り当てられています. グリッドのセキュリティを確保するために、ポート 8003 はファイアウォールの内側に置くとよいでしょう. '''自分が何をやっているかわからない間は、ポート番号はインストールパッケージを展開したときの状態から変更しないようにしましょう. 変更する必要がある箇所は、常にホスト名だけを変更するようにしましょう. '''

ヒント
スタンドアロンで MySQL を使っている場合、OpenSimulator をアップデートした後の最初の起動で、次のようなエラーが表示されるかもしれません.

18:27:39 - [SERVICE BASE]: Failed to load plugin OpenSim.Data.IFriendsData from OpenSim.Data.MySQL.dll with args URI=file:friends.db,version=3, FriendsSystem.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: Keyword not supported. Parameter name: uri

...

18:27:39 - Error loading plugin from OpenSim.Services.FriendsService.dll, exception System.Exception: Could not find a storage interface IFriendsData in the given StorageProvider OpenSim.Data.MySQL.dll

これは、config-include/Standalone.ini に新しく追加された StorageProvider という項目が SQLite 専用の設定であるために発生している現象です. コメントアウトすると、以前のように動作するようになるはずです.

サービスの説明

 * GatekeeperService
 * Hypergrid v1.5 に対応
 * 外部ユーザの受け入れを制御するためのサービス
 * UserAgentService
 * Hypergrid v1.5 に対応
 * 外に出るローカルユーザを制御するためのサービス
 * HGInventoryService
 * Hypergrid v1.5 に対応
 * 任意
 * UserAgentService に付随するサービス
 * ホーム・インベントリに「特別な」方法でアクセスさせます.
 * ルートフォルダはグリッド外部に送信しません.
 * 削除操作は受け付けません.
 * AvatarService
 * 旧 Avatar Appearance

ROBUST シェルにサービスを移動する
'''このセクションには上級者向けの内容が含まれています. 普段は気にしないで結構です. '''

大きなグリッドを作成したら、1 つのサーバに全てのサービスを置くのではなく、複数のサーバにサービスを分けて、それらを ROBUST シェルで起動したくなるかもしれません. 例えば、ファイアウォールの外側に配置された他のサービスからログイン・サービスを引き離して専用のマシンに、グリッド・サービスを専用のマシンに、アセット・サービスを専用のマシンに移したい、などです. ROBUST ではどんなサービスでも、どんなサービスの組み合わせでも、簡単に ROBUST シェルにまとめることができます. このようにします.

InventoryService = "OpenSim.Services.InventoryService.dll:InventoryService" ログイン・サービスをインベントリ・サービスから分離したい場合は、[LocalService] にある、対応する 'InventoryService' の値を変更します. InventoryService = "OpenSim.Services.Connectors.dll:InventoryServicesConnector" そして、ログインサーバの設定ファイルの [InventoryService] セクションを、デフォルトのを消して、次のようにします. [InventoryService] InventoryServerURI = "http://myinventoryserver.com:myport" $ Robust.exe -inifile=OpenSim.MyServer.ini -logfile=/some/path/to/some/file
 * Robust.ini.example をサーバを稼働させたい各マシンにコピーします.
 * 各ファイルを編集します. [Startup] セクションにあるサーバ・コネクタに注目しましょう. 当該サーバで稼働させたいものをピックアップします.
 * それぞれの設定セクションでは、補助の関係にあるサービス・コネクタに注目しましょう. たぶん、適宜変更することになると思います. 例えば、ログイン・サービスは、ログインする際、ユーザのインベントリを取得するために、インベントリ・サービスにアクセスする必要があります. デフォルトの設定では、[LoginService] セクションに以下の変数で依存関係が定義されています.
 * 設定ファイルを保存して、いつものようにサーバを起動します.
 * 次のようにして起動することもできます.
 * 稼働させたい ROBUST サーバを全て起動します.
 * 配下の SIM の GridCommon.ini を修正して、正しい URL にします.
 * SIM を起動します.