OpenSimサーバ構築記録その4(Gridmode移行編)

ぱすてる

2008年06月21日 16:53


● そのまえに

(http://opensimulator.org/svn/opensim/tags/)

OpenSim 0.5.8-releaseが出たので、緊張しながらアップデートしてみました。
MySQLデータベースとか移行できるかドキドキでしたが、ただコンパイルして、
default.xmlをコピーしただけで動いてしましました。 ヨカッタ。。。


● ポート TCP/8002の開放

Grid modeでは、SLビューワの接続先UserServerのポート番号は、TCP/8002なので、ファイアウォール起動シェル
に追加しました。

(/etc/init.d/myfirewall.sh)

/sbin/iptables -A INPUT -i $WANPORT -p tcp -m state --state NEW -s $TRUSTWAN --dport 9000 -j ACCEPT
/sbin/iptables -A INPUT -i $WANPORT -p udp -s $TRUSTWAN --dport 9000 -j ACCEPT
/sbin/iptables -A INPUT -i $WANPORT -p tcp -m state --state NEW -s $TRUSTWAN --dport 8002 -j ACCEPT


(補足)
myfirewall.sh は、私が組んだ自家製のFW起動用シェルスクリプトです。


● OpenSim.ini の修正

(http://opensimulator.org/wiki/OpenSim_Configuration)

とにかく、英語のサイトと格闘しながら、OpenSim.iniを、Grid mode用に変更しました。
あってるのかなぁ? まあ、とりあえず動いたし。 ^^;

(/usr/local/opensim/0.5.8/bin/OpenSim.ini)

5: gridmode = true
35: ; storage_plugin = "OpenSim.Data.Null.dll"  <--コメントにした
39: ;storage_connection_string="URI=file:OpenSim.db,version=3";  <--コメントにした
43: storage_plugin="OpenSim.Data.MySQL.dll"
44: storage_connection_string="Data Source=localhost;Database=opensim;User ID=root;Password=********;";
64: ;asset_database = "local"  <--コメントにした
65: asset_database = "grid"



● XEngine サポート

(http://opensimulator.org/wiki/XEngine)

OpenSim 0.5.8-releaseから、スクリプトエンジン(XEngine)がサポートされたので、追加してみました。
OpenSim.iniの[Startup]セクションに記述します。

(/usr/local/opensim/0.5.8/bin/OpenSim.ini)

116: ;Experimental remote ScriptServer plugin (does not currently work):
117: ;script_engine = OpenSim.Region.ScriptEngine.RemoteServer.dll  <--コメントにした
118: script_engine = OpenSim.Region.ScriptEngine.XEngine.dll  <--追加した


(補足)
知ったように書いてますが、何がどう良くなったのか、ぜんぜん調べてません。。。><


● サーバ起動の順番

Grid modeでは、次の順番で起動します。
正常に起動すると、コマンド入力待ち状態になり、コンソールをつかんでしまいますので注意です。

1.OpenSim.Grid.UserServer.exe
2.OpenSim.Grid.GridServer.exe
3.OpenSim.Grid.AssetServer.exe
4.OpenSim.Grid.InventoryServer.exe
5.OpenSim.exe


● 1.UserServerの起動

コンソールから、monoコマンドでUserServerを起動します。
途中の質問はとりあえず全てデフォルトですが、「Connection String for Databas」
には、MySQLへの接続コマンドを打ってみました。
ここを省略すると、./Regions/default.xmlを見に行きます。
どっちの方法がいいんだろう?

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.UserServer.exe

USER SERVER: Default Startup Message [Welcome to OGS]:
USER SERVER: Default Grid Server URI [http://127.0.0.1:8001/]:
USER SERVER: Key to send to grid server [null]:
USER SERVER: Key to expect from grid server [null]:
USER SERVER: Default Inventory Server URI [http://127.0.0.1:8004/]:
USER SERVER: DLL for database provider [OpenSim.Data.MySQL.dll]:

USER SERVER: Connection String for Database []:  <-- 省略しない
Data Source=localhost;Database=opensim;User ID=root;Password=********;

USER SERVER: Http Listener port [8002]:
USER SERVER: Use SSL? true/false [False]:
USER SERVER: Known good region X [1000]:
USER SERVER: Known good region Y [1000]:

20:40:12 - [REGION]: Establishing data connection
20:40:12 - [USERSTORAGE]: Attempting to load OpenSim.Data.MySQL.dll
20:40:12 - [USERSTORAGE]: Found 7 interfaces.
20:40:12 - Using obsoletely mysql_connection.ini, try using user_source connect string instead
20:40:12 - [MYSQL]: Connection established
20:40:12 - MIGRATION: Match: 001
20:40:12 - Resource 'UserStore' was not found
20:40:12 - [USERSTORAGE]: Added IUserData Interface
20:40:12 - [LIBRARY INVENTORY]: Loading library inventory
20:40:12 - [LIBRARY INVENTORY]: Loading libraries control file ./inventory/Libraries.xml
20:40:13 - [REGION]: Starting HTTP process
20:40:13 - [HTTPD]: Starting up HTTP Server
20:40:13 - [HTTPD]: Spawned main thread OK
20:40:13 - [SERVER]: Userserver 0.5 - Startup complete
Enter help for a list of commands

User# :  <-- コマンド入力待ちになったら(たぶん)OK.



● UserServerの初起動により、以下のファイルが作成されます。

./bin/UserServer_Config.xml
./bin/OpenSim.Grid.UserServer.log


● 起動途中の質問項目は、UserServer_Config.xmlファイルに記録されてました。

(/usr/local/opensim/0.5.8/bin/UserServer_Config.xml)

<Config default_startup_message="Welcome to OGS" default_grid_server="http://127.0.0.1:8001/"
grid_send_key="null" grid_recv_key="null" default_inventory_server="http://127.0.0.1:8004/"
database_provider="OpenSim.Data.MySQL.dll"
database_connect="Data Source=localhost;Database=opensim;User ID=root;Password=********;"
http_port="8002" http_ssl="False" default_X="1000" default_Y="1000" />



● 2.GridServerの起動

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.GridServer.exe

GRID SERVER: OGS Grid Owner [OGS development team]:
GRID SERVER: Default Asset Server URI [http://127.0.0.1:8003/]:
GRID SERVER: Key to send to asset server [null]:
GRID SERVER: Key to expect from asset server [null]:
GRID SERVER: Default User Server URI [http://127.0.0.1:8002/]:
GRID SERVER: Key to send to user server [null]:
GRID SERVER: Key to expect from user server [null]:
GRID SERVER: Key to send to a simulator [null]:
GRID SERVER: Key to expect from a simulator [null]:
GRID SERVER: DLL for database provider [OpenSim.Data.MySQL.dll]:

GRID SERVER: Database connect string []:  <-- 省略しない
Data Source=localhost;Database=opensim;User ID=root;Password=********;

GRID SERVER: Http Listener port [8001]:



● GridServerの初起動により、以下のファイルが作成されます。

./bin/OpenSim.Grid.GridServer.log
./bin/GridServer_Config.xml


● 3.AssetServerの起動

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.AssetServer.exe

ASSET SERVER: Default Startup Message [Welcome to OGS]:
ASSET SERVER: DLL for database provider [OpenSim.Data.MySQL.dll]:

ASSET SERVER: Database connection string []:  <-- 省略しない
Data Source=localhost;Database=opensim;User ID=root;Password=********;

ASSET SERVER: Http Listener port [8003]:


● AssetServerの初起動により、以下のファイルが作成されます。

./bin/AssetServer_Config.xml
./bin/OpenSim.Grid.AssetServer.log


● 4.InventoryServerの起動

なぜか、データベースのデフォルトが「SQLite」になってます。
よくわからないのですが、やっぱり、「MySQL」を指定した方がいいのかな?

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.InventoryServer.exe

INVENTORY: Default Startup Message [Welcome to OGS]:
INVENTORY: Default User Server URI [http://127.0.0.1:8002]:
INVENTORY: Key to send to user server [null]:
INVENTORY: Key to expect from user server [null]:

INVENTORY: DLL for database provider [OpenSim.Data.SQLite.dll]:
OpenSim.Data.MySQL.dll

INVENTORY: Database Connect String []:
Data Source=localhost;Database=opensim;User ID=root;Password=********;

INVENTORY: Http Listener port [8004]:



● InventoryServerの初起動により、以下のファイルが作成されます。

./bin/InventoryServer_Config.xml
./bin/OpenSim.Grid.InventoryServer.log


● 5.OpenSimの起動

これは、いつものとおり。

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.exe

23:20:01 - =========================================================
23:20:01 - ============== STARTING OPENSIM =========================
23:20:01 - =========================================================
23:20:01 - [OPENSIM MAIN]: Running in grid mode



● ログファイルを監視しましょう~

Linux(Unix)には、テキストファイルの末尾を表示するtailコマンドがありますが
「-f」オプションをつけると、ファイルの末尾に追加されるテキストデータを
リアルタイムに表示してくれるので、ログファイルの監視にとっても便利です。

OpenSim.Grid.UserServer.log
OpenSim.Grid.GridServer.log
OpenSim.Grid.AssetServer.log
OpenSim.Grid.InventoryServer.log
OpenSim.log

これら5つのログファイルを、まとめて監視してしまいます。
OpenSim.exe起動時や、ビューワログイン時に、UGAIサーバと連携する様子がコンソールに
出力されるので、参考になります。

root@sv:/usr/local/opensim/0.5.8/bin# tail -f *.log


● ビューワのポート変更を忘れずに

Grid mode は、TCP/8002、でしたね。

SecondLife.exe -set SystemLanguage ja -multiple -loginuri http://サーバ名:8002/


● つぎは

前回のMySQL移行に比べたら、今回はずいぶん簡単でした。(もちろんドキュメントはちゃんと読みましたけど)
つぎは、やっぱり、複数のSIMやRegion作りと接続ですね~。
VMWareの仮想ネットワークも準備できたし、いろいろ実験できそうです。
でも、夏に向けて熱暴走とか心配、それになんかエコによくない趣味だなぁ。。。。



【資料4.1】
OpenSim.iniファイル V0.5.7 -> V0.5.8差分

XEngine 定義が追加

447 [XEngine]
448: ; How many threads to keep alive even if nothing is happening
449: MinThreads = 2
450: ; How many threads to start at maximum load
451: MaxThreads = 100
452: ; Time a thread must be idle (in seconds) before it dies
453: IdleTimeout = 60
454: ; Thread priority ("Lowest", "BelowNormal", "Normal", "AboveNormal", "Highest")
455: Priority = "BelowNormal"
456: ; Maximum number of events to queue for a script (excluding timers)
457: MaxScriptEventQueue = 300
458: ; Stack size per thread created
459: ThreadStackSize = 262144
460: ; Rate to poll for asynchronous command replies (ms)
461: AsyncLLCommandLoopms = 50
462: ; Save the source of all compiled scripts
463: WriteScriptSourceToDebugFile = false
464: ; Default language for scripts
465: DefaultCompileLanguage = lsl
466: ; List of allowed languages (lsl,vb,js,cs)
467: AllowedCompilers = lsl
468: ; Compile debug info (line numbers) into the script assemblies
469: CompileWithDebugInformation = true
470: ; Allow the use of os* functions (some are dangerous)
471: AllowOSFunctions = false
472: ; Interval (s) between background save of script states
473: SaveInterval = 120
474: ; Interval (s) between maintenance runs (0 = disable)
475: MaintenanceInterval = 10
476: ; Time a script can spend in an event handler before it is interrupted
477: EventLimit = 30
478: ; If a script overruns it's event limit, kill the script?
479: KillTimedOutScripts = false
480: ; Allow OS console command functionality (VERY DANGEROUS!!)
481: AllowosConsoleCommand = false



【資料4.2】

Grid modeに移行したことで、データベース内のテープルが、15個になりました。



・テーブル名:land


・テーブル名:landaccesslist


・テーブル名:migrations


・テーブル名:primitems


・テーブル名:prims


・テーブル名:primshapes


・テーブル名:regions


・テーブル名:terrain

OpenSim