Open Source Platform
for interconnected virtual worlds

Configuring servers to Grid mode

From RexWiki

Contents

Foreword

reX Grid mode consists OpenSim grid components and rex server components.

The openSim components are

  • OpenSim.Grid.UserServer.exe
  • OpenSim.Grid.GridServer.exe
  • OpenSim.Grid.AssetServer.exe
  • OpenSim.Grid.InventoryServer.exe
  • OpenSim.exe

The reX server components are

  • AvatarStorage.exe
  • Authentication.exe

reX server components are used for running authentication in reX authentication mode. In reX authentication mode avatar data is stored to avatar storage server. reX server components are ran in the same manner as in standalone mode so setting up them are mostly not discussed in this section, except when creating new users and when configuring acceptable authentication server addresses to User server.


Running order

Start the servers in the following order:
1. Authentication.exe
2. Avatarstorage.exe
3. OpenSim.Grid.UserServer.exe
4. OpenSim.Grid.GridServer.exe
5. OpenSim.Grid.AssetServer.exe
6. OpenSim.Grid.InventoryServer.exe
7. OpenSim.exe

For later use it is convenient to make .bat file running all opensim exes (replace server_running_dir with your running directory):

cd "server_running_dir"
sleep 3
start OpenSim.Grid.UserServer.exe
sleep 3
start OpenSim.Grid.GridServer.exe
sleep 3
start OpenSim.Grid.AssetServer.exe
sleep 3
start OpenSim.Grid.InventoryServer.exe
sleep 3
start OpenSim.exe

You can also add the AvatarStorage.exe and Authentication.exe to the beginning of the bat file.


Running for the first time

When you run the opensim components for the first time, there are some questions represented at the console window. In most cases default values are ok. When database options are asked you should be alert since all db configurations do not work.

Options chosen at startup are stored to configuration files for each server. Config files for each server are as follows:

  • OpenSim.Grid.UserServer.exe: UserServer_Config.xml
  • OpenSim.Grid.GridServer.exe: GridServer_Config.xml
  • OpenSim.Grid.AssetServer.exe: AssetServer_Config.xml
  • OpenSim.Grid.InventoryServer.exe: InventoryServer_Config.xml
  • OpenSim.exe: OpenSim.ini

You can see sample options in section 6. Sample initialization files.

There's also few files for database connections:

  • mssql_connection.ini
  • mysql_connection.ini

When you are using MS Sql database you only need to create/configure mssql_connection.ini

After those files there's still two more files you need to be avare about:

  • Default.xml (region description file in "regions" folder)
  • TrustStore.xml

Default.xml describes sims default region, its master user etc..
TrustStore.xml describes untrusted authentication addresses.


MS server connection file

You should create file named: mssql_connection.ini to your server directory with following contents:

[mssqlconnection]
data_source = <machinename or hostname>\SQLEXPRESS
initial_catalog = Database
persist_security_info = True
user_id = sa
password = password

If database server is on the same machine, data source can be set like this .\SQLEXPRESS
For password, remember the password you gave earlier in SQL Server Express install.
Note: using SQL Express Management Studio, create a database called Database (or whatever database name you set in the above file), else the Opensim servers may crash when starting!

UserServer

As said defaults should be otherwise fine, but if you want to use ms database you should enter the dll name "OpenSim.Framework.Data.MSSQL.dll"
and for rex mode and authentication mode enter both: true

As a default user server adds address: 127.0.0.1:10001 to truststore. (10001 is default authentication port)

The output should look like this:

-----------------------------------------------------------------------------------------
Launching UserServer...
Creating new local console
Logs will be saved to current directory in .\opengrid-userserver-console.log
[CONFIG] [03-13 04:48:36] Calling Configuration Load Function...
[03-13 04:48:36] USER SERVER: Default Startup Message [Welcome to OGS]:
[03-13 04:48:43] USER SERVER: Default Grid Server URI [http://127.0.0.1:8001/]:
http://192.168.0.100:8001/
[03-13 04:48:46] USER SERVER: Key to send to grid server [null]:
[03-13 04:48:47] USER SERVER: Key to expect from grid server [null]:
[03-13 04:48:48] USER SERVER: Default Inventory Server URI [http://127.0.0.1:8004/]:
http://192.168.0.100:8004/
[03-13 04:48:51] USER SERVER: DLL for database provider [OpenSim.Framework.Data.MySQL.dll]:
OpenSim.Framework.Data.MSSQL.dll
[03-13 04:51:26] USER SERVER: Http Listener port [8002]:
[03-13 04:51:29] USER SERVER: Use SSL? true/false [False]:
[03-13 04:51:32] USER SERVER: Known good region X [1000]:
[03-13 04:51:33] USER SERVER: Known good region Y [1000]:
[03-13 04:51:34] USER SERVER: Run in realXtend mode? true/false [false]:
true
[03-13 04:51:48] USER SERVER: Run in realXtend authentication mode? true/false [false]:
true
[REGION] [03-13 04:51:54] Establishing data connection
[USERSTORAGE] [03-13 04:51:54] Attempting to load OpenSim.Framework.Data.MSSQL.dll
[USERSTORAGE] [03-13 04:51:54] Found 6 interfaces.
[USERSTORAGE] [03-13 04:51:54] Added IUserData Interface
[LIBRARYINVENTORY] [03-13 04:51:54] Loading library inventory
[LIBRARYINVENTORY] [03-13 04:51:54] Loading libraries control file .\inventory\Libraries.xml
[REGION] [03-13 04:51:54] Starting HTTP process
[SERVER] [03-13 04:51:54] Userserver staring with rex authentication
[HTTPD] [03-13 04:51:54] Starting up HTTP Server
[SERVER] [03-13 04:51:54] Userserver 0.4 - Startup complete
[03-13 04:51:54] Enter help for a list of commands
[HTTPD] [03-13 04:51:54] Spawned main thread OK
[03-13 04:51:54] OpenUser# :
------------------------------------------------------------------------------------------

After setup you can further edit acceptable authentication addresses by running "authentication" command from command line. You should add your external IP address & port (192.168.0.100:10001 in this example)

GridServer

Grid server startup with right inputs:

-----------------------------------------------------------------------------------------
Starting...
Creating new local console
Logs will be saved to current directory in .\opengrid-gridserver-console.log
[CONFIG] [03-13 04:55:05] Calling Configuration Load Function...
[03-13 04:55:05] GRID SERVER: OGS Grid Owner [OGS development team]:
[03-13 04:55:08] GRID SERVER: Default Asset Server URI [http://127.0.0.1:8003/]:
http://192.168.0.100:8003/
[03-13 04:55:10] GRID SERVER: Key to send to asset server [null]:
[03-13 04:55:11] GRID SERVER: Key to expect from asset server [null]:
[03-13 04:55:11] GRID SERVER: Default User Server URI [http://127.0.0.1:8002/]:
http://192.168.0.100:8002/
[03-13 04:55:13] GRID SERVER: Key to send to user server [null]:
[03-13 04:55:19] GRID SERVER: Key to expect from user server [null]:
[03-13 04:55:20] GRID SERVER: Key to send to a simulator [null]:
[03-13 04:55:22] GRID SERVER: Key to expect from a simulator [null]:
[03-13 04:55:24] GRID SERVER: DLL for database provider [OpenSim.Framework.Data.MySQL.dll]:
OpenSim.Framework.Data.MSSQL.dll
[03-13 04:55:41] GRID SERVER: Http Listener port [8001]:
[GRID] [03-13 04:55:44] Connecting to Storage Server
[DATA] [03-13 04:55:44] Attempting to load OpenSim.Framework.Data.MSSQL.dll
[DATA] [03-13 04:55:44] Found 6 interfaces.
[DATA] [03-13 04:55:44] Added IGridData Interface
[DATA] [03-13 04:55:44] Added ILogData Interface
[GRID] [03-13 04:55:44] Starting HTTP process
[HTTPD] [03-13 04:55:44] Starting up HTTP Server
[HTTPD] [03-13 04:55:44] Spawned main thread OK
[GRID] [03-13 04:55:44] Starting sim status checker
[03-13 04:55:44] Enter help for a list of commands
[03-13 04:55:44] OpenGrid# :
-----------------------------------------------------------------------------------------

AssetServer

Running Asset server startup with right inputs (removed some input to keep readable):

-----------------------------------------------------------------------------------------
Starting...
Creating new local console
Logs will be saved to current directory in .\opengrid-AssetServer-console.log
[CONFIG] [03-13 04:57:38] Calling Configuration Load Function...
[03-13 04:57:38] ASSET SERVER: Default Startup Message [Welcome to OGS]:
[03-13 04:57:41] ASSET SERVER: DLL for database provider [OpenSim.Framework.Data.MySQL.dll]:
OpenSim.Framework.Data.MSSQL.dll
[03-13 04:58:08] ASSET SERVER: Http Listener port [8003]:
[ASSET] [03-13 04:58:09] Setting up asset DB
[ASSET SERVER] [03-13 04:58:09] LoadDatabasePlugin: Attempting to load OpenSim.Framework.Data.MSSQL.dll
[ASSET SERVER] [03-13 04:58:09] Added MSSQL Asset storage engine 1.0.0.0
[ASSET] [03-13 04:58:09] Loading default asset set..
[ASSETS] [03-13 04:58:09] Loading asset set .\assets\OpenSimAssetSet/OpenSimAssetSet.xml
[ASSETS] [03-13 04:58:09] Loading asset set .\assets\AnimationsAssetSet/AnimationsAssetSet.xml
.
.
.
resAssetSet\femalebottom.jp2]
[ASSETS] [03-13 04:58:10] Loading: [Female Face Texture][.\assets\TexturesAssetSet\femaleface.jp2]
[ASSETS] [03-13 04:58:10] Loading: [Moon][.\assets\TexturesAssetSet\moon.jp2]
[ASSETS] [03-13 04:58:10] Loading: [Cloud][.\assets\TexturesAssetSet\cloud.jp2]
[ASSET] [03-13 04:58:10] Starting HTTP process
[REST] [03-13 04:58:10] In Get Request
[HTTPD] [03-13 04:58:10] Starting up HTTP Server
[03-13 04:58:10] Enter help for a list of commands
[03-13 04:58:10] OpenAsset# :
[HTTPD] [03-13 04:58:10] Spawned main thread OK
-----------------------------------------------------------------------------------------

InventoryServer

Running Inventory server startup with right inputs:

-----------------------------------------------------------------------------------------
Creating new local console
Logs will be saved to current directory in opengrid-inventory-console.log
[03-13 05:01:12] Initialising inventory manager...
[CONFIG] [03-13 05:01:12] Calling Configuration Load Function...
[03-13 05:01:12] INVENTORY: Default Startup Message [Welcome to OGS]:
[03-13 05:01:14] INVENTORY: Default User Server URI [http://127.0.0.1:8002]:http://192.168.0.100:8002
[03-13 05:01:17] INVENTORY: Key to send to user server [null]:
[03-13 05:01:18] INVENTORY: Key to expect from user server [null]:
[03-13 05:01:19] INVENTORY: DLL for database provider [OpenSim.Framework.Data.SQLite.dll]:
OpenSim.Framework.Data.MSSQL.dll
[03-13 05:01:39] INVENTORY: Http Listener port [8004]:
[AGENTINVENTORY] [03-13 05:01:42] Inventorystorage: Attempting to load OpenSim.Framework.Data.MSSQL.dll
[AGENTINVENTORY] [03-13 05:01:42] Added IInventoryData Interface
[INVENTORY] [03-13 05:01:42] Starting HTTP server ...
[HTTPD] [03-13 05:01:42] Starting up HTTP Server
[INVENTORY] [03-13 05:01:42] Started HTTP server
[03-13 05:01:42] Enter help for a list of commands
[03-13 05:01:42] INVENTORY# :
[HTTPD] [03-13 05:01:42] Spawned main thread OK
-----------------------------------------------------------------------------------------


OpenSim

For running the OpenSim.exe in grid mode copy the presented OpenSim.ini file presented in "Sample initialization files" (At the moment this is how I got it working with OpenSim.DataStore.MSSQL.dll) to server folder as "OpenSim.ini"

Then just run it..

If everything went ok, end of the output should look like this:

-----------------------------------------------------------------------------------------
<type 'str'>
<_MainThread(MainThread, started)>
Python:Samples init
Python: Welcome tutorial init
[CHAT] [03-13 05:28:42] No IRC config information, skipping IRC bridge configuration
[PRIMINVENTORY] [03-13 05:28:42] Starting scripts in scene
[UDPSERVER] [03-13 05:28:42] Opening UDP socket on 0.0.0.0 9000.
[UDPSERVER] [03-13 05:28:42] UDP socket bound, getting ready to listen
[UDPSERVER] [03-13 05:28:42] Listening on port 9000
[Python: Started script threadSTARTUP] [03-13 05:28:42] No startup command script specified. Moving on...
[STARTUP] [03-13 05:28:42] Startup complete, serving 1 region(s)
[03-13 05:28:42] Region# :
[ASSETCACHE] [03-13 05:28:45] Adding temporary texture [571cf554-95e6-497b-ac11-436eb6e665f2]: Added to cache.
[DATASTORE] [03-13 05:28:45] Storing terrain revision r1205422125
-----------------------------------------------------------------------------------------


Connecting with client

When running in rex authentication mode users are created at authentication server.
When creating user you should give it the right grid url. Using the example IP address, it would be "http://192.168.0.100:8002”.
8002 was the default port given to grid earlier.
Creating user should look something like this:

-----------------------------------------------------------------------------------
MSSQLHANDLER - User saved to database = c830df56-fcf0-4311-8c57-3a532fc70d42
Authentication# :
create user
New user global UID = ea0926a3d38f4c168740bfba379e48fd
First name:
ff
Last name:
ff
Account:
ff.ff
Real name:
ff
Password
**
Avatar storage url (default: http://192.168.0.100:10000/avatar/ea0926a3d38f4c168740bfba379e48fd)
Just input the first par before /avatar/UID::
Grid url (default http://192.168.0.100:9000):
http://192.168.0.100:8002
Start Region X + (default 1000):
Start Region Y + (default 1000):
MSSQLHANDLER - User saved to database = ea0926a3-d38f-4c16-8740-bfba379e48fd
Authentication# :
-----------------------------------------------------------------------------------

(Note: you should also create region master user to authentication server, but it's not necessary for getting the grid running)
When connecting with client you should then enter your account to account field with the authentication address with following format: ff.ff@192.168.0.100:10001 and your password: **
And thats it, you should be able to connect to grid. (Now, that wasnt too complicated or was it? :) )


Sample initialization files

Sample initalization files, used to successfully run reX Grid mode in Vista:
OpenSim.ini Note section [StandAlone] options dont have any meaning in Grid mode (also connection string appearantly does not have effect when mssql_connection.ini is in use)

[Startup]
gridmode = True
physics = basicphysics
verbose = True
physical_prim = True
child_get_tasks = False
serverside_object_permissions = False
storage_plugin = OpenSim.DataStore.MSSQL.dll
storage_connection_string = "SERVER=192.168.0.100; DATABASE=rex_db; UID=sa; PASSWORD=password;"
startup_console_commands_file =
shutdown_console_commands_file =
script_engine = OpenSim.Region.ScriptEngine.DotNetEngine.dll
asset_database = sqlite
worldlibraryfolder = True
replace_assets = True
rex_mode = True
rex_authentication = True
rex_python = True
3d_collision_models = True
[StandAlone]
accounts_authenticate = False
welcome_message = Welcome to OpenSim
userDatabase_plugin = OpenSim.Framework.Data.MSSQL.dll
asset_plugin = OpenSim.Framework.Data.MSSQL.dll
inventory_plugin = OpenSim.Framework.Data.MSSQL.dll
dump_assets_to_file = False
[Network]
default_location_x = 1000
default_location_y = 1000
http_listener_port = 9000
remoting_listener_port = 8895
grid_server_url = http://192.168.0.100:8001
grid_send_key = null
grid_recv_key = null
user_server_url = http://192.168.0.100:8002
user_send_key = null
user_recv_key = null
asset_server_url = http://192.168.0.100:8003
inventory_server_url = http://192.168.0.100:8004
[RemoteAdmin]
enabled = False

UserServer_Config.xml

<Root>
<Config default_startup_message="Welcome to OGS" default_grid_server="http://192.168.0.100:8001/" grid_send_key="null" grid_recv_key="null" default_inventory_server="http://192.168.0.100:8004/"
database_provider="OpenSim.Framework.Data.MSSQL.dll" http_port="8002" http_ssl="False" default_X="1000" default_Y="1000" rex_mode="true" rex_authentication="true" />
</Root>

GridServer_Config.xml

<Root>
<Config grid_owner="OGS development team" default_asset_server="http://192.168.0.100:8003/" asset_send_key="null" asset_recv_key="null" default_user_server="http://192.168.0.100:8002/"
user_send_key="null" user_recv_key="null" sim_send_key="null" sim_recv_key="null" database_provider="OpenSim.Framework.Data.MSSQL.dll" http_port="8001" allow_forceful_banlines="TRUE" />
</Root>

AssetServer_Config.xml

<Root>
<Config default_startup_message="Welcome to OGS" database_provider="OpenSim.Framework.Data.MSSQL.dll" http_port="8003" />
</Root>

InventoryServer_Config.xml

<Root>
<Config default_startup_message="Welcome to OGS" default_user_server="http://192.168.0.100:8002" user_send_key="null" user_recv_key="null" database_provider="OpenSim.Framework.Data.MSSQL.dll"
http_port="8004" />
</Root>

mssql_connection.ini

[mssqlconnection]
data_source = .\SQLEXPRESS
initial_catalog = Database
persist_security_info = True
user_id = sa
password = password
mysql_connection.ini
[mysqlconnection]
hostname = localhost
database = rex_db
username = root
password = root
pooling = false
port = 3306

Default.xml (located at regions folder)

<Root>
<Config sim_UUID="c638a36b-602d-40ec-9a3d-fbeef05c0470" sim_name="OpenSim Test" sim_location_x="1000" sim_location_y="1000" internal_ip_address="0.0.0.0" internal_ip_port="9000"
external_host_name="192.168.0.100" master_avatar_uuid="00000000-0000-0000-0000-000000000000" estate_covanant_uuid="00000000-0000-0000-0000-000000000000" master_avatar_first="Test"
master_avatar_last="User" master_avatar_pass="test" master_avatar_authentication_address="192.168.0.100:10001" />
</Root>

TrustStore.xml

<TrustStore>
  <Public>True</Public>
</TrustStore>


Troubleshooting

  • Client crashes Try deleting all data from regions table and also recreating users.
  • Requested Method [login_to_simulator] not found If clients are getting this error, then this is because your clients are attempting to connect to the wrong port. One common way this comes about is from attempting to convert from a standalone grid to actual grid mode. If everything works fine in stand-alone mode and you get this error in grid mode, then it's possible you need to edit your accounts database. In which case, the gridURL column under the users table is likely set to http://your-ip-or-hostname:9000 or http://your-ip-or-hostname:8001 when infact it should be set to http://your-ip-or-hostname:8002 This is likely going to be rectified with the advent of modrex, as the gridURL column is unique to the rex branch of OpenSim and is not present in the trunk.