What is Utopia, first of all?
Utopia is a virtual world built entirely on a platform developed by OpenSimulator, as described on the source website, an “…open source multi-platform, multi-user 3D application server.”
UPDATE:
Althought this article pertains and can be found helpful in the making of an OpenSim grid, Utopia has been discontinued as a project and replaced with SkyLine Grid, whose progress will aid to the development of further documentation on BacklitKeys. See details and create an avatar to explore SkyLine Grid at: http://skylinegrid.com.
Yes, i know, it is a mouthful, so let me break it down: a “multi-user 3D application server” could be described as something similar to an operating system which other computers can connect to and run programs from, using a three-dimensional interface, much like in the movie Tron©.
As a matter of fact, the technical similarities between the OpenSimulator project and the movie are surprising, as both run on a self-contained server and provide support for multiple users to access the system at the same time and communicate with each other, and both provide support for modifying and developing the 3D environment to resemble realistic surroundings. The most obvious similarity though, is the fact that the term “simulation grid” is used to define both systems in terms of what it is.
Of course the differences are obvious: OpenSimulator does not run off a sci-fi grade supercomputer capable of true Artificial Intelligence, nor it allows for computer generated characters to come to life outside of the server machine. It would be awesome… but no… it just doesn’t do that.
Depending on each individual’s skills, a modest amount of reading is required, if anything, to grasp the basic concepts necessary to build the infrastructure of a virtual world. Thankfully, the team at OpenSimulator.org have provided enough documentation to help those who are willing to help themselves.
Requirements
The team at OpenSimulator.org has developed a very convenient way to get started creating a simulation grid, in the form of a “Distribution” of a “template operating system” that can be installed and run, almost automatically, on various computer platforms. The most popular distribution is called “Diva”, which features the latest version of the simulation grid, as well as many other enhancements designed to provide for an easy installation and configuration.
In order for Diva to work, there are a few requirements to meet:
1. A modest but reliable computer able to run 24 hours a day, 7 days a week without missing a beat.
2. A broadband internet connection, cable if possible.
3. A router that allows for NAT, port forwarding and, most importantly, dynamic DNS.
4. 3 MySQL databases running on a web server. You could use a virtual server running on your computer, but why wasting hardware resources that might add stability to your grid?
4. The ability to remote control the server computer through desktop sharing applications such as LogMeIn©
PC requirements:
The server application that allows for the simulation grid to exist has very modest requirements in terms of hardware. I have found my $500 home laptop running Microsoft Windows 7™ to be quite sufficient for the task, as long as no other heavy applications are running that might cause the computer to overheat and produce blue screens or other system errors. I can assume Linux system might have the upper hand, as Linux system requirements are usually considerably more economical.
Network Requirements:
While virtually any modern home computer system will provide a stable environment for the server application to run, network requirements are a different matter altogether. A cable connection is usually ideal as it provides plenty of bandwidth, at a reasonable price where available. Sadly it’s not available everywhere, so i can assume DSL might be where the bar is set the lowest.
Provided a capable Internet connection speed, the choice of a router is crucial to a successful setup. My choice of a router is usually Linksys©, as i consider them personally the easiest to setup, with the most options.
If you are like me and you have multiple computers connected wirelessly to the same router, you really want the ability to fix the IP address of the computer where you are running the simulation grid from so that it doesn’t change whenever your computer goes off-line. Linksys routers usually allow for that.
The next step is to setup your port forwarding. The ports that need to be open are quite a few to allow for all required services to reach the outside world.
The most important ones are: 8002, 8003, 9000, 9001, 9002, 9003 and 9004 on your local IP address assigned to your computer.
For example, if your PC is identified by your router as 192.168.1.6, you will need to open all the above ports for that address only. This will allow you to connect to that computer directly by using those ports from a remote computer somewhere out on the web.
Needless to say, each port can only be open for one single computer. You can’t open the same port on multiple computers on the same network. I say “needless” because the router will simply not allow you to.
At this point we need to setup Dynamic DNS, literally the easiest part of your network setup.
Our goal is to be able to type in a web address in a browser which will connect us to the home computer running the simulation, for which we have opened the above ports through the router.
The service i use is provided for free by http://dyndns.org. Once a free account is created, a domain name can be picked and assigned to the external IP address of our router. This address can be found by opening a browser on the server computer and typing: http://www.whatismyip.org/. The number appearing on the top of the browser window is the external IP address of your router.
Lastly: find a free service that provides you the ability to remote control your server computer. I like LogMeIn, as it’s the most stable in my experience and it allows to remote to several different computers, with the added bonus of being usable on Google Chrome.
If you are planning on using Windows™ native desktop sharing application, I’d advise not to waste time after the first try, as it’s going to be a major headache. There is plenty of third party applications on the web to choose from that require minimal learning curve and setup time.
“Why would you want to setup desktop sharing?” you might ask, and the answer is simple: once the installation of your grid is complete, there will always be a minimal amount of server-side adjustment to be done, and since this is a server application providing multi-user with a shared platform, you will definitely need the ability to reach your home computer even when you are on the go, especially if the grid crashes, the computer crashes, or restarts on its own due to operating system updates (especially on Windows). If you are using Windows (any version after Vista), here is a precious tip: hit Start, Run, and type “netplwiz”, then un-check “Users must enter a username and password to use this computer”.
The reason for this is that if the computer restarts and gets to the login screen, you will not be able to remotely login, because the remote desktop application is simply not running yet. You’re welcome.
Set up your MySQL databases
You will need three databases:
1. One will support the grid and save all your user, objects and land settings, as well as providing a platform to manage real estate within the grid. This not only allows to landscape the virtual land where users will interact with each other, but also defines identities of the users, and the ownership of everything they create within the grid, among other things. This allows for users to create, for instance, objects that cannot be copied or stolen by other users as their ownership is hard-coded in the database itself.
2. Another will support groups within the simulation grid. Groups are like “clubs” or “circles” where users can gather and share information, communicate and interact separately from the rest of the grid.
3. The last will provide support for saving personal profiles information for the users and create the infrastructure for in-world social networking. Users will be able to upload and set profile pictures, display a profile bio and provide other information for other users to see, much like an “identity card”.
While explaining this, i assume the reader has basic knowledge of SQL databases and how to import and manage data tables. Fortunately, in most cases, it is usually a simple matter of using the Import feature of your database management system of choice to build the required tables from pre-packaged .sql files contained in the Diva distribution downloaded from OpenSimulator.org.
Mind you, building the proper tables in MySQL is not easy, and things WILL break down causing you to have to wipe out your databases a few times before getting it right.
For your convenience, i have provided the template tables that i use for my databases to run Utopia:
Grid Database Tables
-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 05, 2011 at 03:18 PM
-- Server version: 5.0.91
-- PHP Version: 5.3.6-pl0-gentoo
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `utopiagrid`
--
-- --------------------------------------------------------
--
-- Table structure for table `assets`
--
CREATE TABLE IF NOT EXISTS `assets` (
`name` varchar(64) NOT NULL,
`description` varchar(64) NOT NULL,
`assetType` tinyint(4) NOT NULL,
`local` tinyint(1) NOT NULL,
`temporary` tinyint(1) NOT NULL,
`data` longblob NOT NULL,
`id` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`create_time` int(11) default '0',
`access_time` int(11) default '0',
`asset_flags` int(11) NOT NULL default '0',
`CreatorID` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Rev. 1';
-- --------------------------------------------------------
--
-- Table structure for table `auth`
--
CREATE TABLE IF NOT EXISTS `auth` (
`UUID` char(36) NOT NULL,
`passwordHash` char(32) NOT NULL default '',
`passwordSalt` char(32) NOT NULL default '',
`webLoginKey` varchar(255) NOT NULL default '',
`accountType` varchar(32) NOT NULL default 'UserAccount',
PRIMARY KEY (`UUID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `Avatars`
--
CREATE TABLE IF NOT EXISTS `Avatars` (
`PrincipalID` char(36) NOT NULL,
`Name` varchar(32) NOT NULL,
`Value` text,
PRIMARY KEY (`PrincipalID`,`Name`),
KEY `PrincipalID` (`PrincipalID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `estateban`
--
CREATE TABLE IF NOT EXISTS `estateban` (
`EstateID` int(10) unsigned NOT NULL,
`bannedUUID` varchar(36) NOT NULL,
`bannedIp` varchar(16) NOT NULL,
`bannedIpHostMask` varchar(16) NOT NULL,
`bannedNameMask` varchar(64) default NULL,
KEY `estateban_EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `estate_groups`
--
CREATE TABLE IF NOT EXISTS `estate_groups` (
`EstateID` int(10) unsigned NOT NULL,
`uuid` char(36) NOT NULL,
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `estate_managers`
--
CREATE TABLE IF NOT EXISTS `estate_managers` (
`EstateID` int(10) unsigned NOT NULL,
`uuid` char(36) NOT NULL,
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `estate_map`
--
CREATE TABLE IF NOT EXISTS `estate_map` (
`RegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`EstateID` int(11) NOT NULL,
PRIMARY KEY (`RegionID`),
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `estate_settings`
--
CREATE TABLE IF NOT EXISTS `estate_settings` (
`EstateID` int(10) unsigned NOT NULL auto_increment,
`EstateName` varchar(64) default NULL,
`AbuseEmailToEstateOwner` tinyint(4) NOT NULL,
`DenyAnonymous` tinyint(4) NOT NULL,
`ResetHomeOnTeleport` tinyint(4) NOT NULL,
`FixedSun` tinyint(4) NOT NULL,
`DenyTransacted` tinyint(4) NOT NULL,
`BlockDwell` tinyint(4) NOT NULL,
`DenyIdentified` tinyint(4) NOT NULL,
`AllowVoice` tinyint(4) NOT NULL,
`UseGlobalTime` tinyint(4) NOT NULL,
`PricePerMeter` int(11) NOT NULL,
`TaxFree` tinyint(4) NOT NULL,
`AllowDirectTeleport` tinyint(4) NOT NULL,
`RedirectGridX` int(11) NOT NULL,
`RedirectGridY` int(11) NOT NULL,
`ParentEstateID` int(10) unsigned NOT NULL,
`SunPosition` double NOT NULL,
`EstateSkipScripts` tinyint(4) NOT NULL,
`BillableFactor` float NOT NULL,
`PublicAccess` tinyint(4) NOT NULL,
`AbuseEmail` varchar(255) NOT NULL,
`EstateOwner` varchar(36) NOT NULL,
`DenyMinors` tinyint(4) NOT NULL,
PRIMARY KEY (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=101 ;
-- --------------------------------------------------------
--
-- Table structure for table `estate_users`
--
CREATE TABLE IF NOT EXISTS `estate_users` (
`EstateID` int(10) unsigned NOT NULL,
`uuid` char(36) NOT NULL,
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `Friends`
--
CREATE TABLE IF NOT EXISTS `Friends` (
`PrincipalID` char(36) NOT NULL,
`Friend` varchar(255) NOT NULL,
`Flags` varchar(16) NOT NULL default '0',
`Offered` varchar(32) NOT NULL default '0',
PRIMARY KEY (`PrincipalID`,`Friend`),
KEY `PrincipalID` (`PrincipalID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `GridUser`
--
CREATE TABLE IF NOT EXISTS `GridUser` (
`UserID` varchar(255) NOT NULL,
`HomeRegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`HomePosition` char(64) NOT NULL default '',
`HomeLookAt` char(64) NOT NULL default '',
`LastRegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`LastPosition` char(64) NOT NULL default '',
`LastLookAt` char(64) NOT NULL default '',
`Online` char(5) NOT NULL default 'false',
`Login` char(16) NOT NULL default '0',
`Logout` char(16) NOT NULL default '0',
PRIMARY KEY (`UserID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `inventoryfolders`
--
CREATE TABLE IF NOT EXISTS `inventoryfolders` (
`folderName` varchar(64) default NULL,
`type` smallint(6) NOT NULL default '0',
`version` int(11) NOT NULL default '0',
`folderID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`agentID` char(36) default NULL,
`parentFolderID` char(36) default NULL,
PRIMARY KEY (`folderID`),
KEY `inventoryfolders_agentid` (`agentID`),
KEY `inventoryfolders_parentFolderid` (`parentFolderID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `inventoryitems`
--
CREATE TABLE IF NOT EXISTS `inventoryitems` (
`assetID` varchar(36) default NULL,
`assetType` int(11) default NULL,
`inventoryName` varchar(64) default NULL,
`inventoryDescription` varchar(128) default NULL,
`inventoryNextPermissions` int(10) unsigned default NULL,
`inventoryCurrentPermissions` int(10) unsigned default NULL,
`invType` int(11) default NULL,
`creatorID` varchar(255) NOT NULL default '00000000-0000-0000-0000-000000000000',
`inventoryBasePermissions` int(10) unsigned NOT NULL default '0',
`inventoryEveryOnePermissions` int(10) unsigned NOT NULL default '0',
`salePrice` int(11) NOT NULL default '0',
`saleType` tinyint(4) NOT NULL default '0',
`creationDate` int(11) NOT NULL default '0',
`groupID` varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`groupOwned` tinyint(4) NOT NULL default '0',
`flags` int(11) unsigned NOT NULL default '0',
`inventoryID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`avatarID` char(36) default NULL,
`parentFolderID` char(36) default NULL,
`inventoryGroupPermissions` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`inventoryID`),
KEY `inventoryitems_avatarid` (`avatarID`),
KEY `inventoryitems_parentFolderid` (`parentFolderID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `land`
--
CREATE TABLE IF NOT EXISTS `land` (
`UUID` varchar(255) NOT NULL,
`RegionUUID` varchar(255) default NULL,
`LocalLandID` int(11) default NULL,
`Bitmap` longblob,
`Name` varchar(255) default NULL,
`Description` varchar(255) default NULL,
`OwnerUUID` varchar(255) default NULL,
`IsGroupOwned` int(11) default NULL,
`Area` int(11) default NULL,
`AuctionID` int(11) default NULL,
`Category` int(11) default NULL,
`ClaimDate` int(11) default NULL,
`ClaimPrice` int(11) default NULL,
`GroupUUID` varchar(255) default NULL,
`SalePrice` int(11) default NULL,
`LandStatus` int(11) default NULL,
`LandFlags` int(11) default NULL,
`LandingType` int(11) default NULL,
`MediaAutoScale` int(11) default NULL,
`MediaTextureUUID` varchar(255) default NULL,
`MediaURL` varchar(255) default NULL,
`MusicURL` varchar(255) default NULL,
`PassHours` float default NULL,
`PassPrice` int(11) default NULL,
`SnapshotUUID` varchar(255) default NULL,
`UserLocationX` float default NULL,
`UserLocationY` float default NULL,
`UserLocationZ` float default NULL,
`UserLookAtX` float default NULL,
`UserLookAtY` float default NULL,
`UserLookAtZ` float default NULL,
`AuthbuyerID` varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`OtherCleanTime` int(11) NOT NULL default '0',
`Dwell` int(11) NOT NULL default '0',
`MediaType` varchar(32) NOT NULL default 'none/none',
`MediaDescription` varchar(255) NOT NULL default '',
`MediaSize` varchar(16) NOT NULL default '0,0',
`MediaLoop` tinyint(1) NOT NULL default '0',
`ObscureMusic` tinyint(1) NOT NULL default '0',
`ObscureMedia` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`UUID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `landaccesslist`
--
CREATE TABLE IF NOT EXISTS `landaccesslist` (
`LandUUID` varchar(255) default NULL,
`AccessUUID` varchar(255) default NULL,
`Flags` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `migrations`
--
CREATE TABLE IF NOT EXISTS `migrations` (
`name` varchar(100) default NULL,
`version` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `Presence`
--
CREATE TABLE IF NOT EXISTS `Presence` (
`UserID` varchar(255) NOT NULL,
`RegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`SessionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`SecureSessionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`LastSeen` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
UNIQUE KEY `SessionID` (`SessionID`),
KEY `UserID` (`UserID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `primitems`
--
CREATE TABLE IF NOT EXISTS `primitems` (
`invType` int(11) default NULL,
`assetType` int(11) default NULL,
`name` varchar(255) default NULL,
`description` varchar(255) default NULL,
`creationDate` bigint(20) default NULL,
`nextPermissions` int(11) default NULL,
`currentPermissions` int(11) default NULL,
`basePermissions` int(11) default NULL,
`everyonePermissions` int(11) default NULL,
`groupPermissions` int(11) default NULL,
`flags` int(11) NOT NULL default '0',
`itemID` char(36) NOT NULL default '',
`primID` char(36) default NULL,
`assetID` char(36) default NULL,
`parentFolderID` char(36) default NULL,
`CreatorID` varchar(255) NOT NULL default '',
`ownerID` char(36) default NULL,
`groupID` char(36) default NULL,
`lastOwnerID` char(36) default NULL,
PRIMARY KEY (`itemID`),
KEY `primitems_primid` (`primID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `prims`
--
CREATE TABLE IF NOT EXISTS `prims` (
`CreationDate` int(11) default NULL,
`Name` varchar(255) default NULL,
`Text` varchar(255) default NULL,
`Description` varchar(255) default NULL,
`SitName` varchar(255) default NULL,
`TouchName` varchar(255) default NULL,
`ObjectFlags` int(11) default NULL,
`OwnerMask` int(11) default NULL,
`NextOwnerMask` int(11) default NULL,
`GroupMask` int(11) default NULL,
`EveryoneMask` int(11) default NULL,
`BaseMask` int(11) default NULL,
`PositionX` double default NULL,
`PositionY` double default NULL,
`PositionZ` double default NULL,
`GroupPositionX` double default NULL,
`GroupPositionY` double default NULL,
`GroupPositionZ` double default NULL,
`VelocityX` double default NULL,
`VelocityY` double default NULL,
`VelocityZ` double default NULL,
`AngularVelocityX` double default NULL,
`AngularVelocityY` double default NULL,
`AngularVelocityZ` double default NULL,
`AccelerationX` double default NULL,
`AccelerationY` double default NULL,
`AccelerationZ` double default NULL,
`RotationX` double default NULL,
`RotationY` double default NULL,
`RotationZ` double default NULL,
`RotationW` double default NULL,
`SitTargetOffsetX` double default NULL,
`SitTargetOffsetY` double default NULL,
`SitTargetOffsetZ` double default NULL,
`SitTargetOrientW` double default NULL,
`SitTargetOrientX` double default NULL,
`SitTargetOrientY` double default NULL,
`SitTargetOrientZ` double default NULL,
`UUID` char(36) NOT NULL default '',
`RegionUUID` char(36) default NULL,
`CreatorID` varchar(255) NOT NULL default '',
`OwnerID` char(36) default NULL,
`GroupID` char(36) default NULL,
`LastOwnerID` char(36) default NULL,
`SceneGroupID` char(36) default NULL,
`PayPrice` int(11) NOT NULL default '0',
`PayButton1` int(11) NOT NULL default '0',
`PayButton2` int(11) NOT NULL default '0',
`PayButton3` int(11) NOT NULL default '0',
`PayButton4` int(11) NOT NULL default '0',
`LoopedSound` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`LoopedSoundGain` double NOT NULL default '0',
`TextureAnimation` blob,
`OmegaX` double NOT NULL default '0',
`OmegaY` double NOT NULL default '0',
`OmegaZ` double NOT NULL default '0',
`CameraEyeOffsetX` double NOT NULL default '0',
`CameraEyeOffsetY` double NOT NULL default '0',
`CameraEyeOffsetZ` double NOT NULL default '0',
`CameraAtOffsetX` double NOT NULL default '0',
`CameraAtOffsetY` double NOT NULL default '0',
`CameraAtOffsetZ` double NOT NULL default '0',
`ForceMouselook` tinyint(4) NOT NULL default '0',
`ScriptAccessPin` int(11) NOT NULL default '0',
`AllowedDrop` tinyint(4) NOT NULL default '0',
`DieAtEdge` tinyint(4) NOT NULL default '0',
`SalePrice` int(11) NOT NULL default '10',
`SaleType` tinyint(4) NOT NULL default '0',
`ColorR` int(11) NOT NULL default '0',
`ColorG` int(11) NOT NULL default '0',
`ColorB` int(11) NOT NULL default '0',
`ColorA` int(11) NOT NULL default '0',
`ParticleSystem` blob,
`ClickAction` tinyint(4) NOT NULL default '0',
`Material` tinyint(4) NOT NULL default '3',
`CollisionSound` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`CollisionSoundVolume` double NOT NULL default '0',
`LinkNumber` int(11) NOT NULL default '0',
`PassTouches` tinyint(4) NOT NULL default '0',
`MediaURL` varchar(255) default NULL,
PRIMARY KEY (`UUID`),
KEY `prims_regionuuid` (`RegionUUID`),
KEY `prims_scenegroupid` (`SceneGroupID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `primshapes`
--
CREATE TABLE IF NOT EXISTS `primshapes` (
`Shape` int(11) default NULL,
`ScaleX` double NOT NULL default '0',
`ScaleY` double NOT NULL default '0',
`ScaleZ` double NOT NULL default '0',
`PCode` int(11) default NULL,
`PathBegin` int(11) default NULL,
`PathEnd` int(11) default NULL,
`PathScaleX` int(11) default NULL,
`PathScaleY` int(11) default NULL,
`PathShearX` int(11) default NULL,
`PathShearY` int(11) default NULL,
`PathSkew` int(11) default NULL,
`PathCurve` int(11) default NULL,
`PathRadiusOffset` int(11) default NULL,
`PathRevolutions` int(11) default NULL,
`PathTaperX` int(11) default NULL,
`PathTaperY` int(11) default NULL,
`PathTwist` int(11) default NULL,
`PathTwistBegin` int(11) default NULL,
`ProfileBegin` int(11) default NULL,
`ProfileEnd` int(11) default NULL,
`ProfileCurve` int(11) default NULL,
`ProfileHollow` int(11) default NULL,
`State` int(11) default NULL,
`Texture` longblob,
`ExtraParams` longblob,
`UUID` char(36) NOT NULL default '',
`Media` text,
PRIMARY KEY (`UUID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `regionban`
--
CREATE TABLE IF NOT EXISTS `regionban` (
`regionUUID` varchar(36) NOT NULL,
`bannedUUID` varchar(36) NOT NULL,
`bannedIp` varchar(16) NOT NULL,
`bannedIpHostMask` varchar(16) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Rev. 1';
-- --------------------------------------------------------
--
-- Table structure for table `regions`
--
CREATE TABLE IF NOT EXISTS `regions` (
`uuid` varchar(36) NOT NULL,
`regionHandle` bigint(20) unsigned NOT NULL,
`regionName` varchar(128) default NULL,
`regionRecvKey` varchar(128) default NULL,
`regionSendKey` varchar(128) default NULL,
`regionSecret` varchar(128) default NULL,
`regionDataURI` varchar(255) default NULL,
`serverIP` varchar(64) default NULL,
`serverPort` int(10) unsigned default NULL,
`serverURI` varchar(255) default NULL,
`locX` int(10) unsigned default NULL,
`locY` int(10) unsigned default NULL,
`locZ` int(10) unsigned default NULL,
`eastOverrideHandle` bigint(20) unsigned default NULL,
`westOverrideHandle` bigint(20) unsigned default NULL,
`southOverrideHandle` bigint(20) unsigned default NULL,
`northOverrideHandle` bigint(20) unsigned default NULL,
`regionAssetURI` varchar(255) default NULL,
`regionAssetRecvKey` varchar(128) default NULL,
`regionAssetSendKey` varchar(128) default NULL,
`regionUserURI` varchar(255) default NULL,
`regionUserRecvKey` varchar(128) default NULL,
`regionUserSendKey` varchar(128) default NULL,
`regionMapTexture` varchar(36) default NULL,
`serverHttpPort` int(10) default NULL,
`serverRemotingPort` int(10) default NULL,
`owner_uuid` varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`originUUID` varchar(36) default NULL,
`access` int(10) unsigned default '1',
`ScopeID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`sizeX` int(11) NOT NULL default '0',
`sizeY` int(11) NOT NULL default '0',
`flags` int(11) NOT NULL default '0',
`last_seen` int(11) NOT NULL default '0',
`PrincipalID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`Token` varchar(255) NOT NULL,
PRIMARY KEY (`uuid`),
KEY `regionName` (`regionName`),
KEY `regionHandle` (`regionHandle`),
KEY `overrideHandles` (`eastOverrideHandle`,`westOverrideHandle`,`southOverrideHandle`,`northOverrideHandle`),
KEY `ScopeID` (`ScopeID`),
KEY `flags` (`flags`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Rev. 3';
-- --------------------------------------------------------
--
-- Table structure for table `regionsettings`
--
CREATE TABLE IF NOT EXISTS `regionsettings` (
`regionUUID` char(36) NOT NULL,
`block_terraform` int(11) NOT NULL,
`block_fly` int(11) NOT NULL,
`allow_damage` int(11) NOT NULL,
`restrict_pushing` int(11) NOT NULL,
`allow_land_resell` int(11) NOT NULL,
`allow_land_join_divide` int(11) NOT NULL,
`block_show_in_search` int(11) NOT NULL,
`agent_limit` int(11) NOT NULL,
`object_bonus` double NOT NULL,
`maturity` int(11) NOT NULL,
`disable_scripts` int(11) NOT NULL,
`disable_collisions` int(11) NOT NULL,
`disable_physics` int(11) NOT NULL,
`terrain_texture_1` char(36) NOT NULL,
`terrain_texture_2` char(36) NOT NULL,
`terrain_texture_3` char(36) NOT NULL,
`terrain_texture_4` char(36) NOT NULL,
`elevation_1_nw` double NOT NULL,
`elevation_2_nw` double NOT NULL,
`elevation_1_ne` double NOT NULL,
`elevation_2_ne` double NOT NULL,
`elevation_1_se` double NOT NULL,
`elevation_2_se` double NOT NULL,
`elevation_1_sw` double NOT NULL,
`elevation_2_sw` double NOT NULL,
`water_height` double NOT NULL,
`terrain_raise_limit` double NOT NULL,
`terrain_lower_limit` double NOT NULL,
`use_estate_sun` int(11) NOT NULL,
`fixed_sun` int(11) NOT NULL,
`sun_position` double NOT NULL,
`covenant` char(36) default NULL,
`Sandbox` tinyint(4) NOT NULL,
`sunvectorx` double NOT NULL default '0',
`sunvectory` double NOT NULL default '0',
`sunvectorz` double NOT NULL default '0',
`loaded_creation_id` varchar(64) default NULL,
`loaded_creation_datetime` int(10) unsigned NOT NULL default '0',
`map_tile_ID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
PRIMARY KEY (`regionUUID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `regionwindlight`
--
CREATE TABLE IF NOT EXISTS `regionwindlight` (
`region_id` varchar(36) NOT NULL default '000000-0000-0000-0000-000000000000',
`water_color_r` float(9,6) unsigned NOT NULL default '4.000000',
`water_color_g` float(9,6) unsigned NOT NULL default '38.000000',
`water_color_b` float(9,6) unsigned NOT NULL default '64.000000',
`water_fog_density_exponent` float(3,1) unsigned NOT NULL default '4.0',
`underwater_fog_modifier` float(3,2) unsigned NOT NULL default '0.25',
`reflection_wavelet_scale_1` float(3,1) unsigned NOT NULL default '2.0',
`reflection_wavelet_scale_2` float(3,1) unsigned NOT NULL default '2.0',
`reflection_wavelet_scale_3` float(3,1) unsigned NOT NULL default '2.0',
`fresnel_scale` float(3,2) unsigned NOT NULL default '0.40',
`fresnel_offset` float(3,2) unsigned NOT NULL default '0.50',
`refract_scale_above` float(3,2) unsigned NOT NULL default '0.03',
`refract_scale_below` float(3,2) unsigned NOT NULL default '0.20',
`blur_multiplier` float(4,3) unsigned NOT NULL default '0.040',
`big_wave_direction_x` float(3,2) NOT NULL default '1.05',
`big_wave_direction_y` float(3,2) NOT NULL default '-0.42',
`little_wave_direction_x` float(3,2) NOT NULL default '1.11',
`little_wave_direction_y` float(3,2) NOT NULL default '-1.16',
`normal_map_texture` varchar(36) NOT NULL default '822ded49-9a6c-f61c-cb89-6df54f42cdf4',
`horizon_r` float(3,2) unsigned NOT NULL default '0.25',
`horizon_g` float(3,2) unsigned NOT NULL default '0.25',
`horizon_b` float(3,2) unsigned NOT NULL default '0.32',
`horizon_i` float(3,2) unsigned NOT NULL default '0.32',
`haze_horizon` float(3,2) unsigned NOT NULL default '0.19',
`blue_density_r` float(3,2) unsigned NOT NULL default '0.12',
`blue_density_g` float(3,2) unsigned NOT NULL default '0.22',
`blue_density_b` float(3,2) unsigned NOT NULL default '0.38',
`blue_density_i` float(3,2) unsigned NOT NULL default '0.38',
`haze_density` float(3,2) unsigned NOT NULL default '0.70',
`density_multiplier` float(3,2) unsigned NOT NULL default '0.18',
`distance_multiplier` float(4,1) unsigned NOT NULL default '0.8',
`max_altitude` int(4) unsigned NOT NULL default '1605',
`sun_moon_color_r` float(3,2) unsigned NOT NULL default '0.24',
`sun_moon_color_g` float(3,2) unsigned NOT NULL default '0.26',
`sun_moon_color_b` float(3,2) unsigned NOT NULL default '0.30',
`sun_moon_color_i` float(3,2) unsigned NOT NULL default '0.30',
`sun_moon_position` float(4,3) unsigned NOT NULL default '0.317',
`ambient_r` float(3,2) unsigned NOT NULL default '0.35',
`ambient_g` float(3,2) unsigned NOT NULL default '0.35',
`ambient_b` float(3,2) unsigned NOT NULL default '0.35',
`ambient_i` float(3,2) unsigned NOT NULL default '0.35',
`east_angle` float(3,2) unsigned NOT NULL default '0.00',
`sun_glow_focus` float(3,2) unsigned NOT NULL default '0.10',
`sun_glow_size` float(3,2) unsigned NOT NULL default '1.75',
`scene_gamma` float(4,2) unsigned NOT NULL default '1.00',
`star_brightness` float(3,2) unsigned NOT NULL default '0.00',
`cloud_color_r` float(3,2) unsigned NOT NULL default '0.41',
`cloud_color_g` float(3,2) unsigned NOT NULL default '0.41',
`cloud_color_b` float(3,2) unsigned NOT NULL default '0.41',
`cloud_color_i` float(3,2) unsigned NOT NULL default '0.41',
`cloud_x` float(3,2) unsigned NOT NULL default '1.00',
`cloud_y` float(3,2) unsigned NOT NULL default '0.53',
`cloud_density` float(3,2) unsigned NOT NULL default '1.00',
`cloud_coverage` float(3,2) unsigned NOT NULL default '0.27',
`cloud_scale` float(3,2) unsigned NOT NULL default '0.42',
`cloud_detail_x` float(3,2) unsigned NOT NULL default '1.00',
`cloud_detail_y` float(3,2) unsigned NOT NULL default '0.53',
`cloud_detail_density` float(3,2) unsigned NOT NULL default '0.12',
`cloud_scroll_x` float(4,2) NOT NULL default '0.20',
`cloud_scroll_x_lock` tinyint(1) unsigned NOT NULL default '0',
`cloud_scroll_y` float(4,2) NOT NULL default '0.01',
`cloud_scroll_y_lock` tinyint(1) unsigned NOT NULL default '0',
`draw_classic_clouds` tinyint(1) unsigned NOT NULL default '1',
PRIMARY KEY (`region_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `terrain`
--
CREATE TABLE IF NOT EXISTS `terrain` (
`RegionUUID` varchar(255) default NULL,
`Revision` int(11) default NULL,
`Heightfield` longblob
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `tokens`
--
CREATE TABLE IF NOT EXISTS `tokens` (
`UUID` char(36) NOT NULL,
`token` varchar(255) NOT NULL,
`validity` datetime NOT NULL,
UNIQUE KEY `uuid_token` (`UUID`,`token`),
KEY `UUID` (`UUID`),
KEY `token` (`token`),
KEY `validity` (`validity`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `UserAccounts`
--
CREATE TABLE IF NOT EXISTS `UserAccounts` (
`PrincipalID` char(36) NOT NULL,
`ScopeID` char(36) NOT NULL,
`FirstName` varchar(64) NOT NULL,
`LastName` varchar(64) NOT NULL,
`Email` varchar(64) default NULL,
`ServiceURLs` text,
`Created` int(11) default NULL,
`UserLevel` int(11) NOT NULL default '0',
`UserFlags` int(11) NOT NULL default '0',
`UserTitle` varchar(64) NOT NULL default '',
UNIQUE KEY `PrincipalID` (`PrincipalID`),
KEY `Email` (`Email`),
KEY `FirstName` (`FirstName`),
KEY `LastName` (`LastName`),
KEY `Name` (`FirstName`,`LastName`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Groups database tables:
-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 05, 2011 at 03:21 PM
-- Server version: 5.0.91
-- PHP Version: 5.3.6-pl0-gentoo
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `opengridgroups`
--
-- --------------------------------------------------------
--
-- Table structure for table `osagent`
--
CREATE TABLE IF NOT EXISTS `osagent` (
`AgentID` varchar(128) NOT NULL default '',
`ActiveGroupID` varchar(128) NOT NULL default '',
PRIMARY KEY (`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `osgroup`
--
CREATE TABLE IF NOT EXISTS `osgroup` (
`GroupID` varchar(128) NOT NULL default '',
`Name` varchar(255) NOT NULL default '',
`Charter` text NOT NULL,
`InsigniaID` varchar(128) NOT NULL default '',
`FounderID` varchar(128) NOT NULL default '',
`MembershipFee` int(11) NOT NULL default '0',
`OpenEnrollment` varchar(255) NOT NULL default '',
`ShowInList` tinyint(1) NOT NULL default '0',
`AllowPublish` tinyint(1) NOT NULL default '0',
`MaturePublish` tinyint(1) NOT NULL default '0',
`OwnerRoleID` varchar(128) NOT NULL default '',
PRIMARY KEY (`GroupID`),
UNIQUE KEY `Name` (`Name`),
FULLTEXT KEY `Name_2` (`Name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `osgroupinvite`
--
CREATE TABLE IF NOT EXISTS `osgroupinvite` (
`InviteID` varchar(128) NOT NULL default '',
`GroupID` varchar(128) NOT NULL default '',
`RoleID` varchar(64) NOT NULL default '',
`AgentID` varchar(128) NOT NULL default '',
`TMStamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`InviteID`),
UNIQUE KEY `GroupID` (`GroupID`,`RoleID`,`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `osgroupmembership`
--
CREATE TABLE IF NOT EXISTS `osgroupmembership` (
`GroupID` varchar(128) NOT NULL default '',
`AgentID` varchar(128) NOT NULL default '',
`SelectedRoleID` varchar(128) NOT NULL default '',
`Contribution` int(11) NOT NULL default '0',
`ListInProfile` int(11) NOT NULL default '1',
`AcceptNotices` int(11) NOT NULL default '1',
PRIMARY KEY (`GroupID`,`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `osgroupnotice`
--
CREATE TABLE IF NOT EXISTS `osgroupnotice` (
`GroupID` varchar(128) NOT NULL default '',
`NoticeID` varchar(128) NOT NULL default '',
`Timestamp` int(10) unsigned NOT NULL default '0',
`FromName` varchar(255) NOT NULL default '',
`Subject` varchar(255) NOT NULL default '',
`Message` text NOT NULL,
`BinaryBucket` text NOT NULL,
PRIMARY KEY (`GroupID`,`NoticeID`),
KEY `Timestamp` (`Timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `osgrouprolemembership`
--
CREATE TABLE IF NOT EXISTS `osgrouprolemembership` (
`GroupID` varchar(64) NOT NULL default '',
`RoleID` varchar(128) NOT NULL default '',
`AgentID` varchar(128) NOT NULL default '',
PRIMARY KEY (`GroupID`,`RoleID`,`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `osrole`
--
CREATE TABLE IF NOT EXISTS `osrole` (
`GroupID` varchar(128) NOT NULL default '',
`RoleID` varchar(128) NOT NULL default '',
`Name` varchar(255) NOT NULL default '',
`Description` varchar(255) NOT NULL default '',
`Title` varchar(255) NOT NULL default '',
`Powers` bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (`GroupID`,`RoleID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Profiles Database Tables
-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 05, 2011 at 03:24 PM
-- Server version: 5.0.91
-- PHP Version: 5.3.6-pl0-gentoo
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `utopiagroups`
--
-- --------------------------------------------------------
--
-- Table structure for table `classifieds`
--
CREATE TABLE IF NOT EXISTS `classifieds` (
`classifieduuid` char(36) NOT NULL,
`creatoruuid` char(36) NOT NULL,
`creationdate` int(20) NOT NULL,
`expirationdate` int(20) NOT NULL,
`category` varchar(20) NOT NULL,
`name` varchar(255) NOT NULL,
`description` text NOT NULL,
`parceluuid` char(36) NOT NULL,
`parentestate` int(11) NOT NULL,
`snapshotuuid` char(36) NOT NULL,
`simname` varchar(255) NOT NULL,
`posglobal` varchar(255) NOT NULL,
`parcelname` varchar(255) NOT NULL,
`classifiedflags` int(8) NOT NULL,
`priceforlisting` int(5) NOT NULL,
PRIMARY KEY (`classifieduuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `usernotes`
--
CREATE TABLE IF NOT EXISTS `usernotes` (
`useruuid` varchar(36) NOT NULL,
`targetuuid` varchar(36) NOT NULL,
`notes` text NOT NULL,
UNIQUE KEY `useruuid` (`useruuid`,`targetuuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `userpicks`
--
CREATE TABLE IF NOT EXISTS `userpicks` (
`pickuuid` varchar(36) NOT NULL,
`creatoruuid` varchar(36) NOT NULL,
`toppick` enum('true','false') NOT NULL,
`parceluuid` varchar(36) NOT NULL,
`name` varchar(255) NOT NULL,
`description` text NOT NULL,
`snapshotuuid` varchar(36) NOT NULL,
`user` varchar(255) NOT NULL,
`originalname` varchar(255) NOT NULL,
`simname` varchar(255) NOT NULL,
`posglobal` varchar(255) NOT NULL,
`sortorder` int(2) NOT NULL,
`enabled` enum('true','false') NOT NULL,
PRIMARY KEY (`pickuuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `userprofile`
--
CREATE TABLE IF NOT EXISTS `userprofile` (
`useruuid` varchar(36) NOT NULL,
`profilePartner` varchar(36) NOT NULL,
`profileAllowPublish` binary(1) NOT NULL,
`profileMaturePublish` binary(1) NOT NULL,
`profileURL` varchar(255) NOT NULL,
`profileWantToMask` int(3) NOT NULL,
`profileWantToText` text NOT NULL,
`profileSkillsMask` int(3) NOT NULL,
`profileSkillsText` text NOT NULL,
`profileLanguages` text NOT NULL,
`profileImage` varchar(36) NOT NULL,
`profileAboutText` text NOT NULL,
`profileFirstImage` varchar(36) NOT NULL,
`profileFirstText` text NOT NULL,
PRIMARY KEY (`useruuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `usersettings`
--
CREATE TABLE IF NOT EXISTS `usersettings` (
`useruuid` varchar(36) NOT NULL,
`imviaemail` enum('true','false') NOT NULL,
`visible` enum('true','false') NOT NULL,
`email` varchar(254) NOT NULL,
PRIMARY KEY (`useruuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Post set-up
Once the network requirements are met and your database is built with the proper tables, it’s time to download the latest distribution of the simulation grid server application from: http://opensimulator.org/wiki/Main_Page. The distribution can be downloaded in different flavors, depending on your operating system, or in a bulk file which contains versions of the server application for all available operating systems.
Create a folder anywhere on your computer and name it what you like as long as you can remember it. This will be your root folder, and your total backup you’ll be able to copy if things go wrong. Usually they do, especially in the beginning, so to save yourself some tears, I’d advise you sign up for a free 2Gb DropBox© account, set your DropBox folder within the folder you have created for your grid, and drop all the files of your grid in there. You’re welcome.
The ideal location would be on your C:\ drive, or on a very fast external backup drive. I have found that the speed of my storage drive plays an important role in how stable my grid is. I have tried to run my grid from a stick drive, and it performed horribly. One might argue that it could be due to the quality of the drive as well, so it’s really up to each individual’s situation. The good news is that since the server application is completely self-contained within its folder, one could simply move the entire folder anywhere on the computer without breaking any external connection to the host system itself (as there are none).
Here comes the fun part: The installation process.
Open a console window, for Microsoft™ users just type cmd from the Run dialog box from the Start menu. If you see anything BUT c:\ on the screen, type the following:
cd..(enter)
cd..(enter again)
cd..(rinse and repeat until you see only c:\>)
Then type: cd (path to the folder you created)
finally type: cd bin
You should now see the following:
c:\opensim\mygrid\bin
Now type: opensim.32bitlaunch
At this point if things are setup correctly, the installation will ask you to answer a few simple questions, such as the name you want to give to your grid, the name of the main region within that grid, and the full name and password of your “master avatar”.
This user account is very important, because you will use it to manage your grid. It has privileges that no other user has.
I see a bunch of red text on the screen!! Is my computer calling NORAD and getting ready to launch nukes??
Yes, and you are in trouble now! Just kidding.
If you see any red text, it means that you will need to make some adjustment to a number of text files within your installation. Fortunately it’s not too big a task, but it does require some patience.
The main file you need to be concerned about is located in the /bin folder and it’s called opensim.ini.
For your convenience here is my opensim.ini which you may copy and replace the dummy information with your own.
;; This is the main configuration file for OpenSimulator. If it's named OpenSim.ini
;; then it will be loaded by OpenSimulator. If it's named OpenSim.ini.example then
;; you will need to copy it to OpenSim.ini first (if that file does not already exist)
;;
;; If you are copying, then once you have copied OpenSim.ini.example to OpenSim.ini you will
;; need to pick an architecture in the [Architecture] section at the end of this file.
;;
;; The settings in this file are in the form " = ". For example, save_crashes = false
;; in the [Startup] section below.
;;
;; All settings are initially commented out and the default value used, as found in
;; OpenSimDefaults.ini. To change a setting, first uncomment it by deleting the initial semicolon (;)
;; and then change the value. This will override the value in OpenSimDefaults.ini
;;
;; If you want to find out what configuration OpenSimulator has finished with once all the configuration
;; files are loaded then type "config show" on the region console command line.
;;
;;
;; NOTES FOR DEVELOPERS REGARDING THE FORMAT OF THIS FILE
;;
;; All leading white space is ignored, but preserved.
;;
;; Double semicolons denote a text comment
;;
;; ;# denotes a configuration directive description
;; formatted as:
;; {option} {depends on} {question to ask} {choices} default value
;; Any text comments following the declaration, up to the next blank line.
;; will be copied to the generated file (NOTE: generation is not yet implemented)
;; A * in the choices list will allow an empty entry.
;; An empty question will set the default if the dependencies are
;; satisfied.
;;
;; ; denotes a commented out option.
;; Any options added to OpenSim.ini.example should be initially commented out.
[Startup]
;# {save_crashes} {} {Save crashes to disk?} {true false} false
;; Set this to true if you want to log crashes to disk
;; this can be useful when submitting bug reports.
; save_crashes = false
;# {crash_dir} {save_crashes:true} {Directory to save crashes to?} {} crashes
;; Directory to save crashes to if above is enabled
;; (default is /opensimdir/crashes/*.txt or C:\opensim\crashes\*.txt)
; crash_dir = "crashes"
;# {PIDFile} {} {Path to PID file?} {}
;; Place to create a PID file
; PIDFile = "/tmp/my.pid"
; ##
; ## SYSTEM
; ##
; Sets the method that OpenSim will use to fire asynchronous
; events. Valid values are UnsafeQueueUserWorkItem,
; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread.
; SmartThreadPool is reported to work well on Mono/Linux, but
; UnsafeQueueUserWorkItem has been benchmarked with better
; performance on .NET/Windows
async_call_method = SmartThreadPool
;; Optimizations from Default of 15
;; 15 good for Single Core CPU IE: P4
;; 30 for Dual Core + CPU's
;; 45 for Quad Core + CPU's
;; MaxPoolThreads = 45 ; DEFAULT 15
; Max threads to allocate on the FireAndForget thread pool
; when running with the SmartThreadPool option above
MaxPoolThreads = 30
;; Determine where OpenSimulator looks for the files which tell it
;; which regions to server
;; Default is "filesystem"
; region_info_source = "filesystem"
; region_info_source = "web"
;; Determines where the region XML files are stored if you are loading
;; these from the filesystem.
;; Defaults to bin/Regions in your OpenSimulator installation directory
; regionload_regionsdir="C:\somewhere\xmlfiles\"
;; Determines the page from which regions xml is retrieved if you are
;; loading these from the web.
;; The XML here has the same format as it does on the filesystem
;; (including the tag), except that everything is also enclosed
;; in a tag.
; regionload_webserver_url = "http://example.com/regions.xml";
MapImageModule = Warp3DImageModule
;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} false
;; Use terrain texture for maptiles if true, use shaded green if false
TextureOnMapTile = true
;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false
;; Draw objects on maptile. This step might take a long time if you've
;; got a large number of objects, so you can turn it off here if you'd like.
DrawPrimOnMapTile = true
;# {NonPhysicalPrimMax} {} {Maximum size of nonphysical prims?} {} 256
;; Maximum size for non-physical prims
; NonPhysicalPrimMax = 256
;# {PhysicalPrimMax} {} {Maximum size of physical prims?} {} 10
;; Maximum size where a prim can be physical
; PhysicalPrimMax = 10
;; Prevent the creation, import and rez of prims that exceed the
;; maximum size.
; ClampPrimSize = false
;# {AllowScriptCrossing} {} {Allow scripts to cross into this region} {true false} false
;; Allow scripts to cross region boundaries. These are recompiled on the
;; new region.
; AllowScriptCrossing = false
;# {TrustBinaries} {AllowScriptCrossing:true} {Accept compiled binary script code? (DANGEROUS!)} {true false} false
;; Allow compiled script binary code to cross region boundaries.
;; If you set this to "true", any region that can teleport to you can
;; inject ARBITRARY BINARY CODE into your system. Use at your own risk.
;; YOU HAVE BEEN WARNED!!!
; TrustBinaries = false
;# {CombineContiguousRegions} {} {Create megaregions where possible? (Do not use with existing content!)} {true false} false
;; Combine all contiguous regions into one large megaregion
;; Order your regions from South to North, West to East in your regions.ini
;; and then set this to true
;; Warning! Don't use this with regions that have existing content!,
;; This will likely break them
; CombineContiguousRegions = false
;; If you have only one region in an instance, or to avoid the many bugs
;; that you can trigger in modules by restarting a region, set this to
;; true to make the entire instance exit instead of restarting the region.
;; This is meant to be used on systems where some external system like
;; Monit will restart any instance that exits, thereby making the shutdown
;; into a restart.
; InworldRestartShutsDown = false
;; Persistence of changed objects happens during regular sweeps. The
;; following control that behaviour to prevent frequently changing objects
;; from heavily loading the region data store.
;; If both of these values are set to zero then persistence of all changed
;; objects will happen on every sweep.
;; Objects will be considered for persistance in the next sweep when they
;; have not changed for this number of seconds.
; MinimumTimeBeforePersistenceConsidered = 60
;; Objects will always be considered for persistance in the next sweep
;; if the first change occurred this number of seconds ago.
; MaximumTimeBeforePersistenceConsidered = 600
;; Should avatars in neighbor sims see objects in this sim?
; see_into_this_sim_from_neighbor = true
;# {physical_prim} {} {Allow prims to be physical?} {true false} true
;; if you would like to allow prims to be physical and move by physics
;; with the physical checkbox in the client set this to true.
; physical_prim = true
;; Select a mesher here.
;;
;; Meshmerizer properly handles complex prims by using triangle meshes.
;; Note that only the ODE physics engine currently deals with meshed
;; prims in a satisfactory way.
;; ZeroMesher is faster but leaves the physics engine to model the mesh
;; using the basic shapes that it supports.
;; Usually this is only a box.
;; Default is Meshmerizer
; meshing = Meshmerizer
; meshing = ZeroMesher
;; Choose one of the physics engines below
;; OpenDynamicsEngine is by some distance the most developed physics engine
;; basicphysics effectively does not model physics at all, making all
;; objects phantom
;; Default is OpenDynamicsEngine
; physics = OpenDynamicsEngine
; physics = basicphysics
; physics = POS
; physics = modified_BulletX
;# {permissionmodules} {} {Permission modules to use (may specify multiple modules, separated by space} {} DefaultPermissionsModule
;; Permission modules to use, separated by space.
permissionmodules = "DefaultPermissionsModule"
;# {serverside_object_permissions} {permissionmodules:DefaultPermissionsModule} {Activate permission handling by the sim?} {true false} true
;; These are the parameters for the default permissions module
;;
;; If set to false, then, in theory, the server never carries out
;; permission checks (allowing anybody to copy
;; any item, etc. This may not yet be implemented uniformally.
;; If set to true, then all permissions checks are carried out
serverside_object_permissions = true
;; This allows users with a UserLevel of 200 or more to assume god
;; powers in the regions in this simulator.
; allow_grid_gods = false
;; This allows some control over permissions
;; please note that this still doesn't duplicate SL, and is not intended to
region_owner_is_god = true
; region_manager_is_god = false
; parcel_owner_is_god = true
;; Default script engine to use. Currently, we only have XEngine
; DefaultScriptEngine = "XEngine"
;; Map tile options. You can choose to generate no map tiles at all,
;; generate normal maptiles, or nominate an uploaded texture to
;; be the map tile
GenerateMaptiles = "true"
;; If desired, a running region can update the map tiles periodically
;; to reflect building activity. This names no sense of you don't have
;; prims on maptiles. Value is in seconds.
; MaptileRefresh = 0
;; If not generating maptiles, use this static texture asset ID
; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"
;; Http proxy setting for llHTTPRequest and dynamic texture loading, if required
; HttpProxy = "http://proxy.com:8080"
;; If you're using HttpProxy, then you can set HttpProxyExceptions to a list of regular expressions for URLs that you don't want to go through the proxy
;; For example, servers inside your firewall.
;; Separate patterns with a ';'
; HttpProxyExceptions = ".mydomain.com;localhost"
;# {emailmodule} {} {Provide llEmail and llGetNextEmail functionality? (requires SMTP server)} {true false} false
;; The email module requires some configuration. It needs an SMTP
;; server to send mail through.
; emailmodule = DefaultEmailModule
DelayBeforeAppearanceSave = 1
DelayBeforeAppearanceSend = 1
[SMTP]
;; The SMTP server enabled the email module to send email to external
;; destinations.
;# {enabled} {[Startup]emailmodule:DefaultEmailModule} {Enable SMTP service?} {true false} true
;; Enable sending email via SMTP
; enabled = false
;# {internal_object_host} {[Startup]emailmodule:DefaultEmailModule enabled:true} {Host name to treat as internal (object to object) email?} {} lsl.opensim.local
; internal_object_host = lsl.opensim.local
;# {host_domain_header_from} {[Startup]emailmodule:DefaultEmailModule enabled:true} {From address to use in the sent email header?} {} 127.0.0.1
; host_domain_header_from = "127.0.0.1"
;# {SMTP_SERVER_HOSTNAME} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server name?} {} 127.0.0.1
; SMTP_SERVER_HOSTNAME = "127.0.0.1"
;# {SMTP_SERVER_PORT} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server name?} {SMTP server port?} {} 25
; SMTP_SERVER_PORT = 25
;# {SMTP_SERVER_LOGIN} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server user name?} {}
; SMTP_SERVER_LOGIN = ""
;# {SMTP_SERVER_PASSWORD} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server password} {}
; SMTP_SERVER_PASSWORD = ""
[Network]
;; Configure the remote console user here. This will not actually be used
;; unless you use -console=rest at startup.
; ConsoleUser = "Test"
; ConsolePass = "secret"
; console_port = 0
;# {http_listener_port} {} {TCP Port for this simulator to listen on? (This must be unique to the simulator!)} {} 9000
;; Simulator HTTP port. This is not the region port, but the port the
;; entire simulator listens on. This port uses the TCP protocol, while
;; the region ports use UDP.
; http_listener_port = 9000
;# {ExternalHostNameForLSL} {} {Hostname to use for HTTP-IN URLs. This should be reachable from the internet.} {}
;; Hostname to use in llRequestURL/llRequestSecureURL
;; if not defined - default machine name is being used
;; (on Windows this mean NETBIOS name - useably only inside local network)
; ExternalHostNameForLSL = "127.0.0.1"
;# {shard} {} {Name to use for X-Secondlife-Shard header? (press enter if unsure)} {} OpenSim
;; What is reported as the "X-Secondlife-Shard"
;; Defaults to the user server url if not set
;; The old default is "OpenSim", set here for compatibility
;; The below is not commented for compatibility.
shard = "OpenSim"
;# {user_agent} {} {User agent to report to web servers?} {} OpenSim LSL (Mozilla Compatible)
;; What is reported as the "User-Agent" when using llHTTPRequest
;; Defaults to not sent if not set here. See the notes section in the wiki
;; at http://wiki.secondlife.com/wiki/LlHTTPRequest for comments on adding
;; " (Mozilla Compatible)" to the text where there are problems with a web server
; user_agent = "OpenSim LSL (Mozilla Compatible)"
[ClientStack.LindenUDP]
;; See OpensSimDefaults.ini for the throttle options. You can copy the
;; relevant sections and override them here.
;; DO NOT MODIFY OpenSimDefaults.ini, as your changes would be lost
;; with the next update!
async_packet_handling = true
scene_throttle_max_bps = 800000
client_throttle_max_bps = 100000
;# {DisableFacelights} {} {Stop facelights from working?} {true false} false
;; Quash and remove any light properties from attachments not on the
;; hands. This allows flashlights and lanterns to function, but kills
;; silly vanity "Facelights" dead. Sorry, head mounted miner's lamps
;; will also be affected.
;; This is especially important in artistic builds that depend on lights
;; on the build for their appearance, since facelights will cause the
;; building's lights to possibly not be rendered.
; DisableFacelights = "false"
[ClientStack.LindenCaps]
;; For the long list of capabilities, see OpenSimDefaults.ini
;; Here are the few ones you may want to change. Possible values
;; are:
;; "" -- empty, capability disabled
;; "localhost" -- capability enabled and served by the simulator
;; "" -- capability enabled and served by some other server
;;
; These are enabled by default to localhost. Change if you see fit.
Cap_GetTexture = "localhost"
Cap_GetMesh = "localhost"
; This is disabled by default. Change if you see fit. Note that
; serving this cap from the simulators may lead to poor performace.
Cap_WebFetchInventoryDescendents = ""
[Chat]
;# {whisper_distance} {} {Distance at which a whisper is heard, in meters?} {} 10
;; Distance in meters that whispers should travel.
; whisper_distance = 10
;# {say_distance} {} {Distance at which normal chat is heard, in meters? (SL uses 20 here)} {} 30
;; Distance in meters that ordinary chat should travel.
; say_distance = 30
;# {shout_distance} {Distance at which a shout is heard, in meters?} {} 100
;; Distance in meters that shouts should travel.
; shout_distance = 100
[Messaging]
;# {OfflineMessageModule} {} {Module to use for offline message storage} {OfflineMessageModule *}
;; Module to handle offline messaging. The core module requires an external
;; web service to do this. See OpenSim wiki.
OfflineMessageModule = OfflineMessageModule
;# {OfflineMessageURL} {OfflineMessageModule:OfflineMessageModule} {URL of offline messaging service} {}
;; URL of web service for offline message storage
OfflineMessageURL = http://im.osgrid.org/offline
;# {MuteListModule} {OfflineMessageModule:OfflineMessageModule} {} {} MuteListModule
;; Mute list handler (not yet implemented). MUST BE SET to allow offline
;; messages to work
MuteListModule = MuteListModule
;# {MuteListURL} {OfflineMessageModule:OfflineMessageModule} {} {} http://yourserver/Mute.php
;; URL of the web service that serves mute lists. Not currently used, but
;; must be set to allow offline messaging to work.
MuteListURL = http://im.osgrid.org/mute
;; Control whether group messages are forwarded to offline users.
;; Default is true.
;; This applies to the core groups module (Flotsam) only.
; ForwardOfflineGroupMessages = true
[ODEPhysicsSettings]
;# {mesh_sculpted_prim} {[Startup]physics:OpenDynamicsEngine} {Mesh sculpties so they collide as they look?} {true false} true
;; Do we want to mesh sculpted prim to collide like they look?
;; If you are seeing sculpt texture decode problems
;; (messages such as "Decoded image with unhandled number of components: 0 shortly followed by a physcs exception")
;; then you might want to try setting this to false.
; mesh_sculpted_prim = true
;# {use_NINJA_physics_joints} {[Startup]physics:OpenDynamicsEngine} {Use jointed (NINJA) physics?} {true false} false
;; If you would like physics joints to be enabled through a special naming
;; convention in the client, set this to true.
;; (see NINJA Physics, http://opensimulator.org/wiki/NINJA_Physics)
; use_NINJA_physics_joints = false
av_density = 3
[RemoteAdmin]
;; This is the remote admin module, which uses XMLRPC requests to
;; manage regions from a web interface.
;# {enabled} {} {Enable the remote admin interface?} {true false} false
; enabled = false
;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0
;; Set this to a nonzero value to have remote admin use a different port
; port = 0
;# {access_password} {enabled:true} {Password for the remote admin interface} {}
;; This password is required to make any XMLRPC call (should be set as
;; the "password" parameter)
; access_password = ""
;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false
;; set this variable to true if you want the create_region XmlRpc
;; call to unconditionally enable voice on all parcels for a newly
;; created region
; create_region_enable_voice = false
;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false
;; set this variable to false if you want the create_region XmlRpc
;; call to create all regions as private per default (can be
;; overridden in the XmlRpc call)
; create_region_public = false
;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all
;; enable only those methods you deem to be appropriate using a | delimited
;; whitelist.
;; For example:
;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml
;; if this parameter is not specified but enabled = true, all methods
;; will be available
; enabled_methods = all
;; specify the default appearance for an avatar created through the remote
;; admin interface
;; This will only take effect is the file specified by the
;; default_appearance setting below exists
; default_male = Default Male
; default_female = Default Female
;; Update appearance copies inventory items and wearables of default
;; avatars. if this value is false, just worn assets are copied to the
;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.
;; The receiver will wear the same items the default avatar did wear.
; copy_folders = false
;; Path to default appearance XML file that specifies the look of the
;; default avatars
; default_appearance = default_appearance.xml
[Wind]
;# {enabled} {} {Enable wind module?} {true false} true
;; Enables the wind module.
; enabled = true
;# {wind_update_rate} {enabled:true} {Wind update rate in frames?} {} 150
;; How often should wind be updated, as a function of world frames.
;; Approximately 50 frames a second
wind_update_rate = 150
;; The Default Wind Plugin to load
; wind_plugin = SimpleRandomWind
;; These settings are specific to the ConfigurableWind plugin
;; To use ConfigurableWind as the default, simply change wind_plugin
;; to ConfigurableWind and uncomment the following.
; avg_strength = 5.0
; avg_direction = 0.0
; var_strength = 0.0
; var_direction = 0.0
; rate_change = 1.0
;# {strength} {enabled:true wind_plugin:SimpleRandomWind} {Wind strength?} {} 1.0
;; This setting is specific to the SimpleRandomWind plugin
;; Adjusts wind strength. 0.0 = no wind, 1.0 = normal wind.
; strength = 1.0
[LightShare]
;# {enable_windlight} {} {Enable LightShare technology?} {true false} false
;; This enables the transmission of Windlight scenes to supporting clients,
;; such as the Meta7 viewer.
;; It has no ill effect on viewers which do not support server-side
;; windlight settings.
;; Currently we only have support for MySQL databases.
enable_windlight = true
[DataSnapshot]
;# {index_sims} {} {Enable data snapshotting (search)?} {true false} false
;; The following set of configs pertains to search.
;; Set index_sims to true to enable search engines to index your
;; searchable data.
;; If false, no data will be exposed, DataSnapshot module will be off,
;; and you can ignore the rest of these search-related configs.
index_sims = true
;# {data_exposure} {index_sims:true} {How much data should be exposed?} {minimum all} minimum
;; The variable data_exposure controls what the regions expose:
;; minimum: exposes only things explicitly marked for search
;; all: exposes everything
data_exposure = minimum
;# {gridname} {index_sims:true} {Enter the name fo your grid} {} OSGrid
;; If search is on, change this to your grid name; will be ignored for
;; standalones
gridname = "name_of_your_grid"
;# {default_snapshot_period} {index_sims:true} {Period between data snapshots?} {} 1200
;; Period between data snapshots, in seconds. 20 minutes, for starters,
;; so that you see the initial changes fast.
;; Later, you may want to increase this to 3600 (1 hour) or more
default_snapshot_period = 1200
;; This will be created in bin, if it doesn't exist already. It will hold
;; the data snapshots.
snapshot_cache_directory = "DataSnapshot"
;# {data_services} {index_sims:true} {Data service URLs to register with?} {} http://metaverseink.com/cgi-bin/register.py
; This semicolon-separated string serves to notify specific data services
; about the existence of this sim. Uncomment if you want to index your
; data with this and/or other search providers.
; data_services="http://metaverseink.com/cgi-bin/register.py"
data_services="http://domain_name_you_created_on_dyndns.org_to_enable_dynamic_dns.dyndns.org:9000/register.php"
[Search]
SearchURL = http://domain_name_you_created_on_dyndns.org_to_enable_dynamic_dns.dyndns.org:9000/query.php
[Economy]
;; The economy module is not enabled by default and there is no easy,
;; menu controlled way to do this. To enabled this module, insert
;; economymodule = BetaGridLikeMoneyModule
;; into the startup section (at the top of this file).
;; Then configure the options below as needed.
;; Enables selling things for $0
SellEnabled = "true"
;; Money Unit fee to upload textures, animations etc
; PriceUpload = 0
;; Money Unit fee to create groups
; PriceGroupCreate = 0
[XEngine]
;# {Enabled} {} {Enable the XEngine scripting engine?} {true false} true
;; Enable this engine in this OpenSim instance
Enabled = true
;; How many threads to keep alive even if nothing is happening
; MinThreads = 2
;; How many threads to start at maximum load
; MaxThreads = 100
;; Time a thread must be idle (in seconds) before it dies
; IdleTimeout = 60
;# {Priority} {Enabled:true} {Priority for script engine threads?} {Lowest BelowNormal Normal AboveNormal Highest} BelowNormal
;; Thread priority ("Lowest", "BelowNormal", "Normal", "AboveNormal",
;; "Highest")
; Priority = "BelowNormal"
;; Maximum number of events to queue for a script (excluding timers)
; MaxScriptEventQueue = 300
;; Stack size per thread created
; ThreadStackSize = 262144
;; Set this to true (the default) to load each script into a separate
;; AppDomain. Setting this to false will load all script assemblies into the
;; current AppDomain, which will reduce the per-script overhead at the
;; expense of reduced security and the inability to garbage collect the
;; script assemblies
;;
;; If you are on Linux Server keep this set to false
;; If you are on Windows Server set this to true for best performance
AppDomainLoading = false
;# {DefaultCompileLanguage} {Enabled:true} {Default script language?} {lsl vb cs} lsl
;; Default language for scripts
; DefaultCompileLanguage = "lsl"
;# {AllowedCompilers} {Enabled:true} {Languages to allow (comma separated)?} {} lsl
;; List of allowed languages (lsl,vb,cs)
;; AllowedCompilers=lsl,cs,js,vb.
;; *warning*, non lsl languages have access to static methods such as
;; System.IO.File. Enable at your own risk.
; AllowedCompilers = "lsl"
;; Compile debug info (line numbers) into the script assemblies
; CompileWithDebugInformation = true
;; Allow the user of mod* functions. This allows a script to pass messages
;; to a region module via the modSendCommand() function
;; Default is false
; AllowMODFunctions = false
;# {AllowOSFunctions} {Enabled:true} {Allow OSFunctions? (DANGEROUS!)} {true false} false
;; Allow the use of os* functions (some are dangerous)
AllowOSFunctions = true
;# {AllowLightShareFunctions} {Enabled:true [LightShare]enable_windlight:true} {Allow LightShare functions?} {true false} true
; Allow the user of LightShare functions
AllowLightShareFunctions = true
;# {OSFunctionThreatLevel} {Enabled:true AllowOSFunctions:true} {OSFunction threat level? (DANGEROUS!)} {None VeryLow Low Moderate High VeryHigh Severe} VeryLow
;; Threat level to allow, one of None, VeryLow, Low, Moderate, High,
;; VeryHigh, Severe
OSFunctionThreatLevel = VeryLow
;; Time a script can spend in an event handler before it is interrupted
; EventLimit = 30
;; If a script overruns it's event limit, kill the script?
; KillTimedOutScripts = false
;; Sets the multiplier for the scripting delays
; ScriptDelayFactor = 1.0
;; The factor the 10 m distances llimits are multiplied by
; ScriptDistanceLimitFactor = 1.0
;; Maximum length of notecard line read
;; Increasing this to large values potentially opens
;; up the system to malicious scripters
; NotecardLineReadCharsMax = 255
;; Sensor settings
; SensorMaxRange = 96.0
; SensorMaxResults = 16
;; Disable underground movement of prims (default true); set to
;; false to allow script controlled underground positioning of
;; prims
; DisableUndergroundMovement = true
Allow_osGetSimulatorVersion = true
;; Path to script engine assemblies
;; Default is ./bin/ScriptEngines
; ScriptEnginesPath = "ScriptEngines"
[RegionReady]
; Enable this module to get notified once all items and scripts in the region have been completely loaded and compiled
; default is false
enabled = true
; Channel on which to signal region readiness through a message
; formatted as follows: "{server_startup|oar_file_load},{0|1},n,[oar error]"
; - the first field indicating whether this is an initial server startup
; - the second field is a number indicating whether the OAR file loaded ok (1 == ok, 0 == error)
; - the third field is a number indicating how many scripts failed to compile
; - "oar error" if supplied, provides the error message from the OAR load
channel_notify = -800
; - disallow logins while scripts are loading
login_disable = true
; - send an alert as json to a service
; alert_uri = "http://myappserver.net/my_handler/"
[MRM]
;; Enables the Mini Region Modules Script Engine.
; Enabled = false
;; Runs MRM in a Security Sandbox
;; WARNING: DISABLING IS A SECURITY RISK.
; Sandboxed = true
;; The level sandbox to use, adjust at your OWN RISK.
;; Valid values are:
;; * FullTrust
;; * SkipVerification
;; * Execution
;; * Nothing
;; * LocalIntranet
;; * Internet
;; * Everything
; SandboxLevel = "Internet"
;; Only allow Region Owners to run MRMs
;; May represent a security risk if you disable this.
; OwnerOnly = true
[FreeSwitchVoice]
;; In order for this to work you need a functioning FreeSWITCH PBX set up.
;; Configuration details at http://opensimulator.org/wiki/Freeswitch_Module
; Enabled = false
;; You need to load a local service for a standalone, and a remote service
;; for a grid region. Use one of the lines below, as appropriate
;; If you're using Freeswitch on a standalone then you will also need to configure the [FreeswitchService] section in config-include/StandaloneCommon.ini
; LocalServiceModule = OpenSim.Services.FreeswitchService.dll:FreeswitchService
; LocalServiceModule = OpenSim.Services.Connectors.dll:RemoteFreeswitchConnector
;; If using a remote connector, specify the server URL
; FreeswitchServiceURL = http://my.grid.server:8004/fsapi
[FreeswitchService]
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!
;; !!!!!!STANDALONE ONLY!!!!!!
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!
;; The IP address of your FreeSWITCH server. The common case is for this to be the same as the server running the OpenSim standalone
;; This has to be set for the FreeSWITCH service to work
;ServerAddress = 127.0.0.1
;; The following configuration parameters are optional
;; By default, this is the same as the ServerAddress
; Realm = 127.0.0.1
;; By default, this is the same as the ServerAddress on port 5060
; SIPProxy = 127.0.0.1:5060
;; Default is 5000ms
; DefaultTimeout = 5000
;; The dial plan context. Default is "default"
; Context = default
;; Currently unused
; UserName = freeswitch
;; Currently unused
; Password = password
;; The following parameters are for STUN = Simple Traversal of UDP through NATs
;; See http://wiki.freeswitch.org/wiki/NAT_Traversal
;; stun.freeswitch.org is not guaranteed to be running so use it in
;; production at your own risk
; EchoServer = 127.0.0.1+
; EchoPort = 50505
; AttemptSTUN = false
[Groups]
;# {Enabled} {} {Enable groups?} {true false} false
;; Enables the groups module
Enabled = true
;# {Module} {Enabled:true} {Groups module to use? (Use GroupsModule to use Flotsam/Simian)} {} Default
;; This is the current groups stub in Region.CoreModules.Avatar.Groups.
;; All the other settings below only really apply to the Flotsam/SimianGrid
;; GroupsModule.
;; This module can use a PHP XmlRpc server from the Flotsam project at
;; http://code.google.com/p/flotsam/
;; or from the SimianGrid project at http://code.google.com/p/openmetaverse
Module = GroupsModule
;; Service connectors to the Groups Service. Select one depending on
;; whether you're using a Flotsam XmlRpc backend or a SimianGrid backend
;# {ServicesConnectorModule} {Module:GroupsModule} {Service connector to use for groups?} {XmlRpcGroupsServicesConnector SimianGroupsServicesConnector} XmlRpcGroupsServicesConnector
;; The service connector to use for the GroupsModule
ServicesConnectorModule = XmlRpcGroupsServicesConnector
;# {GroupsServerURI} {Module:GroupsModule} {Groups Server URI?} {}
;; URI for the groups services
GroupsServerURI = "http://some_hosted_server_on_the_web.com/osgrid/xmlrpc.php"
;# {NoticesEnabled} {Module:GroupsModule} {Enable group notices?} {true false} true
;; Enable Group Notices
NoticesEnabled = true
;; This makes the Groups modules very chatty on the console.
; DebugEnabled = false
;; Specify which messaging module to use for groups messaging and if it's
;; enabled
MessagingModule = GroupsMessagingModule
MessagingEnabled = true
;; XmlRpc Security settings. These must match those set on your backend
;; groups service.
; XmlRpcServiceReadKey = 1234
; XmlRpcServiceWriteKey = 1234
[PacketPool]
; Enables the experimental packet pool. Yes, we've been here before.
RecyclePackets = true;
RecycleDataBlocks = true;
[InterestManagement]
;# {UpdatePrioritizationScheme} {} {Update prioritization scheme?} {BestAvatarResponsiveness Time Distance SimpleAngularDistance FrontBack} BestAvatarResponsiveness
;; This section controls how state updates are prioritized for each client
;; Valid values are BestAvatarResponsiveness, Time, Distance,
;; SimpleAngularDistance, FrontBack
UpdatePrioritizationScheme = FrontBack
ReprioritizationEnabled = true
[MediaOnAPrim]
;# {Enabled} {} {Enable Media-on-a-Prim (MOAP)} {true false} true
;; Enable media on a prim facilities
Enabled = true;
[PrimLimitsModule]
;# {EnforcePrimLimits} {} {Enforce parcel prim limits} {true false} false
;; Enable parcel prim limits. Off by default to emulate pre-existing behavior.
EnforcePrimLimits = true
[Architecture]
;# {Include-Architecture} {} {Choose one of the following architectures} {config-include/Standalone.ini config-include/StandaloneHypergrid.ini config-include/Grid.ini config-include/GridHypergrid.ini config-include/SimianGrid.ini config-include/HyperSimianGrid.ini} config-include/Standalone.ini
;; Uncomment one of the following includes as required. For instance, to create a standalone OpenSim,
;; uncomment Include-Architecture = "config-include/Standalone.ini"
;;
;; Then you will need to copy and edit the corresponding *Common.example file in config-include/
;; that the referenced .ini file goes on to include.
;;
;; For instance, if you chose "config-include/Standalone.ini" then you will need to copy
;; "config-include/StandaloneCommon.ini.example" to "config-include/StandaloneCommon.ini" before
;; editing it to set the database and backend services that OpenSim will use.
;;
; Include-Architecture = "config-include/Standalone.ini"
; Include-Architecture = "config-include/StandaloneHypergrid.ini"
; Include-Architecture = "config-include/Grid.ini"
; Include-Architecture = "config-include/GridHypergrid.ini"
; Include-Architecture = "config-include/SimianGrid.ini"
; Include-Architecture = "config-include/HyperSimianGrid.ini"
Include-Architecture = "config-include/DivaPreferences.ini"
[Modules]
;;LandServices module is required for ossearch to function properly in grid mode.
LandServices = "RemoteLandServicesConnector"
LandServiceConnector = "True"
[Profile]
; Change it to your own HTTP server to have the Profile server work
Module = "OpenProfileModule"
ProfileURL = http://some_hosted_server_on_the_web.com/osgrid/profile.php
Next we need to look at the file DivaPreferences.ini within the sub-folder /bin/config-include, which i have pasted and modified here so that you can customize it to your needs:
;;
;; Diva's personal preferences
;; Please don't change this file.
;; Instead, override variables in MyWorld.ini
;;
[Startup]
AllowScriptCrossing = true
permissionmodules = "DefaultPermissionsModule"
serverside_object_permissions = true
region_owner_is_god = true
WorldMapModule = "HGWorldMap"
CombineContiguousRegions=true
[DataSnapshot]
index_sims = true
data_exposure = minimum
; 1 hour
default_snapshot_period = 3600
snapshot_cache_directory = "DataSnapshot"
data_services="http://metaverseink.com/cgi-bin/register.py"
[XEngine]
AllowMODFunctions = true
AllowOSFunctions = true
OSFunctionThreatLevel = Moderate
[InterestManagement]
UpdatePrioritizationScheme = BestAvatarResponsiveness
[DatabaseService]
StorageProvider = "Diva.Data.MySQL.dll"
[Modules]
AssetServices = "HGAssetBroker"
InventoryServices = "HGInventoryBroker"
NeighbourServices = "RemoteNeighbourServicesConnector"
AuthenticationServices = "LocalAuthenticationServicesConnector"
GridServices = "LocalGridServicesConnector"
PresenceServices = "LocalPresenceServicesConnector"
UserAccountServices = "LocalUserAccountServicesConnector"
GridUserServices = "LocalGridUserServicesConnector"
SimulationServices = "RemoteSimulationConnectorModule"
AvatarServices = "LocalAvatarServicesConnector"
EntityTransferModule = "HGEntityTransferModule"
InventoryAccessModule = "HGInventoryAccessModule"
AssetCaching = "CenomeMemoryAssetCache"
InventoryServiceInConnector = true
AssetServiceInConnector = true
HypergridServiceInConnector = true
NeighbourServiceInConnector = true
LibraryModule = true
LLLoginServiceInConnector = true
AuthenticationServiceInConnector = true
SimulationServiceInConnector = true
MIImageServiceModule = true
GridInfoServiceInConnector = true
WifiModule = true
[SimulationDataStore]
LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"
[EstateDataStore]
LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService"
[AssetService]
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
AssetLoaderArgs = "assets/AssetSets.xml"
AssetLoaderEnabled = true
; For the AssetServiceInConnector
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
; For HGAssetBroker
LocalGridAssetService = "OpenSim.Services.AssetService.dll:AssetService"
HypergridAssetService = "OpenSim.Services.Connectors.dll:HGAssetServiceConnector"
[InventoryService]
; For HGInventoryBroker
LocalGridInventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
[LibraryService]
LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService"
LibraryName = "OpenSim Library (diva distro)"
DefaultLibrary = "./inventory/Libraries.xml"
[AvatarService]
LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService"
[AuthenticationService]
LocalServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
[AuthorizationService]
LocalServiceModule = "OpenSim.Services.AuthorizationService.dll:AuthorizationService"
[GridService]
StorageProvider = "Diva.Data.MySQL.dll"
; LocalGridServicesConnector needs this
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
AllowHypergridMapSearch = true
AssetService = "OpenSim.Services.AssetService.dll:AssetService"
[PresenceService]
LocalServiceModule = "OpenSim.Services.PresenceService.dll:PresenceService"
[UserAccountService]
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"
;; These are for creating new accounts by the service
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
GridService = "OpenSim.Services.GridService.dll:GridService"
InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
[GridUserService]
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:GridUserService"
[FriendsService]
LocalServiceModule = "OpenSim.Services.FriendsService.dll"
[Friends]
Connector = "OpenSim.Services.FriendsService.dll"
[LoginService]
LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService"
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
GridService = "OpenSim.Services.GridService.dll:GridService"
AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService"
FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService"
SearchURL = "http://search.metaverseink.com/"
[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"
GridService = "OpenSim.Services.GridService.dll:GridService"
AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector"
SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector"
[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"
;; The interface that local users get when they are in other grids
;; This greatly restricts the inventory operations while in other grids
[HGInventoryService]
; For the InventoryServiceInConnector
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGInventoryService"
UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
;; The interface that local users get when they are in other grids
;; This restricts/filters the asset operations from the outside
[HGAssetService]
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGAssetService"
UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
[WifiService]
AvatarAccount_Female = "Female Avatar"
AvatarAccount_Male = "Male Avatar"
AvatarAccount_Neutral = "Neutral Avatar"
AvatarPreselection = "Neutral"
StatisticsUpdateInterval = 60
StatisticsActiveUsersPeriod = 30
[Includes]
Include-Common = "config-include/MyWorld_laptop.ini"
; Include-Common = "config-include/MyWorld_desktop.ini"
IMPORTANT!
You may notice the last two lines where it says “MyWorld_laptop.ini”. This .ini file was created by me, you will NOT find it in the Diva installation.
I used to run this installation on a different computer so i simply duplicated MyWorld.ini, renamed it MyWorld_laptop.ini and MyWorld_desktop.ini, as the two computers had different network addresses and i didn’t want to bother changing things around every time. Now i decided to stick with the laptop file out of laziness, but as long as you keep the file name consistent in the last two lines of your DivaPreferences.ini file, you can rename it anything you like.
Now, not the last, BUT the most important file to look into:
MyWorld_laptop.ini
[Startup]
; SmartThreadPool is reported to work well on Mono/Linux, but
; UnsafeQueueUserWorkItem has been benchmarked with better
; performance on .NET/Windows
async_call_method = UnsafeQueueUserWorkItem
; recommended: false for mono / true for Windows
use_async_when_possible = true
[DatabaseService]
; ### Set the password (again)
ConnectionString = "Data Source=123.45.67.89;Database=name_of_your_database;User ID=username_to_access_your_database;Password=password_to_your_database;Old Guids=true;Allow Zero Datetime=true;"
[Network]
http_listener_port = 9000
[GridService]
Region_Utopia_1 = "DefaultRegion, FallbackRegion"
Gatekeeper = "http://192.168.1.6:8002" ; ### change this to the internal IP of your computer as seen from your router. Leave the port number to 8002 and make sure it'sforwarded by your router ###
[HGInventoryService]
ProfileServerURI = "http://192.168.1.6:8002/profiles"
[HGAssetService]
ProfileServerURI = "http://192.168.1.6:8002/profiles"
[HGInventoryAccessModule]
ProfileServerURI = "http://192.168.1.6:8002/profiles"
;; If you want to protect your assets from being copied by foreign visitors
;; uncomment the next line. You may want to do this on sims that have licensed content.
; OutboundPermission = False
[DataSnapshot]
gridname = "Utopia"
[LoginService]
WelcomeMessage = "Welcome to Utopia!"
GatekeeperURI = "http://192.168.1.6:8002"
SRV_HomeURI = "http://192.168.1.6:8002"
SRV_InventoryServerURI = "http://192.168.1.6:8002"
SRV_AssetServerURI = "http://192.168.1.6:8002"
SRV_ProfileServerURI = "http://192.168.1.6:8002"
[GatekeeperService]
ExternalName = "http://192.168.1.6:8002"
AllowTeleportsToAnyRegion = false
[GridInfoService]
login = http://192.168.1.6:8002/
gridname = "Utopia"
gridnick = "utopia"
welcome = http://192.168.1.6:8002/wifi/welcome.html
register = http://192.168.1.6:8002/wifi/user/account
password = http://192.168.1.6:8002/wifi/forgotpassword
[WifiService]
GridName = "Utopia"
LoginURL = "http://192.168.1.6:8002"
WebAddress = "http://192.168.1.6:8002"
;; The Wifi Administrator account
;; WIFI is your web interface that you can access from a browser. You can use it to create, manage and delete users and to monitor the status of your grid
;; If your initial installation went OK, there should be already your info in the following lines, otherwise you can set your admin info in here.
AdminFirst = "first_name"
AdminLast = "last_name"
AdminEmail = "admin@email.com"
AdminPassword = "password"
;; Do you want to be able to control grid registrations?
AccountConfirmationRequired = false
;; Variables for your mail server
;; Users will get email notifications from this account.
SmtpHost = "smtp.youremailserver.com"
SmtpPort = "110"
SmtpUsername = "admin@email.com"
SmtpPassword = "password"
Finally: your region.ini file located within /bin/regions/
Within this file you will find the configuration for all the regions you created during the initial setup.
It is recommended to create regions using the grind console. Look at the console window where you run OpenSim.32launch.exe and if you can see root:, that’s your console. Refer to http://opensimulator.org for console commands you can use to create regions.
; * Regions configuration file
; * This is Your World
[Name of your first region]
RegionUUID = "11111111-2222-3333-4444-555555555550"
Location = "5000,5000"
InternalAddress = "0.0.0.0"
InternalPort = 9000
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"
[Name of your second region]
RegionUUID = "11111111-2222-3333-4444-555555555551"
Location = "5000,5001"
InternalAddress = "0.0.0.0"
InternalPort = 9001
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"
[Name of your third region]
RegionUUID = "11111111-2222-3333-4444-555555555552"
Location = "5001,5000"
InternalAddress = "0.0.0.0"
InternalPort = 9002
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"
[Name of your fourth region]
RegionUUID = "11111111-2222-3333-4444-555555555553"
Location = "5001,5001"
InternalAddress = "0.0.0.0"
InternalPort = 9003
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"
The profiles and Groups problem
Here is one thing i have been battling with for a while before getting it right. There is a few files that need to be downloaded separately for Groups and Profiles to work properly, and they must be hosted on a web server. I tried to make it work locally, but in the end i gave in and just uploaded it on my website and pointed to them from opensim.ini
If you haven’t copied my opensim.ini, here is the lines you have to add right at the bottom of it:
[Profile]
; Change it to your own HTTP server to have the Profile server work
Module = "OpenProfileModule"
ProfileURL = http://your server.com/path_to_the_profiles_folder/profile.php
go to: http://code.google.com/p/flotsam/wiki/XmlRpcGroups and get the latest version of xmlrpc, and upload the entire folder structure that comes packed with xmlrpc onto a web server.
One more very important step:
Open your “MyWorld.ini”, or whatever file is specified within DivaPreferences.ini, and make sure you add this line under Modules:
LandServices = "RemoteLandServicesConnector"
The above line is the one thing likely to keep you from pulling your hair out for a week wandering why none of your groups and profiles work and why the XML-RPC groups module keeps spitting out red and yellow text in your console.
modify the line: ProfileURL above to point to the location of profile.php on the web server that’s online.
Now you should be good to go and able to create personal profiles and groups within your grid.
What are UUID’s?
Everything that exists within your grid is individually defined with what is called a Universally Unique Identifier or UUID. This is a 128 bit (16 characters) string. This identifier number can be seen in several instances while being logged into the simulation grid. It is associated with users, objects, regions, textures, media, and everything that is allowed into the grid. No two UUID’s can be the same on the same grid, and at any rates, the grid itself auto-generates different UUID’s for new items matching them with already existing UUID’s present on the MySQL tables the grid is connected to.
Now, the REAL fun begins
Once you have done your share of studying the basics from opensimulator.org, as well as having followed the instructions on this article, you should be now ready to launch your grid, and take it for a test drive.
open a console on your desktop, navigate to your /bin folder and run OpenSim.32bitlaunch.exe
If everything is good, there shouldn’t be any red text at all. Starting up your grid could take anywhere from a few seconds to several minutes.
Welcome to the Grid
At this point i assume you are now ready to explore your newly created world.
Your new grid can be accessed through a viewer that can be downloaded online and installed on PC, Mac or Unix/Linux platforms. Limited, text-only applications can be used to access your grid from portable devices like web-enabled tablets and mobile smartphones. The recommended and easiest client to download and configure for easy access of your grid is called Imprudence, and can be found at the following link:http://wiki.kokuaviewer.org/wiki/Downloads
Configuration of Imprudence
1. This document assumes knowledge of basic installation of programs and application on your platform. Once the installation of Imprudence is complete, run Imprudence. You should see the following screen (click on the picture for full size):

2. Click Grid Manager at the bottom of the screen just below the Grid pull down menu item. The Grid Manager Dialog box will appear:

3.Under the Select a Grid box, click Add New Grid. A blank form will appear:

4. In Grid Name type the name of your grid.
5. In Login URI paste the following: http://change_to_your_grid_url.com:9000
6. In Login Page paste the following: http://change_to_your_grid_url.com:9000/wifi/
7. Leave any other field blank, they will be populated automatically.
8. Click Apply to save your settings and OK to close the dialog box.
9. From the Grid pull down menu, select Utopia and fill in the First name, Last name and password you created for your admin avatar, and click Login.
At this point if everything is good, you should be able to login successfully into your grid. In the next article I’m planning to spend a bit of time explaining how to manage and interact with your grid, how to re-design your landscape, build and most importantly, how to establish acceptable policies of conduct for your visitors.