Introduction – Opensim 0.911 Separate Robust
Opensim 0.911 Separate Robust is a guide to separating the Robust services into multiple instances. Previously some of this information was on the Opensimulator Wiki. However, that now shows 0.92 information. Some of the services do not separate well (in my experience). This article follows on from Setup Ubuntu 20.04 for Opensimulator. This guide uses Ubuntu, however, most of the areas are very similar on both macOS and Windows.
**NOTE** This article works with Opensim 0.911. It will not work with 0.92 Trunk development code**
The guide demonstrates setting up both the Robust and Simulator instances on one server. Usually, especially on larger or busier grids, they will be on separate servers.
Folder Structure -opensim with multiple robust services on Ubuntu
On a single server running both Robust and a single Simulator is it possible to run both from the same Mysql Database and folder. This guides does not do use that method, so the differences are clear. Additionally, if only one simulator is in use, running in standalone mode is probably preferable.
The folder structure and naming is a personal preference. It is important to choose a sensible and consistent naming. There are many ways to do this, but this one is clear the purpose of the guide.
- Create a top-level folder called Opensimulator
- Create two, second-level folders (one for Robust and one for Simulators)
- Inside the Simulators folder, create folders for as many simulators as you intend to run. Eg. Simulator1, Simulator2 etc.
Below the terminal commands, the guide uses. These will work equally well on macOS or Windows Powershell. Using a GUI is equally as suitable.
mkdir Robust mkdir Simulators cd Simulators mkdir Simulator1
Download And Extract Opensimulator – Opensim 0.911 Separate Robust
Opensimulator can be downloaded here. Typically the latest stable release is the best choice. Linux users will likely want the “.tar.gz” version while Windows users will choose “.zip”.
Once downloaded:
- place one copy into the Robust folder.
- Then place another copy into each of the simulator folders you made.
- After copying the compressed files into their respective folders extract the files then delete the original compressed file.
Windows users will need to extract the compressed folder using Windows Explorer or expand-archive (in Powershell). Linux and macOS users can follow the terminal instructions.
The code below downloads the latest testing version of opensim so copy-pasting the line will always work. This version is only available as a .zip file. Unzip is not installed by default in Ubuntu, but can be installed from the package manager. #Lines are comments and not commands to execute.
#Navigate to the Opensimulator folder #Download the file wget http://opensimulator.org/dist/OpenSim-LastAutoBuild.zip #Copy the files to their folders. cp OpenSim-LastAutoBuild.zip Robust/ cp OpenSim-LastAutoBuild.zip Robust/ #remove the original file rm OpenSim-LastAutoBuild.zip #If you don't have "unzip" installed install it with (Debian based distros only) sudo apt-get install unzip #Uzip the files and removes the compressed version. cd Robust unzip OpenSim-LastAutoBuild.zip rm OpenSim-LastAutoBuild.zip cd ../Simulators/Simulator1 unzip OpenSim-LastAutoBuild.zip rm OpenSim-LastAutoBuild.zip #The next line is an example using "tar" instead of "unzip". Replace unzip lines with tar when unpacking ".tar.gz". tar -xvf filename
opensim with multiple robust services – configuration files
Here the Opensim with multiple Robust services on Ubuntu guide moves into setting up opensimulator configuration files. Everything from this point until the very end creating startup scripts is entirely cross-platform. These files are the same on Linux, Windows and macOS.
Robust – Hypergrid configuration with groups
- Navigate to the Robust folder, then into the subfolder called “bin”
- Copy the file called “Robust.HG.ini.example” to a new file called “Robust.HG.ini”.
Later this file will be discarded, but, in the meantime, the “.ini” extension will make the file display in a much more readable way using most text editors.
#Navigate to the Robust Folder cp Robust.HG.ini.example Robust.HG.ini
Create a few empty files ready to copy-paste contents into. This can be done with any text editor. Most file manager applications will also have a “create a new text file” feature. These file names are not important in their own right, but if you use alternate names, they must match the command used to launch the Robust instances later.
- Robust.HG.Asset.ini
- Robust.HG.GridUser.ini
- Robust.HG.Inventory.ini
- Robust.HG.Main.ini
- Robust.HG.Map.ini
#Using a Linux terminal, navigate to the Robust Folder nano Robust.HG.Asset.ini # Press Ctrl+O ENTER # Press Ctrl+X # Repeat the process for each file name above.
About FSAssets – opensim with multiple robust services on Ubuntu
FSAssettes are covered in detail on the Opensimulator wiki here. For larger databases, this is the suggested method. Nowhere in the documentation does it suggest this will deliver lower performance on smaller databases. This example uses FSAssets
Disclaimer -opensim with multiple robust services on Ubuntu
The following examples are probably not perfect, they work well but could have unnecessary duplicated configuration lines. These are based on personal experience.
The original “Robust.HG.ini” file contains all the comments. Most comments are stripped out to reduce the length of the document.
Database names, passwords and URL’s – opensim with multiple robust services on Ubuntu
Database names and passwords match the ones used in the Setup Ubuntu 20.04 for Opensimulator. They should be changed to the names of the Robust MySql database with the respective password. URL’s / IP addresses should be changed to match the details of the server. Also, note the name changes to the PID file name and log file name.
Robust.HG.Asset.ini
[Const] ; The URL of the Robust server BaseURL = "http://**Add the IP address or URL for your server here**" ; The public port of the Robust server PublicPort = "8002" ; The private port of the Robust server PrivatePort = "8003" [Startup] ; Place to create a PID file ; If no path if specified then a PID file is not created. PIDFile = "/tmp/RobustAsset.pid" ; Set path to directory for modular ini files... ; The Robust.exe process must have R/W access to the location ConfigDirectory = "robust-include" ; Console commands can be saved to a file, so the command history persists after a restart. (default is true) ConsoleHistoryFileEnabled = true ; The history file can be just a filename (relative to OpenSim's bin/ directory ; or it can be a full path to somewhere else. (default is OpenSimConsoleHistory.txt in bin/) ConsoleHistoryFile = "RobustAssetConsoleHistory.txt" ; How many lines of command history should we keep? (default is 100) ConsoleHistoryFileLines = 500 [ServiceList] AssetServiceConnector = "8004/OpenSim.Server.Handlers.dll:AssetServiceConnector" [Network] port = 8004 AllowllHTTPRequestIn = false [DatabaseService] StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=Robust;User ID=OpenSimAdmin;Password=password;Old Guids=true;" [AssetService] ;; Choose an asset service (Only one option should be enabled) ;LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService" LocalServiceModule = "OpenSim.Services.FSAssetService.dll:FSAssetConnector" ;; FSAsset Directories. Base directory, where final asset files are stored and Spool directory for temp files ;; These directories must be on the same physical filesystem BaseDirectory = "./fsassets/data" SpoolDirectory = "./fsassets/tmp" ;; Original service can be checked if FSAssets can not find an asset FallbackService = "OpenSim.Services.AssetService.dll:AssetService"; ;; The following are common to both the default asset service and FSAsset service ;; Common asset service options DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll" AssetLoaderArgs = "./assets/AssetSets.xml" AllowRemoteDelete = true AllowRemoteDeleteAllTypes = false [LoginService] SRV_AssetServerURI = "${Const|BaseURL}:8004"
Robust.HG.GridUser.ini
[Const] ; The URL of the Robust server BaseURL = "http://**Add the IP address or URL for your server here**" ; The public port of the Robust server PublicPort = "8002" ; The private port of the Robust server PrivatePort = "8003" [Startup] ; Place to create a PID file ; If no path if specified then a PID file is not created. PIDFile = "/tmp/RobustGridUser.pid" ConfigDirectory = "robust-include" ; Console commands can be saved to a file, so the command history persists after a restart. (default is true) ConsoleHistoryFileEnabled = true ; The history file can be just a filename (relative to OpenSim's bin/ directory ; or it can be a full path to somewhere else. (default is OpenSimConsoleHistory.txt in bin/) ConsoleHistoryFile = "RobustGridUserConsoleHistory.txt" ; How many lines of command history should we keep? (default is 100) ConsoleHistoryFileLines = 100 [ServiceList] GridUserServiceConnector = "8005/OpenSim.Server.Handlers.dll:GridUserServiceConnector" [Network] port = 8005 AllowllHTTPRequestIn = false [DatabaseService] StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=Robust;User ID=OpenSimAdmin;Password=password;Old Guids=true;" [GridUserService] ; for the server connector LocalServiceModule = "OpenSim.Services.UserAccountService.dll:GridUserService"
Robust.HG.Inventory.ini
[Const] ; The URL of the Robust server BaseURL = "**Add the IP address or URL for your server here**" ; The public port of the Robust server PublicPort = "8002" ; The private port of the Robust server PrivatePort = "8003" [Startup] ; Place to create a PID file ; If no path if specified then a PID file is not created. PIDFile = "/tmp/RobustInventory.pid" ConfigDirectory = "robust-include" ; Console commands can be saved to a file, so the command history persists after a restart. (default is true) ConsoleHistoryFileEnabled = true ; The history file can be just a filename (relative to OpenSim's bin/ directory ; or it can be a full path to somewhere else. (default is OpenSimConsoleHistory.txt in bin/) ConsoleHistoryFile = "RobustInventoryConsoleHistory.txt" ; How many lines of command history should we keep? (default is 100) ConsoleHistoryFileLines = 100 [ServiceList] InventoryInConnector = "8006/OpenSim.Server.Handlers.dll:XInventoryInConnector" [Network] port = 8006 AllowllHTTPRequestIn = false [DatabaseService] StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=Robust;User ID=OpenSimAdmin;Password=password;Old Guids=true;" [InventoryService] LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService" AllowDelete = true [LoginService] InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService" SRV_InventoryServerURI = "${Const|BaseURL}:8006"
Robust.HG.Map.ini
[Const] ; The URL of the Robust server BaseURL = "http://**Add the IP address or URL for your server here**" ; The public port of the Robust server PublicPort = "8002" ; The private port of the Robust server PrivatePort = "8003" [Startup] ; Place to create a PID file ; If no path if specified then a PID file is not created. PIDFile = "/tmp/RobustMap.exe.pid" ConfigDirectory = "robust-include" ; Console commands can be saved to a file, so the command history persists after a restart. (default is true) ConsoleHistoryFileEnabled = true ; The history file can be just a filename (relative to OpenSim's bin/ directory ; or it can be a full path to somewhere else. (default is OpenSimConsoleHistory.txt in bin/) ConsoleHistoryFile = "RobustMapConsoleHistory.txt" ; How many lines of command history should we keep? (default is 100) ConsoleHistoryFileLines = 100 [ServiceList] MapAddServiceConnector = "8007/OpenSim.Server.Handlers.dll:MapAddServiceConnector" MapGetServiceConnector = "8007/OpenSim.Server.Handlers.dll:MapGetServiceConnector" [Network] port = 8007 AllowllHTTPRequestIn = false [LoginService] MapTileURL = "${Const|BaseURL}:8007/"; [DatabaseService] StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=Robust;User ID=OpenSimAdmin;Password=password;Old Guids=true;" [MapImageService] LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService"
Robust.HG.Main.ini
Pay Special Attention to the following sections when compared to the original “Robust.HG.ini” file.
GridService
Pay attention to the region names inside the “GridService” section. The comments have been removed, please refer to the original “.ini” file.
GridInfoService
There are lots of areas which will be personal to your grid to set here. Please compare the versions carefully.
LoginService
Look at the port numbers which have changed here, and compare them to the port numbers in the previous files. These will also be reflected in the settings in the Simulator settings.
ServiceList
Pay attention to the commented lines which begin with three colons (“;;;”). These are the lines now being handled by the separate files. Their corresponding items can be found un-commented with adjusted port numbers in those.
Startup
There is a strong possibility that “RegistryLocation” and “ConfigDirectory” will require alteration. Refer to the original “.ini” file.
[Const] ; The URL of the Robust server BaseURL = "http://**Add the IP address or URL for your server here**" ; The public port of the Robust server PublicPort = "8002" ; The private port of the Robust server PrivatePort = "8003" [Startup] ; Place to create a PID file ; If no path if specified then a PID file is not created. PIDFile = "/tmp/RobustMain.pid" ;RegistryLocation = "../addins-registry" ;ConfigDirectory = "../addins-config" ConfigDirectory = "robust-include" ; Console commands can be saved to a file, so the command history persists after a restart. (default is true) ConsoleHistoryFileEnabled = true ; The history file can be just a filename (relative to OpenSim's bin/ directory ; or it can be a full path to somewhere else. (default is OpenSimConsoleHistory.txt in bin/) ConsoleHistoryFile = "RobustMainConsoleHistory.txt" ; How many lines of command history should we keep? (default is 100) ConsoleHistoryFileLines = 2000 [ServiceList] ;;;AssetServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AssetServiceConnector" ;;;InventoryInConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:XInventoryInConnector" ;;Uncomment if you have set up Freeswitch (see [FreeswitchService] below) ;VoiceConnector = "8004/OpenSim.Server.Handlers.dll:FreeswitchServerConnector" GridServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:GridServiceConnector" GridInfoServerInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:GridInfoServerInConnector" AuthenticationServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector" OpenIdServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:OpenIdServerConnector" AvatarServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AvatarServiceConnector" LLLoginServiceInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector" PresenceServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:PresenceServiceConnector" UserAccountServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:UserAccountServiceConnector" ;;;GridUserServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:GridUserServiceConnector" AgentPreferencesServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:AgentPreferencesServiceConnector" FriendsServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:FriendsServiceConnector" ;;;MapAddServiceConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:MapAddServiceConnector" ;;;MapGetServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:MapGetServiceConnector" ;; Uncomment this if you want offline IM to work OfflineIMServiceConnector = "${Const|PrivatePort}/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector" ;; Uncomment this if you want Groups V2 to work GroupsServiceConnector = "${Const|PrivatePort}/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector" ;; Uncomment to provide bakes caching BakedTextureService = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:XBakesConnector" ;; Uncomment for UserProfiles see [UserProfilesService] to configure... UserProfilesServiceConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserProfilesConnector" ;; Uncomment if you want to have centralized estate data EstateDataService = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:EstateDataRobustConnector" MuteListConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:MuteListServiceConnector" ;; Additions for Hypergrid GatekeeperServiceInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:GatekeeperServiceInConnector" UserAgentServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:UserAgentServerConnector" HeloServiceInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:HeloServiceInConnector" HGFriendsServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:HGFriendsServerConnector" InstantMessageServerConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:InstantMessageServerConnector" HGInventoryServiceConnector = "HGInventoryService@${Const|PublicPort}/OpenSim.Server.Handlers.dll:XInventoryInConnector" HGAssetServiceConnector = "HGAssetService@${Const|PublicPort}/OpenSim.Server.Handlers.dll:AssetServiceConnector" ;; Uncomment this if you want Groups V2, HG to work HGGroupsServiceConnector = "${Const|PublicPort}/OpenSim.Addons.Groups.dll:HGGroupsServiceRobustConnector" [Network] port = ${Const|PrivatePort} AllowllHTTPRequestIn = false [Hypergrid] HomeURI = "${Const|BaseURL}:${Const|PublicPort}" GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}" [AccessControl] [DatabaseService] StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=Robust;User ID=OpenSimAdmin;Password=password;Old Guids=true;" [DatabaseService] StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=Robust;User ID=OpenSimAdmin;Password=password;Old Guids=true;" [AssetService] ;LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService" LocalServiceModule = "OpenSim.Services.FSAssetService.dll:FSAssetConnector" ;; FSAsset Directories. Base directory, where final asset files are stored and Spool directory for temp files ;; These directories must be on the same physical filesystem BaseDirectory = "./fsassets/data" SpoolDirectory = "./fsassets/tmp" ;; Original service can be checked if FSAssets can not find an asset FallbackService = "OpenSim.Services.AssetService.dll:AssetService"; DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll" AssetLoaderArgs = "./assets/AssetSets.xml" AllowRemoteDelete = true AllowRemoteDeleteAllTypes = false [InventoryService] LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService" AllowDelete = true [GridService] LocalServiceModule = "OpenSim.Services.GridService.dll:GridService" AssetService = "OpenSim.Services.AssetService.dll:AssetService" ; Region_Welcome_Area = "DefaultRegion, FallbackRegion" Region_Welcome_Area= "DefaultRegion, DefaultHGRegion, Persistent" ; (replace spaces with underscore) ;; Allow Hyperlinks to be created at the console HypergridLinker = true ;; Allow supporting viewers to export content ;; Set to false to prevent export ExportSupported = true ;; If you have this set under [Hypergrid], no need to set it here, leave it commented ; GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}" [FreeswitchService] LocalServiceModule = "OpenSim.Services.FreeswitchService.dll:FreeswitchService" [AuthenticationService] LocalServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" [OpenIdService] ; for the server connector AuthenticationServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" UserAccountServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService" [UserAccountService] ; for the server connector LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService" ; These are for creating new accounts by the service AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" GridService = "OpenSim.Services.GridService.dll:GridService" InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService" AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService" GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService" CreateDefaultAvatarEntries = true [GridUserService] ; for the server connector LocalServiceModule = "OpenSim.Services.UserAccountService.dll:GridUserService" [AgentPreferencesService] ; for the server connector LocalServiceModule = "OpenSim.Services.UserAccountService.dll:AgentPreferencesService" [PresenceService] ; for the server connector LocalServiceModule = "OpenSim.Services.PresenceService.dll:PresenceService" [AvatarService] ; for the server connector LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService" [FriendsService] ; for the server connector LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService" [EstateService] LocalServiceModule = "OpenSim.Services.EstateService.dll:EstateDataService" [LibraryService] LibraryName = "OpenSim Library" DefaultLibrary = "./inventory/Libraries.xml" [LoginService] ; for the server connector LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService" ; for the service UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService" AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService" AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService" PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" GridService = "OpenSim.Services.GridService.dll:GridService" SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector" LibraryService = "OpenSim.Services.InventoryService.dll:LibraryService" FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService" ;; for hypergrid UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService" ; This inventory service will be used to initialize the user's inventory HGInventoryServicePlugin = "[email protected]:HGSuitcaseInventoryService" WelcomeMessage = "Welcome Avatar!" AllowRemoteSetLoginLevel = "false" ; For V2 map ;;;;;MapTileURL = "${Const|BaseURL}:${Const|PublicPort}/"; MapTileURL = "${Const|BaseURL}:8007/"; ; Url to search service SearchURL = "${Const|BaseURL}:${Const|PublicPort}/"; ; For V3 destination guide DestinationGuide = "http://www.hyperica.com/destination-guide" SRV_HomeURI = "${Const|BaseURL}:${Const|PublicPort}" SRV_InventoryServerURI = "${Const|BaseURL}:8006" SRV_AssetServerURI = "${Const|BaseURL}:8004" SRV_ProfileServerURI = "${Const|BaseURL}:${Const|PublicPort}" SRV_FriendsServerURI = "${Const|BaseURL}:${Const|PublicPort}" SRV_IMServerURI = "${Const|BaseURL}:${Const|PublicPort}" SRV_GroupsServerURI = "${Const|BaseURL}:${Const|PublicPort}" DSTZone = "America/Los_Angeles;Pacific Standard Time" [MapImageService] LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService" [GridInfoService] ; login uri: for grid this is the login server URI login = ${Const|BaseURL}:${Const|PublicPort}/ ; long grid name: the long name of your grid gridname = "grid name" ; short grid name: the short name of your grid gridnick = "grid nick name" ; HG address of the gatekeeper, if you have one ; this is the entry point for all the regions of the world gatekeeper = ${Const|BaseURL}:${Const|PublicPort}/ ; HG user domain, if you have one ; this is the entry point for all user-related HG services uas = ${Const|BaseURL}:${Const|PublicPort}/ [GatekeeperService] LocalServiceModule = "OpenSim.Services.HypergridService.dll:GatekeeperService" ;; for the service UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService" PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService" GridService = "OpenSim.Services.GridService.dll:GridService" AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector" SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector" AllowTeleportsToAnyRegion = true [UserAgentService] LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService" ;; for the service GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService" GridService = "OpenSim.Services.GridService.dll:GridService" GatekeeperService = "OpenSim.Services.HypergridService.dll:GatekeeperService" PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService" UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" [HGInventoryService] ; For the InventoryServiceInConnector LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGSuitcaseInventoryService" UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService" AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService" AuthType = None [HGAssetService] ;; Use the second option if you have FSAsset service enabled ;LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGAssetService" LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGFSAssetService" UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService" AuthType = None [HGFriendsService] LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGFriendsService" UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService" FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService" UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" GridService = "OpenSim.Services.GridService.dll:GridService" PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" [HGInstantMessageService] LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGInstantMessageService" GridService = "OpenSim.Services.GridService.dll:GridService" PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService" ; This should always be true in the Robust config InGatekeeper = True [Messaging] ; OfflineIM OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" [Groups] ;; for the HG Groups service OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" [UserProfilesService] LocalServiceModule = "OpenSim.Services.UserProfilesService.dll:UserProfilesService" Enabled = true UserAccountService = OpenSim.Services.UserAccountService.dll:UserAccountService AuthenticationServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" [BakedTextureService] LocalServiceModule = "OpenSim.Server.Handlers.dll:XBakes" ;; This directory must be writable by the user ROBUST runs as. It will be created automatically. BaseDirectory = "./bakes" [MuteListService] LocalServiceModule = "OpenSim.Services.MuteListService.dll:MuteListService"
Simulators
OpenSim.ini
OpenSim.ini contains nothing specific to running with multiple instances of Robust. The information included is provided for completeness only using settings I have found to work well. For further explanation, please refer to the original OpenSim.ini file comments and the OpenSim Wiki.
These settings match the Robust configuration above, using hypergrid and groups. If multiple simulators are being used, changing the PID file name here makes sense.
[Const] BaseURL = "http://**Add your server IP address or URL here**" PublicPort = "8002" PrivatePort = "8003" [Startup] ConsoleHistoryFileEnabled = true ConsoleHistoryFile = "OpenSimConsoleHistory.txt" ConsoleHistoryFileLines = 500 save_crashes = true crash_dir = "crashes" PIDFile = "/tmp/SimulatorName.pid" MaxPrimUndos = 20 NonPhysicalPrimMin = 0.001 NonPhysicalPrimMax = 1024 PhysicalPrimMin = 0.01 PhysicalPrimMax = 64 AllowScriptCrossing = true CombineContiguousRegions = false physical_prim = true meshing = Meshmerizer physics = BulletSim DefaultScriptEngine = "XEngine" [AccessControl] [Terrain] SendTerrainUpdatesByViewDistance = true [Map] GenerateMaptiles = true MapImageModule = "MapImageModule" MaptileRefresh = 604800 TextureOnMapTile = true DrawPrimOnMapTile = true TexturePrims = true TexturePrimSize = 48 RenderMeshes = true; [Permissions] allow_grid_gods = true region_owner_is_god = false region_manager_is_god = false [Estates] [SMTP] ;details are set in this section, but nothing suitible for public display. [Network] http_listener_port = 9080 shard = "OpenSim" [XMLRPC] [ClientStack.LindenUDP] [ClientStack.LindenCaps] Cap_GetTexture = "localhost" Cap_GetMesh = "localhost" Cap_AvatarPickerSearch = "localhost" Cap_GetDisplayNames = "localhost" [SimulatorFeatures] [Chat] [EntityTransfer] [Messaging] OfflineMessageModule = "Offline Message Module V2" OfflineMessageURL = ${Const|BaseURL}:${Const|PrivatePort} StorageProvider = OpenSim.Data.MySQL.dll [BulletSim] AvatarToAvatarCollisionsByDefault = true UseSeparatePhysicsThread = true TerrainImplementation = 0 [ODEPhysicsSettings] mesh_sculpted_prim = true use_NINJA_physics_joints = true [RemoteAdmin] [Wind] enabled = true wind_update_rate = 150 wind_plugin = ConfigurableWind avg_strength = 20.0 avg_direction = 1.0 var_strength = 5.0 var_direction = 30.0 rate_change = 1.0 [LightShare] enable_windlight = true [Materials] enable_materials = true MaxMaterialsPerTransaction = 100 [Economy] SellEnabled = true PriceUpload = 0 PriceGroupCreate = 0 [YEngine] Enabled = true ScriptStackSize = 256 ScriptHeapSize = 256 MinTimerInterval = 0.01 ScriptBasePath="ScriptEngines" [XEngine] Enabled = true MinThreads = 2 MaxThreads = 100 IdleTimeout = 300 Priority = "BelowNormal" MaxScriptEventQueue = 100 ThreadStackSize = 262144 MinTimerInterval = 0.01 DefaultCompileLanguage = "lsl" AllowedCompilers = "lsl" EventLimit = 300 ScriptDelayFactor = 1.0 ScriptDistanceLimitFactor = 1.0 NotecardLineReadCharsMax = 1000 SensorMaxRange = 250 SensorMaxResults = 200 DisableUndergroundMovement = false [OSSL] Include-osslEnable = "config-include/osslEnable.ini" [Groups] Enabled = true LevelGroupCreate = 0 Module = "Groups Module V2" StorageProvider = OpenSim.Data.MySQL.dll ServicesConnectorModule = "Groups HG Service Connector" LocalService = remote GroupsServerURI = "${Const|BaseURL}:${Const|PrivatePort}" MessagingEnabled = true MessagingModule = "Groups Messaging Module V2" NoticesEnabled = true MessageOnlineUsersOnly = true [InterestManagement] [MediaOnAPrim] Enabled = true; [NPC] Enabled = true [Terrain] InitialTerrain = "pinhead-island" [UserProfiles] ProfileServiceURL = "${Const|BaseURL}:${Const|PublicPort}" [XBakes] URL = "${Const|BaseURL}:${Const|PrivatePort}" [AutoBackupModule] AutoBackupModuleEnabled = true AutoBackup = true AutoBackupInterval = 6840 AutoBackupBusyCheck = false AutoBackupThreshold = 1 AutoBackupSkipAssets = false AutoBackupKeepFilesForDays = 28 AutoBackupNaming = Time AutoBackupDir = "/home/***userfolder**/OarFiles [Architecture] Include-Architecture = "config-include/GridHypergrid.ini"
GridCommon.ini
- Navigate to the Simulator1 folder,
- Then into the subfolder called “bin”
- Then into another subfolder called “config-include”
There are multiple changes in this file which relate to the port changes we made in the Robust Files. All comments have been removed from the original GridCommon.ini file. In their place, the default settings from this file have been left commented out alongside the settings to make the simulator work with the split services robust configuration.
[DatabaseService] StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=SimulatorInstance1;User ID=OpenSimAdmin;Password=password;Old Guids=true;" [Hypergrid] HomeURI = "${Const|BaseURL}:${Const|PublicPort}" GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}" [Modules] AssetCaching = "FlotsamAssetCache" Include-FlotsamCache = "config-include/FlotsamCache.ini" [AssetService] DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll" AssetLoaderArgs = "assets/AssetSets.xml" AssetServerURI = "${Const|BaseURL}:8004" ;AssetServerURI = "${Const|BaseURL}:${Const|PrivatePort}" [InventoryService] InventoryServerURI = "${Const|BaseURL}:8006" ;InventoryServerURI = "${Const|BaseURL}:${Const|PrivatePort}" [GridInfo] GridInfoURI = "${Const|BaseURL}:${Const|PublicPort}" [GridService] GridServerURI = "${Const|BaseURL}:${Const|PrivatePort}" AllowHypergridMapSearch = true Gatekeeper="${Const|BaseURL}:${Const|PublicPort}" [EstateDataStore] LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataRemoteConnector" [EstateService] EstateServerURI = "${Const|BaseURL}:${Const|PrivatePort}" ;EstateServerURI = "${Const|BaseURL}:8008" [Messaging] Gatekeeper = "${Const|BaseURL}:${Const|PublicPort}" [AvatarService] AvatarServerURI = "${Const|BaseURL}:${Const|PrivatePort}" ;AvatarServerURI = "${Const|BaseURL}:8008" [AgentPreferencesService] AgentPreferencesServerURI = "${Const|BaseURL}:${Const|PrivatePort}" ;AgentPreferencesServerURI = "${Const|BaseURL}:8008" [PresenceService] PresenceServerURI = "${Const|BaseURL}:${Const|PrivatePort}" ;PresenceServerURI = "${Const|BaseURL}:8008" [UserAccountService] UserAccountServerURI = "${Const|BaseURL}:${Const|PrivatePort}" ;UserAccountServerURI = "${Const|BaseURL}:8008" [GridUserService] GridUserServerURI = "${Const|BaseURL}:8005" ;GridUserServerURI = "${Const|BaseURL}:${Const|PrivatePort}" [AuthenticationService] AuthenticationServerURI = "${Const|BaseURL}:${Const|PrivatePort}" ;AuthenticationServerURI = "${Const|BaseURL}:8008" [FriendsService] FriendsServerURI = "${Const|BaseURL}:${Const|PrivatePort}" ;FriendsServerURI = "${Const|BaseURL}:8008" [HGInventoryAccessModule] HomeURI = "${Const|BaseURL}:${Const|PublicPort}" Gatekeeper = "${Const|BaseURL}:${Const|PublicPort}" OutboundPermission = True RestrictInventoryAccessAbroad = True [HGAssetService] HomeURI = "${Const|BaseURL}:${Const|PublicPort}" [HGFriendsModule] LevelHGFriends = 0; [UserAgentService] UserAgentServerURI = "${Const|BaseURL}:${Const|PublicPort}" [MapImageService] ;MapImageServerURI = "${Const|BaseURL}:${Const|PrivatePort}" MapImageServerURI = "${Const|BaseURL}:8007" [AuthorizationService]
Create Shell Scripts to start Robust And The Simulators – Opensim 0.911 Separate Robust
Navigate to the main Opensimulator folder (the one above Robust and Simulators). Then create the following shell scripts using the information provided below. Alternatively, Windows and macOS users will need to make minor alterations to these. Windows users will also need to use “.bat” files instead of “.sh”. Desktop users need to change “mono –server” to “mono –desktop”.
All of these files are the same other than the last line. The simulator points to “OpenSim.exe” and each Robust file points to a different “.ini” file.
StartSimulator1.sh
#!/bin/sh ulimit -s 1048576 # next option may improve SGen gc (for opensim only) you may also need to incre$ #export MONO_GC_PARAMS="minor=split,promotion-age=14" ulimit -s 1048576 cd Simulators/Simulator1/bin export TERM=xterm mono --server OpenSim.exe
StartRobustAsset.sh
#!/bin/sh ulimit -s 1048576 # next option may improve SGen gc (for opensim only) you may also need to incre$ #export MONO_GC_PARAMS="minor=split,promotion-age=14" ulimit -s 1048576 cd Simulators/Simulator1/bin export TERM=xterm mono --server Robust.exe -inifile=Robust.HG.Asset.ini
StartRobustGridUser.sh
#!/bin/sh ulimit -s 1048576 # next option may improve SGen gc (for opensim only) you may also need to incre$ #export MONO_GC_PARAMS="minor=split,promotion-age=14" ulimit -s 1048576 cd Simulators/Simulator1/bin export TERM=xterm mono --server Robust.exe -inifile=Robust.HG.GridUser.ini
StartRobustInventory.sh
#!/bin/sh ulimit -s 1048576 # next option may improve SGen gc (for opensim only) you may also need to incre$ #export MONO_GC_PARAMS="minor=split,promotion-age=14" ulimit -s 1048576 cd Simulators/Simulator1/bin export TERM=xterm mono --server Robust.exe -inifile=Robust.HG.Inventory.ini
StartRobustMain.ini
#!/bin/sh ulimit -s 1048576 # next option may improve SGen gc (for opensim only) you may also need to incre$ #export MONO_GC_PARAMS="minor=split,promotion-age=14" ulimit -s 1048576 cd Simulators/Simulator1/bin export TERM=xterm mono --server Robust.exe -inifile=Robust.HG.Main.ini
StartRobustMap.ini
#!/bin/sh ulimit -s 1048576 # next option may improve SGen gc (for opensim only) you may also need to incre$ #export MONO_GC_PARAMS="minor=split,promotion-age=14" ulimit -s 1048576 cd Simulators/Simulator1/bin export TERM=xterm mono --server Robust.exe -inifile=Robust.HG.Asset.ini
Final Remarks on Opensim 0.911 Separate Robust
Thank you for reading Opensim with multiple Robust services on Ubuntu. This article has been written in the hope it is useful. It will only work with 0.911, however, a new article for Opensim 0.92 will come soon.
Thank You!! I adopted this for windows and worked great..
glad it helped
I have some questions about some things… Could you contact me at my email address [email protected] There is a few things that I’m having trouble with.. Thank you!
Has a version of this article for 0.92 been published?