<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=UlyssesHirvi</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=UlyssesHirvi"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/UlyssesHirvi"/>
		<updated>2026-04-21T10:30:05Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/User:UlyssesHirvi</id>
		<title>User:UlyssesHirvi</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:UlyssesHirvi"/>
				<updated>2009-02-02T21:09:26Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: about me&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Well here some details about the guy behind Ulysses, member of Hirvi.&lt;br /&gt;
The guy is:&lt;br /&gt;
- experienced in sl (2years +)&lt;br /&gt;
- Linux user&lt;br /&gt;
- mainframe system programmer and whatever you want to call it&lt;br /&gt;
&lt;br /&gt;
- running regions connected to OSgrid&lt;br /&gt;
- running an own grid (remote accessible) and allowing a hyper-link from OSgrid (look for Port2Hirvi)&lt;br /&gt;
- running from build (svn) source&lt;br /&gt;
- saving trouble &amp;amp; electricity, so not up all the time&lt;br /&gt;
&lt;br /&gt;
Main interest is the architecture of all this virtual world that is going on and&lt;br /&gt;
- willing to test&lt;br /&gt;
- willing to document (I did some additions to the Wiki)&lt;br /&gt;
- getting crazy about the arguments/parm/configuration of OpenSim&lt;br /&gt;
 - separated ./regions/&lt;br /&gt;
 - separated penSim.ini&lt;br /&gt;
 - still wondering about the .xml's&lt;br /&gt;
&lt;br /&gt;
contact in world or ulysses.hirvi at gmail.com&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid</id>
		<title>Hypergrid</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid"/>
				<updated>2009-01-29T22:30:17Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: /* Linking regions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The OpenSim Hypergrid==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is the hypergrid? ===&lt;br /&gt;
&amp;lt;!-- [[image:VWV.jpg|250px|thumb|Web of Virtual Worlds]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The hypergrid is an extension to opensim that allows you to link your opensim to other opensims on the internet, and that supports seamless agent transfers among those opensims. It can be used both in standalone mode and in grid mode. The hypergrid is effectively supporting the emergence of a Web of virtual worlds. &lt;br /&gt;
&lt;br /&gt;
The basic idea for the hypergrid is that region/grid administrations can place hyperlinks on their map to hypergrided regions run by others. Once those hyperlinks are established, users interact with those regions in exactly the same way as they interact with local regions. Specifically, users can choose to teleport there. Once the user reaches the region behind the hyperlink, she is automatically interacting with a different virtual world without having to logout from the world where she came from, and while still having access to her inventory.&lt;br /&gt;
&lt;br /&gt;
The hypergrid started as a GForge project, but it is now included in the standard distribution of OpenSim. To run your OpenSim instance in hypergrid mode, please see [[Hypergrid#Installing_and_Running_Hypergrid|Installing and Running]].&lt;br /&gt;
&lt;br /&gt;
=== Virtual World Hyperlinks ===&lt;br /&gt;
[[image:hghyperlink.jpg|250px|thumb|A Virtual World Hyperlink]]&lt;br /&gt;
&lt;br /&gt;
We're all familiar with hypertext links on the Web. But what is a virtual world hyperlink?&lt;br /&gt;
&lt;br /&gt;
In the hypergrid model, we consider the 2D map of the virtual world as the equivalent of a web page. As such, a VW hyperlink is simply a region on that map. &lt;br /&gt;
&lt;br /&gt;
The default model of opensim-based virtual worlds already supports this concept of hyperlink, to some extent. When you teleport from one region to another via the map, chances are you are migrating your agent into a different opensim server. This migration is a glorified &amp;quot;agent transfer&amp;quot; that also exists, in rudimentary form, on the web when hypertext links are followed. The default model, however, imposes two very strong constraints on these hyperlinks: &lt;br /&gt;
# The entire map of regions is controlled by a central service known as the grid service, whose job is to provide a uniform view of the world to all of its regions.&lt;br /&gt;
# The only agents that can be transferred are those pertaining to users known to another central service, the user service; if the incoming user is not on that service's database, the agent transfer doesn't go through.&lt;br /&gt;
&lt;br /&gt;
The hypergrid simply removes these two constraints. &lt;br /&gt;
&lt;br /&gt;
First, it allows individual opensim instances to add &amp;quot;neighbors&amp;quot; to their local map, shifting the control of the map down from the grid server to individual opensim instances (although hyperlinks can also be served by grid servers if grid admins so wish). In doing so, the world becomes a lot more interesting and varied. The map that you see in one opensim instance may be completely different from the map that you see after you teleport via an hyperlink. As an opensim administrator, you are free to define what other opensims you want to see on your map.&lt;br /&gt;
&lt;br /&gt;
Second, it allows the transfer of agents pertaining to foreigner users, i.e. users who are registered elsewhere. Instead of assuming one central user service, the hypergrid assumes an arbitrarily large number of such services distributed all over the world. As such, when agents are transferred among hypergrided opensims, a lot more information is passed about the corresponding user. That information includes the collection of servers that the transferring user needs.&lt;br /&gt;
&lt;br /&gt;
=== Usage Scenarios ===&lt;br /&gt;
&lt;br /&gt;
The following are some usage scenarios. There isn't a clear separation between these scenarios, there's a large overlap between them. This is also not an exhaustive list. The purpose of these descriptions is to give you some starting ideas for how to use the hypergrid in practice. Please feel free to add other interesting scenarios to this list.&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoA.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Personal Worlds'''&lt;br /&gt;
&lt;br /&gt;
This first scenario pertains to standalone opensims. Normally, standalones are completely disconnected from the internet. However, when run in hypergrid mode, standalones become network-able. As such, you can run your own world in your own computer, and link your world to whoever you want. For example, you can link to your friends' hypergrided opensims and to hypergrid gateways in open grids such as OSGrid. &lt;br /&gt;
&lt;br /&gt;
The great thing about this scenario is that all of your assets are stored on your computer, and not on somebody else's server. You can back them up using ordinary backend tools. The not so great thing about this scenario is that all of your assets are stored on your computer! If your disk goes berserk, you loose them. (so make sure you make external backups regularly)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoB.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Communities'''&lt;br /&gt;
&lt;br /&gt;
This second scenario is about communities, broadly construed. The idea here is that a group of people come together to support a small community grid, i.e. a common world where shared activities take place. But at the same time, the members of the community maintain their own standalone worlds. The standalones link to the community grid, and the community grid may link back to the individual members' worlds and other places of interest.&lt;br /&gt;
&lt;br /&gt;
The members' identities are probably the identities they have on their standalones, and their assets are also probably stored there. The assets present in the community regions, however, are stored on the grid asset server.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoC.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Grid Public Regions'''&lt;br /&gt;
&lt;br /&gt;
Walled-gardens are here to stay, and they serve many useful purposes. There is a hybrid mode for the hypergrid that some walled-garden grid operators may be interested in supporting. In this hybrid mode, most opensim instances on the grid run in normal, wall-garden mode, so no foreign visitors are allowed there - technically it is impossible to reach them. However, a few opensim instances on that grid can run in hypergrid mode, so that foreign visitors are allowed. This way, there is a gateway for grid-local users and arbitrary visitors to meet. This is also a good strategy for attracting new users to the grid, since random users are able to visit those gateway regions without having to sign up for an account upfront.&lt;br /&gt;
&lt;br /&gt;
This hybrid mode is very similar to what happens on the web. For example, anyone can visit Facebook's public pages without having to sign up for a Facebook account. However, only Facebook users can go further inside.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoD.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Level Games'''&lt;br /&gt;
&lt;br /&gt;
The normal version of OpenSim enforces a common map for all the regions on a grid. The hypergrid removes that constraint. As such, it becomes easy to design VW games where the world looks different depending of where the player is. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Security Concerns ==&lt;br /&gt;
&lt;br /&gt;
There is a wide-spread assumption that open grids such as OSGrid and new forms of grids such as the hypergrid are inherently insecure, and that it will be impossible to develop a &amp;quot;goods-based&amp;quot; economy on top of them; only walled-gardens can be secured. This is both true and false. While it is true with the current state of things, open grids, whatever their form, can be made as secure as the web. The first step towards that is to define exactly what the security threats are, and how they affect (or not) open and closed grids. So, let's spell them out, and face them head-on. This will help put our feet on the ground so that we start developing appropriate solutions.&lt;br /&gt;
&lt;br /&gt;
=== Malicious Clients ===&lt;br /&gt;
&lt;br /&gt;
==== CopyBots ====&lt;br /&gt;
&lt;br /&gt;
Everyone knows about the infamous [http://en.wikipedia.org/wiki/CopyBot CopyBot]. Using libraries such as [http://www.libsecondlife.org/wiki/Main_Page LibSL] (now known as OpenMetaverse) it is possible to develop clients for opensim servers that do unorthodox things such as bypassing the permissions system to copy people's assets. Bots written by griefers can do lots of other nasty things.&lt;br /&gt;
&lt;br /&gt;
Malicious bots are a problem for all opensim administrators, including walled-garden grids. They can be prevented, to a certain extent, by exo-technical solutions such as Terms of Service and real-world lawsuits. Technically speaking, the only way to keep intruders out is to run opensim inside a firewall, pretty much like all other pieces of client/server software out there. If that's an acceptable solution for your case, you should do it.&lt;br /&gt;
&lt;br /&gt;
Unfortunately firewalls also keep the public out, and most opensim operators, even the ones running walled-garden grids, want to reach out to the public. In this case, opensim operators may develop additional technical obstacles for bots, similar to those we see on the Web. For example, make sure agents are being run by real people by giving them a human-challenge during the login/TP process, etc.&lt;br /&gt;
&lt;br /&gt;
Every obstacle to malicious clients lowers the risk of an intruder attack. However keep this in mind: no matter how many obstacles one builds, a sufficiently skilled and motivated attacker will be able to overcome them to penetrate opensims connected to the public internet. This affects hypergrid nodes as much as walled-garden grids. In fact, it's more pervasive than that: it affects '''all''' servers (opensim, web, etc.) connected to the public internet. Fighting malicious intruders is a fact of a connected world. Fortunately, those attacks don't happen very often, or the Web would have been dead by now.&lt;br /&gt;
&lt;br /&gt;
==== Web Clients ====&lt;br /&gt;
&lt;br /&gt;
CopyBots are the most well-known bots for opensim-based virtual worlds, but these virtual worlds are also susceptible to attacks by regular web clients. With the current state of things, it is actually easier to copy assets with a web-based client than with a libsl-based one. The weakness is that asset servers are connected to the public internet, and the protocol for interacting with them is public. &lt;br /&gt;
&lt;br /&gt;
OpenSim has some minimal guards in place to fence against these kinds of attacks. Specifically, when the inventory server receives a request for an item, it checks the session identifier of the requester. Web clients aren't logged in, so they are refused service. I don't want to expand much more on this, so not to make life easy for attackers, but let's just say that opensim has the necessary mechanisms in place to fence off web-based attackers.&lt;br /&gt;
&lt;br /&gt;
=== Malicious Hosts ===&lt;br /&gt;
&lt;br /&gt;
==== Actively Malicious Hosts ====&lt;br /&gt;
&lt;br /&gt;
The new security threat introduced by openness, one that does not exist in closed grids, is the possibility of a user to visit a region that is running malicious code. In the current state of opensim, a malicious host can do serious damage to the user's assets. Let's see how.&lt;br /&gt;
&lt;br /&gt;
Assume you have your assets in your hypergrided-standalone opensim, and you go visit another opensim that happens to be running malicious code. Here is a non-exhaustive list of vulnerabilities that you are exposed to:&lt;br /&gt;
&lt;br /&gt;
* The host has your session id, so it can request your inventory items on your behalf and store copies in its local asset server. To add insult to injury, a malicious host could simply wipe out your inventory after having copied it.&lt;br /&gt;
* Even if the malicious host doesn't access your items by itself, every time you access items in your inventory while you are in that region, those items are cached in the region's local cache, and can be stored persistently by the malicious host.&lt;br /&gt;
&lt;br /&gt;
Malicious hosts can do a lot more damage, but those two are enough to illustrate this new kind of vulnerability affecting open grids. Note that this affects all open grids, i.e. those where arbitrary people can plug-in their opensims, and not just the hypergrid.&lt;br /&gt;
&lt;br /&gt;
Fortunately, there is a family of simple solutions to this problem that can be summarized as &amp;quot;protecting you from yourself.&amp;quot; That proposal is described [[Hypergrid Inventory Access|here]].&lt;br /&gt;
&lt;br /&gt;
==== Piracy ====&lt;br /&gt;
&lt;br /&gt;
A second new security threat affecting open grids is one pertaining to commerce of virtual goods. Suppose you put something out for sale on your hypergrided opensim. A foreign user comes and buys it. What that really means is that that user will physically get a copy of the assets moved to his/her asset server, which is different from your asset server. The permissions will be whatever you define them to be, and using the regular VW client, that user can only do what you defined he/she should could do with the object, as usual. However, if the user has direct backend access to the asset and inventory servers, that person can simply modify the permissions on his/her copy. This is commonly known as '''piracy'''.  (This is also a problem with programmers who have direct access to the cache that their client keeps; in this case, the only thing that needs to be done to enable piracy is for the user to actually see a texture/animation/in-world object.  This does NOT allow scripts to be copied, though, since the script is only interpreted on the server and is never sent for interpretation by the client.)&lt;br /&gt;
&lt;br /&gt;
This situation is the kernel of the belief that open grids are hopeless for a virtual-goods economy. DRM discussion aside, maybe they are hopeless. But then, everyone thought the web was hopeless for selling music, and look at the success of iTunes in spite of all the piracy that still exists out there. Who will be the equivalent of iTunes for virtual hair, skin and clothes?&lt;br /&gt;
&lt;br /&gt;
== Hypergrid Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Hyperlinks and Agent Transfers ===&lt;br /&gt;
&lt;br /&gt;
When you establish a link between your opensim and another, a message is sent out to that other opensim requesting information about it; the required information includes the network information of that opensim host, and the coordinates of its first region on its local grid in the form of a region handle. For example, suppose you are linking node X.com:9000, placing it in your local map at 900, 900. That opensim runs one or more regions that likely are not in 900, 900 on their own map; suppose the first region of that opensim is at 1100, 1100. From your point of view, it doesn't matter what those other coordinates are, and you don't need to know -- that's the key to being able to decentralize the &amp;quot;world&amp;quot; as given by a 2D map; you want to place it in your map at 900, 900. The &amp;quot;true&amp;quot; position of that simulator only matters for the LL viewer, when there are teleports between your world and that other opensim. This mapping between coordinate systems is the essence of  hyperlinks for opensim; it's one simple but critical thing that the hypergrid implementation does. The mapping happens on the TeleportFinish event; instead of sending the local coordinates to the viewer, the hypergrid teleport wrapper sends the remote coordinates.&lt;br /&gt;
&lt;br /&gt;
When an agent teleports through that hyperlink the following happens. First, before InformRegionOfChildAgent, the local opensim notifies the remote opensim of this foreign user via the &amp;quot;expect_hg_user&amp;quot; method. That message sends along the addresses of all the servers that this user uses, i.e. user, inventory and asset servers. The remote opensim places an entry for that user in its local user profile cache but not in its user database; the foreign user information is non-persistent. After that, the teleport process is exactly the same as the normal teleport process; the only difference is that the region handles are switched between the remote region's hyperlink position on the local grid and its actual position on its grid. &lt;br /&gt;
&lt;br /&gt;
In summary, the two new concepts introduced by the hypergrid are the concept of an hyperlink and the concept of a &amp;quot;local user&amp;quot; vs. &amp;quot;foreign user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Inventory Access ===&lt;br /&gt;
&lt;br /&gt;
Inventory access from abroad is done by wrapping the existing scene-inventory interactions with additional code that gets or posts inventory assets from/to the user's asset server. When inventory is accessed, the hypergrid wrapper checks if the user is foreign and, if she is, the wrapper simply brings the necessary assets from the user's asset server to the local asset cache and server; from then on, the wrapper passes the control to the existing inventory access functions. When something is added to inventory, the hypergrid wrapper is notified via an event, and posts the assets to the user's asset server. A cache of the exchanged item identifiers is maintained so that they aren't brought back over and over again.&lt;br /&gt;
&lt;br /&gt;
The result is that hypergrided opensim instances end up interacting with several asset servers, instead of just one. That interaction is implemented in a straightforward manner by instantiating several GridAssetClient objects, instead of just one.&lt;br /&gt;
&lt;br /&gt;
=== The Hypergrid Namespace ===&lt;br /&gt;
&lt;br /&gt;
Currently, the hypergrid is implemented outside of the OpenSim namespace, so that there is complete separation between what already exists and this new behavior. It has its own namespace, HyperGrid. In it, there are 4 sub-namespaces that follow directly the software architecture of OpenSim, namely:&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Framework''' extends OpenSim.Framework in the following manner:&lt;br /&gt;
** HGUserProfileData extends UserProfileData by introducing information about the user's &amp;quot;home&amp;quot;, namely the home address, port and remoting port. The user's home is not that user's user service; it's the opensim that the user has defined to be her home. This is necessary for supporting the home jump (Ctrl-Shift-H).&lt;br /&gt;
** HGNetworkServersInfo follows the spirit of NetworkServersInfo, although it neither extends it nor uses it. For now, it's a utility class whose two main functions are to convert domain names of servers to IP addresses, and to uniformly provide the answer to the question bool IsLocalUser(...).&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Environment''' extends OpenSim.Region.Environment.Scenes in the following manner:&lt;br /&gt;
** HGSceneCommunicationService extends SceneCommunicationService, overriding RequestTeleportToLocation. There are two very small but critical changes to the base method: (a) on the TeleportFinish event, we switch the region handles when the destination region is an hyperlink; (b) the connections at the end are always closed for hyperlink TPs.&lt;br /&gt;
** HGScene extends Scene, overriding TeleportClientHome(...). The only change to the base method is to stay away from the user server, for now, because the user service is still not completely wrapped up for foreign users. Once the user service is properly wrapped up, this class will become unnecessary.&lt;br /&gt;
** HGScene.Inventory is a partial class of HGScene, just like what happens in the OpenSim framework. This part of HGScene overrides some inventory-scene interaction methods, so that assets are fetched/posted from/to the user's asset server. Once that extra fetching/posting is done, these methods simply pass the ball to the base methods.&lt;br /&gt;
** HGAssetMapper: this is a new class specific to the hypergrid that manages the fetching and posting of assets between foreign regions where the user is and the user's asset server.&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Protocol''' is a mashup of OpenSim.Region.Communications.*. This is the place where most of the hypergrid extension lies. One of the reasons for this is that the hypergrid communications part is doing one additional thing: it is making standalones network-able.&lt;br /&gt;
** HGCommunicationsStandalone extends CommuniationsLocal. Just as its base, it is a hub for the several network services available in standalone mode. The main difference is that those services are extensions of what's in OpenSim.&lt;br /&gt;
** HGCommunicationsGridMode extends CommunicationsManager directly. Again, it's a hub for the network services available in grid mode, those services being extensions of OpenSim.&lt;br /&gt;
** The cluster HGGridServices (superclass), HGGridServicesStandalone and HGGridServicesGridMode (subclasses) implements the OpenSim interfaces IGridServices and IInterRegionCommunications. The 2 subclasses are wrappers for LocalBackEndServices and OGS1GridServices, respectively. There is one common pattern throughout these classes: check if the region to talk to is an hyperlink; if it's not, simply delegate the work to LocalBackEndServices/OGS1GridServices; if it is, push the work to the base class HGGridServices. HGGridServices, in turn, does the management of hyperlink regions, and defines two additional pieces of inter-region protocol:&lt;br /&gt;
*** region_uuid: for linking regions&lt;br /&gt;
*** expect_hg_user: similar to the existing expect_user interface, but with a lot more information about the user being passed around, namely all the user's servers (inventory, asset, user, home, etc.)&lt;br /&gt;
** HGInventoryService extends LocalInventoryService and implements ISecureInventoryService. This class is the most obvious mashup of the pack, mixing local service access for standalone users and remote inventory access for when users are out and about. Right now, there is a fair amount of selective copy-and-paste, to stay away from the ugliness coming from OGS1InventoryService and OGS1SecureInventoryService. HGInventoryService is always a ISecureInventoryService. Its methods all follow the same pattern: check if the user is a local standalone user; if it is, pass the work to the base method (in LocalInventoryService); if it's not perform secure remote access.&lt;br /&gt;
** HGUserServices wraps OSG1UserServices, but it's not functional yet.&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Modules''' is a collection of 3 region modules:&lt;br /&gt;
** HGWorldMapModule extends WorldMapModule. It reuses almost everything from the base class. The only small change is in RequestMapBlocks, where it tries to send Offline mapblocks to the client.&lt;br /&gt;
** HGStandaloneInventoryService and HGStandaloneAssetService do what their names say. They are region modules that allow access to inventory and assets for standalones, when the standalone user is out and about. In spirit, there is a lot in common between these modules and the REST inventory/asset plugin. Unfortunately, that plugin could not be used because it defines a completely different interface than that used by existing inventory and asset servers, and the access for the hypergrid must use a consistent interface.&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[image:HypergridImplementation.jpg|600px|center|(Click on the image to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing and Running Hypergrid ==&lt;br /&gt;
&lt;br /&gt;
=== Installing ===&lt;br /&gt;
&lt;br /&gt;
# Checkout OpenSim, prebuild and build as normal.&lt;br /&gt;
# Make the following changes to your OpenSim.ini:&lt;br /&gt;
#* The map: '''WorldMapModule = &amp;quot;HGWorldMap&amp;quot; ''' If you didn't have this setting in your original OpenSim.ini, make sure you place it under the [Startup] section.&lt;br /&gt;
#* If you're running your opensim in grid mode with the UGAIM servers on other machines, you're done. If you're running in standalone and you want it to be network-able, or if you have your grid on loopback (127.0.0.1) change all the [Network] server addresses to &amp;lt;nowiki&amp;gt;&amp;quot;http://&amp;lt;external_host_name&amp;gt;:&amp;lt;http_port&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;. See below.&lt;br /&gt;
# Run opensim like this: &amp;lt;nowiki&amp;gt;[mono] OpenSim.exe -hypergrid=true&amp;lt;/nowiki&amp;gt;. To make sure the hypergrid is running type this on your console: '''link-region'''. If you don't hear anything back, the hypergrid is not properly installed.&lt;br /&gt;
'''[mono] OpenSim.exe -hypergrid=true'''&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Network settings for a standalone:&lt;br /&gt;
&lt;br /&gt;
 [Network]&lt;br /&gt;
 http_listener_port = 9300&lt;br /&gt;
 remoting_listener_port = 9895&lt;br /&gt;
 &lt;br /&gt;
 grid_server_url = http://example.com:9300&lt;br /&gt;
 grid_send_key = null&lt;br /&gt;
 grid_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 user_server_url = http://example.com:9300&lt;br /&gt;
 user_send_key = null&lt;br /&gt;
 user_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 asset_server_url = http://example.com:9300&lt;br /&gt;
 inventory_server_url = http://example.com:9300&lt;br /&gt;
 messaging_server_url = http://example.com:9300&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Network settings for a grided opensim:&lt;br /&gt;
&lt;br /&gt;
 [Network]&lt;br /&gt;
 http_listener_port = 9300&lt;br /&gt;
 remoting_listener_port = 9895&lt;br /&gt;
 &lt;br /&gt;
 grid_server_url = http://example.com:8001&lt;br /&gt;
 grid_send_key = null&lt;br /&gt;
 grid_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 user_server_url = http://example.com:8002&lt;br /&gt;
 user_send_key = null&lt;br /&gt;
 user_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 asset_server_url = http://example.com:8003&lt;br /&gt;
 inventory_server_url = http://example.com:8004&lt;br /&gt;
 ; Port 8005 reserved&lt;br /&gt;
 messaging_server_url = http://example.com:8006&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Important Note'''&lt;br /&gt;
&lt;br /&gt;
Make sure you have a 'home' set. If your home region doesn't exist, the hyperlink TPs may not work. To set your home, go to one of your local regions and &amp;quot;Set Home&amp;quot; from the viewer.&lt;br /&gt;
&lt;br /&gt;
=== Linking regions ===&lt;br /&gt;
'''Method 1:'''&lt;br /&gt;
&lt;br /&gt;
On the console, type for example:&lt;br /&gt;
&lt;br /&gt;
link-region &amp;lt;Xloc&amp;gt; &amp;lt;Yloc&amp;gt; osl2.nac.uci.edu 9006 OSGrid Gateway&lt;br /&gt;
&lt;br /&gt;
* Use Xloc and Yloc that make sense to your world, i.e. close to your regions, but not adjacent.&lt;br /&gt;
* replace osl2.nac.uci.edu and 9006 with the domain name / ip address and the http_listener_port of the simulator where the region is runing you want to link to&lt;br /&gt;
&lt;br /&gt;
'''Method 2:'''&lt;br /&gt;
&lt;br /&gt;
There is also some initial support for reading the links from a xml file.&lt;br /&gt;
&lt;br /&gt;
Use the console command: link-region &amp;lt;URI&amp;gt; [&amp;lt;excludeList&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
The uri can be either the path of a local xml file or a xml document on a http server.&lt;br /&gt;
&lt;br /&gt;
The format of the xml file is:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Nini&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;Region1&amp;quot;&amp;gt; &amp;lt;!-- can be any name but each section should have a different name and have no spaces --&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;xloc&amp;quot; Value=&amp;quot;1002&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;yloc&amp;quot; Value=&amp;quot;1006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalPort&amp;quot; Value=&amp;quot;9006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalHostName&amp;quot; Value=&amp;quot;osl2.nac.uci.edu&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;localName&amp;quot; Value=&amp;quot;OSGrid-Gateway&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;real-xloc&amp;quot; Value=&amp;quot;10222&amp;quot;/&amp;gt; //optional field that gives the region's real location on its home grid&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;real-yloc&amp;quot; Value=&amp;quot;10265&amp;quot; /&amp;gt; //optional field that gives the region's real location on its home grid&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;Region2&amp;quot;&amp;gt; &lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 &amp;lt;/Nini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Note] The section names can be anything you want, but they all should be different and have no spaces in the name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ExcludeList:&lt;br /&gt;
&lt;br /&gt;
The exclude list is a single string paramater with the format: excludeList:&amp;lt;SectionName&amp;gt;[;&amp;lt;SectionName&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
This means that while reading from the xml file any sections that are listed in the excludeList will be ignored and no HyperGrid link created for them.&lt;br /&gt;
&lt;br /&gt;
This could allow, link lists to be created on a webserver that everyone could add their own regions to, and then they just make sure they add their own section name(s) to the exclude list on their own region(s). &lt;br /&gt;
&lt;br /&gt;
So for example, someone might create a editable online list for the up coming OpenSimulator's 2nd birthday. Which might look something like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Nini&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;OSGrid-Party&amp;quot;&amp;gt; &amp;lt;!-- can be any name but each section should have a different name and no spaces --&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;xloc&amp;quot; Value=&amp;quot;1002&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;yloc&amp;quot; Value=&amp;quot;1006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalPort&amp;quot; Value=&amp;quot;9006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalHostName&amp;quot; Value=&amp;quot;osl2.nac.uci.edu&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;localName&amp;quot; Value=&amp;quot;OSGrid-Gateway&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;UCIGrid-Party&amp;quot;&amp;gt; &lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
 &amp;lt;/Nini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I could then add my own region to the list with the section name &amp;quot;MW-Party&amp;quot;. Then when I startup that region that I want to be part of this hypergrid, I use the command: &amp;quot;link-region &amp;lt;URI of xml file&amp;gt; excludeList:MW-Party&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This is so that my region doesn't try to create a hyper link to itself.&lt;br /&gt;
&lt;br /&gt;
*So: upgrade your own grid to which you want to link -the linkee- as above documented for OpenSim.ini.&lt;br /&gt;
*Than the region in p.e. OSGrid is started with hypergrid=true - the linker - and you add the command&lt;br /&gt;
 - link-region X Y your.remote.accessible.grid your-port hyperregionname&lt;br /&gt;
*Be sure to have port (and NAT) all in line. And choose X Y on a free nearby location&lt;br /&gt;
* what I miss a &amp;quot;show-linkers&amp;quot; command&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Important Note'''&lt;br /&gt;
&lt;br /&gt;
Due to a viewer [https://jira.secondlife.com/browse/SVC-2941 bug], you can only TP between regions that are no more than 4096 cells apart in any dimension. What this means in practice is that if you want to link to OSGrid, you must have your own regions reachable from the (10,000; 10,000) point on the map, which is where OSGrid is centered. Place your regions somewhere in the 8,000s or the 12,000s.&lt;br /&gt;
&lt;br /&gt;
== Public Hypergrid Nodes ==&lt;br /&gt;
&lt;br /&gt;
Please see [[Public Hypergrid Nodes]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hypergrid Lists ==&lt;br /&gt;
Please see [[Hypergrid Lists]].&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid</id>
		<title>Hypergrid</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid"/>
				<updated>2009-01-25T19:04:21Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: /* Linking regions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The OpenSim Hypergrid==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is the hypergrid? ===&lt;br /&gt;
&amp;lt;!-- [[image:VWV.jpg|250px|thumb|Web of Virtual Worlds]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The hypergrid is an extension to opensim that allows you to link your opensim to other opensims on the internet, and that supports seamless agent transfers among those opensims. It can be used both in standalone mode and in grid mode. The hypergrid is effectively supporting the emergence of a Web of virtual worlds. &lt;br /&gt;
&lt;br /&gt;
The basic idea for the hypergrid is that region/grid administrations can place hyperlinks on their map to hypergrided regions run by others. Once those hyperlinks are established, users interact with those regions in exactly the same way as they interact with local regions. Specifically, users can choose to teleport there. Once the user reaches the region behind the hyperlink, she is automatically interacting with a different virtual world without having to logout from the world where she came from, and while still having access to her inventory.&lt;br /&gt;
&lt;br /&gt;
The hypergrid started as a GForge project, but it is now included in the standard distribution of OpenSim. To run your OpenSim instance in hypergrid mode, please see [[Hypergrid#Installing_and_Running_Hypergrid|Installing and Running]].&lt;br /&gt;
&lt;br /&gt;
=== Virtual World Hyperlinks ===&lt;br /&gt;
[[image:hghyperlink.jpg|250px|thumb|A Virtual World Hyperlink]]&lt;br /&gt;
&lt;br /&gt;
We're all familiar with hypertext links on the Web. But what is a virtual world hyperlink?&lt;br /&gt;
&lt;br /&gt;
In the hypergrid model, we consider the 2D map of the virtual world as the equivalent of a web page. As such, a VW hyperlink is simply a region on that map. &lt;br /&gt;
&lt;br /&gt;
The default model of opensim-based virtual worlds already supports this concept of hyperlink, to some extent. When you teleport from one region to another via the map, chances are you are migrating your agent into a different opensim server. This migration is a glorified &amp;quot;agent transfer&amp;quot; that also exists, in rudimentary form, on the web when hypertext links are followed. The default model, however, imposes two very strong constraints on these hyperlinks: &lt;br /&gt;
# The entire map of regions is controlled by a central service known as the grid service, whose job is to provide a uniform view of the world to all of its regions.&lt;br /&gt;
# The only agents that can be transferred are those pertaining to users known to another central service, the user service; if the incoming user is not on that service's database, the agent transfer doesn't go through.&lt;br /&gt;
&lt;br /&gt;
The hypergrid simply removes these two constraints. &lt;br /&gt;
&lt;br /&gt;
First, it allows individual opensim instances to add &amp;quot;neighbors&amp;quot; to their local map, shifting the control of the map down from the grid server to individual opensim instances (although hyperlinks can also be served by grid servers if grid admins so wish). In doing so, the world becomes a lot more interesting and varied. The map that you see in one opensim instance may be completely different from the map that you see after you teleport via an hyperlink. As an opensim administrator, you are free to define what other opensims you want to see on your map.&lt;br /&gt;
&lt;br /&gt;
Second, it allows the transfer of agents pertaining to foreigner users, i.e. users who are registered elsewhere. Instead of assuming one central user service, the hypergrid assumes an arbitrarily large number of such services distributed all over the world. As such, when agents are transferred among hypergrided opensims, a lot more information is passed about the corresponding user. That information includes the collection of servers that the transferring user needs.&lt;br /&gt;
&lt;br /&gt;
=== Usage Scenarios ===&lt;br /&gt;
&lt;br /&gt;
The following are some usage scenarios. There isn't a clear separation between these scenarios, there's a large overlap between them. This is also not an exhaustive list. The purpose of these descriptions is to give you some starting ideas for how to use the hypergrid in practice. Please feel free to add other interesting scenarios to this list.&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoA.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Personal Worlds'''&lt;br /&gt;
&lt;br /&gt;
This first scenario pertains to standalone opensims. Normally, standalones are completely disconnected from the internet. However, when run in hypergrid mode, standalones become network-able. As such, you can run your own world in your own computer, and link your world to whoever you want. For example, you can link to your friends' hypergrided opensims and to hypergrid gateways in open grids such as OSGrid. &lt;br /&gt;
&lt;br /&gt;
The great thing about this scenario is that all of your assets are stored on your computer, and not on somebody else's server. You can back them up using ordinary backend tools. The not so great thing about this scenario is that all of your assets are stored on your computer! If your disk goes berserk, you loose them. (so make sure you make external backups regularly)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoB.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Communities'''&lt;br /&gt;
&lt;br /&gt;
This second scenario is about communities, broadly construed. The idea here is that a group of people come together to support a small community grid, i.e. a common world where shared activities take place. But at the same time, the members of the community maintain their own standalone worlds. The standalones link to the community grid, and the community grid may link back to the individual members' worlds and other places of interest.&lt;br /&gt;
&lt;br /&gt;
The members' identities are probably the identities they have on their standalones, and their assets are also probably stored there. The assets present in the community regions, however, are stored on the grid asset server.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoC.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Grid Public Regions'''&lt;br /&gt;
&lt;br /&gt;
Walled-gardens are here to stay, and they serve many useful purposes. There is a hybrid mode for the hypergrid that some walled-garden grid operators may be interested in supporting. In this hybrid mode, most opensim instances on the grid run in normal, wall-garden mode, so no foreign visitors are allowed there - technically it is impossible to reach them. However, a few opensim instances on that grid can run in hypergrid mode, so that foreign visitors are allowed. This way, there is a gateway for grid-local users and arbitrary visitors to meet. This is also a good strategy for attracting new users to the grid, since random users are able to visit those gateway regions without having to sign up for an account upfront.&lt;br /&gt;
&lt;br /&gt;
This hybrid mode is very similar to what happens on the web. For example, anyone can visit Facebook's public pages without having to sign up for a Facebook account. However, only Facebook users can go further inside.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[image:topoD.jpg|400px|left]]&lt;br /&gt;
|&lt;br /&gt;
'''Level Games'''&lt;br /&gt;
&lt;br /&gt;
The normal version of OpenSim enforces a common map for all the regions on a grid. The hypergrid removes that constraint. As such, it becomes easy to design VW games where the world looks different depending of where the player is. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Security Concerns ==&lt;br /&gt;
&lt;br /&gt;
There is a wide-spread assumption that open grids such as OSGrid and new forms of grids such as the hypergrid are inherently insecure, and that it will be impossible to develop a &amp;quot;goods-based&amp;quot; economy on top of them; only walled-gardens can be secured. This is both true and false. While it is true with the current state of things, open grids, whatever their form, can be made as secure as the web. The first step towards that is to define exactly what the security threats are, and how they affect (or not) open and closed grids. So, let's spell them out, and face them head-on. This will help put our feet on the ground so that we start developing appropriate solutions.&lt;br /&gt;
&lt;br /&gt;
=== Malicious Clients ===&lt;br /&gt;
&lt;br /&gt;
==== CopyBots ====&lt;br /&gt;
&lt;br /&gt;
Everyone knows about the infamous [http://en.wikipedia.org/wiki/CopyBot CopyBot]. Using libraries such as [http://www.libsecondlife.org/wiki/Main_Page LibSL] (now known as OpenMetaverse) it is possible to develop clients for opensim servers that do unorthodox things such as bypassing the permissions system to copy people's assets. Bots written by griefers can do lots of other nasty things.&lt;br /&gt;
&lt;br /&gt;
Malicious bots are a problem for all opensim administrators, including walled-garden grids. They can be prevented, to a certain extent, by exo-technical solutions such as Terms of Service and real-world lawsuits. Technically speaking, the only way to keep intruders out is to run opensim inside a firewall, pretty much like all other pieces of client/server software out there. If that's an acceptable solution for your case, you should do it.&lt;br /&gt;
&lt;br /&gt;
Unfortunately firewalls also keep the public out, and most opensim operators, even the ones running walled-garden grids, want to reach out to the public. In this case, opensim operators may develop additional technical obstacles for bots, similar to those we see on the Web. For example, make sure agents are being run by real people by giving them a human-challenge during the login/TP process, etc.&lt;br /&gt;
&lt;br /&gt;
Every obstacle to malicious clients lowers the risk of an intruder attack. However keep this in mind: no matter how many obstacles one builds, a sufficiently skilled and motivated attacker will be able to overcome them to penetrate opensims connected to the public internet. This affects hypergrid nodes as much as walled-garden grids. In fact, it's more pervasive than that: it affects '''all''' servers (opensim, web, etc.) connected to the public internet. Fighting malicious intruders is a fact of a connected world. Fortunately, those attacks don't happen very often, or the Web would have been dead by now.&lt;br /&gt;
&lt;br /&gt;
==== Web Clients ====&lt;br /&gt;
&lt;br /&gt;
CopyBots are the most well-known bots for opensim-based virtual worlds, but these virtual worlds are also susceptible to attacks by regular web clients. With the current state of things, it is actually easier to copy assets with a web-based client than with a libsl-based one. The weakness is that asset servers are connected to the public internet, and the protocol for interacting with them is public. &lt;br /&gt;
&lt;br /&gt;
OpenSim has some minimal guards in place to fence against these kinds of attacks. Specifically, when the inventory server receives a request for an item, it checks the session identifier of the requester. Web clients aren't logged in, so they are refused service. I don't want to expand much more on this, so not to make life easy for attackers, but let's just say that opensim has the necessary mechanisms in place to fence off web-based attackers.&lt;br /&gt;
&lt;br /&gt;
=== Malicious Hosts ===&lt;br /&gt;
&lt;br /&gt;
==== Actively Malicious Hosts ====&lt;br /&gt;
&lt;br /&gt;
The new security threat introduced by openness, one that does not exist in closed grids, is the possibility of a user to visit a region that is running malicious code. In the current state of opensim, a malicious host can do serious damage to the user's assets. Let's see how.&lt;br /&gt;
&lt;br /&gt;
Assume you have your assets in your hypergrided-standalone opensim, and you go visit another opensim that happens to be running malicious code. Here is a non-exhaustive list of vulnerabilities that you are exposed to:&lt;br /&gt;
&lt;br /&gt;
* The host has your session id, so it can request your inventory items on your behalf and store copies in its local asset server. To add insult to injury, a malicious host could simply wipe out your inventory after having copied it.&lt;br /&gt;
* Even if the malicious host doesn't access your items by itself, every time you access items in your inventory while you are in that region, those items are cached in the region's local cache, and can be stored persistently by the malicious host.&lt;br /&gt;
&lt;br /&gt;
Malicious hosts can do a lot more damage, but those two are enough to illustrate this new kind of vulnerability affecting open grids. Note that this affects all open grids, i.e. those where arbitrary people can plug-in their opensims, and not just the hypergrid.&lt;br /&gt;
&lt;br /&gt;
Fortunately, there is a family of simple solutions to this problem that can be summarized as &amp;quot;protecting you from yourself.&amp;quot; That proposal is described [[Hypergrid Inventory Access|here]].&lt;br /&gt;
&lt;br /&gt;
==== Piracy ====&lt;br /&gt;
&lt;br /&gt;
A second new security threat affecting open grids is one pertaining to commerce of virtual goods. Suppose you put something out for sale on your hypergrided opensim. A foreign user comes and buys it. What that really means is that that user will physically get a copy of the assets moved to his/her asset server, which is different from your asset server. The permissions will be whatever you define them to be, and using the regular VW client, that user can only do what you defined he/she should could do with the object, as usual. However, if the user has direct backend access to the asset and inventory servers, that person can simply modify the permissions on his/her copy. This is commonly known as '''piracy'''.  (This is also a problem with programmers who have direct access to the cache that their client keeps; in this case, the only thing that needs to be done to enable piracy is for the user to actually see a texture/animation/in-world object.  This does NOT allow scripts to be copied, though, since the script is only interpreted on the server and is never sent for interpretation by the client.)&lt;br /&gt;
&lt;br /&gt;
This situation is the kernel of the belief that open grids are hopeless for a virtual-goods economy. DRM discussion aside, maybe they are hopeless. But then, everyone thought the web was hopeless for selling music, and look at the success of iTunes in spite of all the piracy that still exists out there. Who will be the equivalent of iTunes for virtual hair, skin and clothes?&lt;br /&gt;
&lt;br /&gt;
== Hypergrid Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Hyperlinks and Agent Transfers ===&lt;br /&gt;
&lt;br /&gt;
When you establish a link between your opensim and another, a message is sent out to that other opensim requesting information about it; the required information includes the network information of that opensim host, and the coordinates of its first region on its local grid in the form of a region handle. For example, suppose you are linking node X.com:9000, placing it in your local map at 900, 900. That opensim runs one or more regions that likely are not in 900, 900 on their own map; suppose the first region of that opensim is at 1100, 1100. From your point of view, it doesn't matter what those other coordinates are, and you don't need to know -- that's the key to being able to decentralize the &amp;quot;world&amp;quot; as given by a 2D map; you want to place it in your map at 900, 900. The &amp;quot;true&amp;quot; position of that simulator only matters for the LL viewer, when there are teleports between your world and that other opensim. This mapping between coordinate systems is the essence of  hyperlinks for opensim; it's one simple but critical thing that the hypergrid implementation does. The mapping happens on the TeleportFinish event; instead of sending the local coordinates to the viewer, the hypergrid teleport wrapper sends the remote coordinates.&lt;br /&gt;
&lt;br /&gt;
When an agent teleports through that hyperlink the following happens. First, before InformRegionOfChildAgent, the local opensim notifies the remote opensim of this foreign user via the &amp;quot;expect_hg_user&amp;quot; method. That message sends along the addresses of all the servers that this user uses, i.e. user, inventory and asset servers. The remote opensim places an entry for that user in its local user profile cache but not in its user database; the foreign user information is non-persistent. After that, the teleport process is exactly the same as the normal teleport process; the only difference is that the region handles are switched between the remote region's hyperlink position on the local grid and its actual position on its grid. &lt;br /&gt;
&lt;br /&gt;
In summary, the two new concepts introduced by the hypergrid are the concept of an hyperlink and the concept of a &amp;quot;local user&amp;quot; vs. &amp;quot;foreign user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Inventory Access ===&lt;br /&gt;
&lt;br /&gt;
Inventory access from abroad is done by wrapping the existing scene-inventory interactions with additional code that gets or posts inventory assets from/to the user's asset server. When inventory is accessed, the hypergrid wrapper checks if the user is foreign and, if she is, the wrapper simply brings the necessary assets from the user's asset server to the local asset cache and server; from then on, the wrapper passes the control to the existing inventory access functions. When something is added to inventory, the hypergrid wrapper is notified via an event, and posts the assets to the user's asset server. A cache of the exchanged item identifiers is maintained so that they aren't brought back over and over again.&lt;br /&gt;
&lt;br /&gt;
The result is that hypergrided opensim instances end up interacting with several asset servers, instead of just one. That interaction is implemented in a straightforward manner by instantiating several GridAssetClient objects, instead of just one.&lt;br /&gt;
&lt;br /&gt;
=== The Hypergrid Namespace ===&lt;br /&gt;
&lt;br /&gt;
Currently, the hypergrid is implemented outside of the OpenSim namespace, so that there is complete separation between what already exists and this new behavior. It has its own namespace, HyperGrid. In it, there are 4 sub-namespaces that follow directly the software architecture of OpenSim, namely:&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Framework''' extends OpenSim.Framework in the following manner:&lt;br /&gt;
** HGUserProfileData extends UserProfileData by introducing information about the user's &amp;quot;home&amp;quot;, namely the home address, port and remoting port. The user's home is not that user's user service; it's the opensim that the user has defined to be her home. This is necessary for supporting the home jump (Ctrl-Shift-H).&lt;br /&gt;
** HGNetworkServersInfo follows the spirit of NetworkServersInfo, although it neither extends it nor uses it. For now, it's a utility class whose two main functions are to convert domain names of servers to IP addresses, and to uniformly provide the answer to the question bool IsLocalUser(...).&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Environment''' extends OpenSim.Region.Environment.Scenes in the following manner:&lt;br /&gt;
** HGSceneCommunicationService extends SceneCommunicationService, overriding RequestTeleportToLocation. There are two very small but critical changes to the base method: (a) on the TeleportFinish event, we switch the region handles when the destination region is an hyperlink; (b) the connections at the end are always closed for hyperlink TPs.&lt;br /&gt;
** HGScene extends Scene, overriding TeleportClientHome(...). The only change to the base method is to stay away from the user server, for now, because the user service is still not completely wrapped up for foreign users. Once the user service is properly wrapped up, this class will become unnecessary.&lt;br /&gt;
** HGScene.Inventory is a partial class of HGScene, just like what happens in the OpenSim framework. This part of HGScene overrides some inventory-scene interaction methods, so that assets are fetched/posted from/to the user's asset server. Once that extra fetching/posting is done, these methods simply pass the ball to the base methods.&lt;br /&gt;
** HGAssetMapper: this is a new class specific to the hypergrid that manages the fetching and posting of assets between foreign regions where the user is and the user's asset server.&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Protocol''' is a mashup of OpenSim.Region.Communications.*. This is the place where most of the hypergrid extension lies. One of the reasons for this is that the hypergrid communications part is doing one additional thing: it is making standalones network-able.&lt;br /&gt;
** HGCommunicationsStandalone extends CommuniationsLocal. Just as its base, it is a hub for the several network services available in standalone mode. The main difference is that those services are extensions of what's in OpenSim.&lt;br /&gt;
** HGCommunicationsGridMode extends CommunicationsManager directly. Again, it's a hub for the network services available in grid mode, those services being extensions of OpenSim.&lt;br /&gt;
** The cluster HGGridServices (superclass), HGGridServicesStandalone and HGGridServicesGridMode (subclasses) implements the OpenSim interfaces IGridServices and IInterRegionCommunications. The 2 subclasses are wrappers for LocalBackEndServices and OGS1GridServices, respectively. There is one common pattern throughout these classes: check if the region to talk to is an hyperlink; if it's not, simply delegate the work to LocalBackEndServices/OGS1GridServices; if it is, push the work to the base class HGGridServices. HGGridServices, in turn, does the management of hyperlink regions, and defines two additional pieces of inter-region protocol:&lt;br /&gt;
*** region_uuid: for linking regions&lt;br /&gt;
*** expect_hg_user: similar to the existing expect_user interface, but with a lot more information about the user being passed around, namely all the user's servers (inventory, asset, user, home, etc.)&lt;br /&gt;
** HGInventoryService extends LocalInventoryService and implements ISecureInventoryService. This class is the most obvious mashup of the pack, mixing local service access for standalone users and remote inventory access for when users are out and about. Right now, there is a fair amount of selective copy-and-paste, to stay away from the ugliness coming from OGS1InventoryService and OGS1SecureInventoryService. HGInventoryService is always a ISecureInventoryService. Its methods all follow the same pattern: check if the user is a local standalone user; if it is, pass the work to the base method (in LocalInventoryService); if it's not perform secure remote access.&lt;br /&gt;
** HGUserServices wraps OSG1UserServices, but it's not functional yet.&lt;br /&gt;
&lt;br /&gt;
* '''HyperGrid.Modules''' is a collection of 3 region modules:&lt;br /&gt;
** HGWorldMapModule extends WorldMapModule. It reuses almost everything from the base class. The only small change is in RequestMapBlocks, where it tries to send Offline mapblocks to the client.&lt;br /&gt;
** HGStandaloneInventoryService and HGStandaloneAssetService do what their names say. They are region modules that allow access to inventory and assets for standalones, when the standalone user is out and about. In spirit, there is a lot in common between these modules and the REST inventory/asset plugin. Unfortunately, that plugin could not be used because it defines a completely different interface than that used by existing inventory and asset servers, and the access for the hypergrid must use a consistent interface.&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[image:HypergridImplementation.jpg|600px|center|(Click on the image to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing and Running Hypergrid ==&lt;br /&gt;
&lt;br /&gt;
=== Installing ===&lt;br /&gt;
&lt;br /&gt;
# Checkout OpenSim, prebuild and build as normal.&lt;br /&gt;
# Make the following changes to your OpenSim.ini:&lt;br /&gt;
#* The map: '''WorldMapModule = &amp;quot;HGWorldMap&amp;quot; ''' If you didn't have this setting in your original OpenSim.ini, make sure you place it under the [Startup] section.&lt;br /&gt;
#* If you're running your opensim in grid mode with the UGAIM servers on other machines, you're done. If you're running in standalone and you want it to be network-able, or if you have your grid on loopback (127.0.0.1) change all the [Network] server addresses to &amp;lt;nowiki&amp;gt;&amp;quot;http://&amp;lt;external_host_name&amp;gt;:&amp;lt;http_port&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;. See below.&lt;br /&gt;
# Run opensim like this: &amp;lt;nowiki&amp;gt;[mono] OpenSim.exe -hypergrid=true&amp;lt;/nowiki&amp;gt;. To make sure the hypergrid is running type this on your console: '''link-region'''. If you don't hear anything back, the hypergrid is not properly installed.&lt;br /&gt;
'''[mono] OpenSim.exe -hypergrid=true'''&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Network settings for a standalone:&lt;br /&gt;
&lt;br /&gt;
 [Network]&lt;br /&gt;
 http_listener_port = 9300&lt;br /&gt;
 remoting_listener_port = 9895&lt;br /&gt;
 &lt;br /&gt;
 grid_server_url = http://example.com:9300&lt;br /&gt;
 grid_send_key = null&lt;br /&gt;
 grid_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 user_server_url = http://example.com:9300&lt;br /&gt;
 user_send_key = null&lt;br /&gt;
 user_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 asset_server_url = http://example.com:9300&lt;br /&gt;
 inventory_server_url = http://example.com:9300&lt;br /&gt;
 messaging_server_url = http://example.com:9300&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Network settings for a grided opensim:&lt;br /&gt;
&lt;br /&gt;
 [Network]&lt;br /&gt;
 http_listener_port = 9300&lt;br /&gt;
 remoting_listener_port = 9895&lt;br /&gt;
 &lt;br /&gt;
 grid_server_url = http://example.com:8001&lt;br /&gt;
 grid_send_key = null&lt;br /&gt;
 grid_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 user_server_url = http://example.com:8002&lt;br /&gt;
 user_send_key = null&lt;br /&gt;
 user_recv_key = null&lt;br /&gt;
 &lt;br /&gt;
 asset_server_url = http://example.com:8003&lt;br /&gt;
 inventory_server_url = http://example.com:8004&lt;br /&gt;
 ; Port 8005 reserved&lt;br /&gt;
 messaging_server_url = http://example.com:8006&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Important Note'''&lt;br /&gt;
&lt;br /&gt;
Make sure you have a 'home' set. If your home region doesn't exist, the hyperlink TPs may not work. To set your home, go to one of your local regions and &amp;quot;Set Home&amp;quot; from the viewer.&lt;br /&gt;
&lt;br /&gt;
=== Linking regions ===&lt;br /&gt;
'''Method 1:'''&lt;br /&gt;
&lt;br /&gt;
On the console, type for example:&lt;br /&gt;
&lt;br /&gt;
link-region &amp;lt;Xloc&amp;gt; &amp;lt;Yloc&amp;gt; osl2.nac.uci.edu 9006 OSGrid Gateway&lt;br /&gt;
&lt;br /&gt;
* Use Xloc and Yloc that make sense to your world, i.e. close to your regions, but not adjacent.&lt;br /&gt;
* replace osl2.nac.uci.edu and 9006 with the domain name / ip address and the port of the region you want to link to&lt;br /&gt;
&lt;br /&gt;
'''Method 2:'''&lt;br /&gt;
&lt;br /&gt;
There is also some initial support for reading the links from a xml file.&lt;br /&gt;
&lt;br /&gt;
Use the console command: link-region &amp;lt;URI&amp;gt; [&amp;lt;excludeList&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
The uri can be either the path of a local xml file or a xml document on a http server.&lt;br /&gt;
&lt;br /&gt;
The format of the xml file is:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Nini&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;Region1&amp;quot;&amp;gt; &amp;lt;!-- can be any name but each section should have a different name and have no spaces --&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;xloc&amp;quot; Value=&amp;quot;1002&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;yloc&amp;quot; Value=&amp;quot;1006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalPort&amp;quot; Value=&amp;quot;9006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalHostName&amp;quot; Value=&amp;quot;osl2.nac.uci.edu&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;localName&amp;quot; Value=&amp;quot;OSGrid-Gateway&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;real-xloc&amp;quot; Value=&amp;quot;10222&amp;quot;/&amp;gt; //optional field that gives the region's real location on its home grid&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;real-yloc&amp;quot; Value=&amp;quot;10265&amp;quot; /&amp;gt; //optional field that gives the region's real location on its home grid&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;Region2&amp;quot;&amp;gt; &lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 &amp;lt;/Nini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Note] The section names can be anything you want, but they all should be different and have no spaces in the name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ExcludeList:&lt;br /&gt;
&lt;br /&gt;
The exclude list is a single string paramater with the format: excludeList:&amp;lt;SectionName&amp;gt;[;&amp;lt;SectionName&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
This means that while reading from the xml file any sections that are listed in the excludeList will be ignored and no HyperGrid link created for them.&lt;br /&gt;
&lt;br /&gt;
This could allow, link lists to be created on a webserver that everyone could add their own regions to, and then they just make sure they add their own section name(s) to the exclude list on their own region(s). &lt;br /&gt;
&lt;br /&gt;
So for example, someone might create a editable online list for the up coming OpenSimulator's 2nd birthday. Which might look something like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Nini&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;OSGrid-Party&amp;quot;&amp;gt; &amp;lt;!-- can be any name but each section should have a different name and no spaces --&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;xloc&amp;quot; Value=&amp;quot;1002&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;yloc&amp;quot; Value=&amp;quot;1006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalPort&amp;quot; Value=&amp;quot;9006&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;externalHostName&amp;quot; Value=&amp;quot;osl2.nac.uci.edu&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Key Name=&amp;quot;localName&amp;quot; Value=&amp;quot;OSGrid-Gateway&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
  &amp;lt;Section Name=&amp;quot;UCIGrid-Party&amp;quot;&amp;gt; &lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/Section&amp;gt;&lt;br /&gt;
 &amp;lt;/Nini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I could then add my own region to the list with the section name &amp;quot;MW-Party&amp;quot;. Then when I startup that region that I want to be part of this hypergrid, I use the command: &amp;quot;link-region &amp;lt;URI of xml file&amp;gt; excludeList:MW-Party&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This is so that my region doesn't try to create a hyper link to itself.&lt;br /&gt;
&lt;br /&gt;
*So: upgrade your own grid to which you want to link -the linkee- as above documented for OpenSim.ini.&lt;br /&gt;
*Than the region in p.e. OSGrid is started with hypergrid=true - the linker - and you add the command&lt;br /&gt;
 - link-region X Y your.remote.accessible.grid your-port hyperregionname&lt;br /&gt;
*Be sure to have port (and NAT) all in line. And choose X Y on a free nearby location&lt;br /&gt;
* what I miss is the link coming up in &amp;quot;show regions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Important Note'''&lt;br /&gt;
&lt;br /&gt;
Due to a viewer [https://jira.secondlife.com/browse/SVC-2941 bug], you can only TP between regions that are no more than 4096 cells apart in any dimension. What this means in practice is that if you want to link to OSGrid, you must have your own regions reachable from the (10,000; 10,000) point on the map, which is where OSGrid is centered. Place your regions somewhere in the 8,000s or the 12,000s.&lt;br /&gt;
&lt;br /&gt;
== Public Hypergrid Nodes ==&lt;br /&gt;
&lt;br /&gt;
Please see [[Public Hypergrid Nodes]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hypergrid Lists ==&lt;br /&gt;
Please see [[Hypergrid Lists]].&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Configuration</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Configuration"/>
				<updated>2009-01-25T13:53:51Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: /* Standalone mode (local or remote)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenSim Command line options ==&lt;br /&gt;
To run OpenSim in somewhat customized environments it's often helpful to modify the programs behaviour via command line arguments.&lt;br /&gt;
OpenSim knows a just a few of these as most parts of the behaviour are controlled via an .INI-File (see below).&lt;br /&gt;
&lt;br /&gt;
The following command line switches are known:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Switch !! Meaning/Behaviour&lt;br /&gt;
|-&lt;br /&gt;
| inifile || changes the name (Path) of the inifile. See below for details&lt;br /&gt;
|-&lt;br /&gt;
| inimaster || allows to read in a master config file. See below for details&lt;br /&gt;
|-&lt;br /&gt;
| background || needs to be explained&lt;br /&gt;
|-&lt;br /&gt;
| gridmode || explain me&lt;br /&gt;
|-&lt;br /&gt;
| physics || explain me&lt;br /&gt;
|-&lt;br /&gt;
| useexecutepath || explain me&lt;br /&gt;
|-&lt;br /&gt;
| hypergrid || explain me&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OpenSim configuration file==&lt;br /&gt;
The simulator configuration is managed using a file called [[OpenSim.ini]]. This file is used regardless of whether the sim is running in standalone or grid mode. Detailed information on the options available for setttings in this file can be found [[OpenSim.ini|here]].&lt;br /&gt;
Please note, that the name OpenSim.ini can be changed via command line arguments (see above).&lt;br /&gt;
&lt;br /&gt;
It is also possible to distribute the inifile settings over two files. This is useful if you want to run several OpenSim processes where most of your settings are identical but some settings differ.&lt;br /&gt;
The master file is read first, then the inifile is read. Settings given in the inifile overrule settings given in the master file.&lt;br /&gt;
The master file has the same format and the same keywords as the inifile, so the same documentation applies.&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
Usually you don't have a debugger and the source code at hand when a situation comes up. OpenSim does some logging to give you information about how it works.&lt;br /&gt;
This is done by use of the [http://logging.apache.org/log4net/index.html log4net-package]. The obvious console output of OpenSim as well as the OpenSim.log output are done via this package and come readily configured out of the box. But you can also make extended use of all other options this package can give you.&lt;br /&gt;
&lt;br /&gt;
OpenSim makes use of the .NET System.Configuration API which means that the file that holds all the logging configuration is bin/OpenSim.exe.config .&lt;br /&gt;
&lt;br /&gt;
More information on how to configure log4net can be found on the [http://logging.apache.org/log4net/release/manual/configuration.html log4net web pages].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Database==&lt;br /&gt;
Opensim's supports the following database-engines:&lt;br /&gt;
* SQLite (default - a lightweight database that comes bundled with OpenSim and can be used without requiring any extra configuration.  It is mostly intended to get you up and running quickly, not for production use.)&lt;br /&gt;
* MySQL (fully supported)&lt;br /&gt;
* MSSQL (partially supported - some recent OpenSim features may not yet be implemented)&lt;br /&gt;
&lt;br /&gt;
More information on database support can be found on the [[OpenSim Database support]] page.&lt;br /&gt;
&lt;br /&gt;
==Script engine==&lt;br /&gt;
OpenSim supports multiple script engines. See [[ScriptEngines]] for details&lt;br /&gt;
&lt;br /&gt;
==Permissions Configuration==&lt;br /&gt;
OpenSim has a quite elaborate set of permissions. See [[OpenSim:Permissions(Server)]] for for details.&lt;br /&gt;
&lt;br /&gt;
==Standalone vs. Grid==&lt;br /&gt;
We recommend that you first get OpenSim running in standalone mode before you attempt to connect it to a grid, either your own grid or a public grid.  An OpenSim configuration consists of regions (run by region simulators) and 5 core backend services (which manage users, the grid, assets, inventories, and grid-wide messaging, collectively known as UGAIM).&lt;br /&gt;
&lt;br /&gt;
A system running in '''standalone mode''' (that is, one  with OpenSim.ini configured such that gridmode = false) -- also known as &amp;quot;sandbox mode&amp;quot; -- runs everything (all UGAIM services and one or more regions) in a single executable (OpenSim.exe).  External regions cannot be added to an OpenSim running in this mode.&lt;br /&gt;
&lt;br /&gt;
In '''grid mode''', the five services ([[User Server|User]], [[Grid Server|Grid]], [[Asset Server|Asset]], [[Inventory Server|Inventory]], [[Messaging Server|Messaging]], or UGAIM) are each started as separate executables.  This means that they can be run either on the same machine or spread out across multiple computers.  In this mode, OpenSim.exe serves one or more regions, which communicate with the core servers.  This mode even allows region servers run by other people on their own machines to connect, if you wish.&lt;br /&gt;
&lt;br /&gt;
Naturally, this means that running in grid mode is somewhat more complicated than running in standalone mode.  It requires an understanding of UUID, X,Y location, server handshake passwords, master avatars, and a couple of other settings. These are not difficult, but do require a little more care in setting things up.&lt;br /&gt;
&lt;br /&gt;
If you want to run a grid of your own (either private or public) you would start the core services up before connecting a region simulator.  If you want to connect your region server to a grid that someone else is running, you need only start the region server in grid mode (with the necessary security keys and location information mentioned in the last paragraph).&lt;br /&gt;
&lt;br /&gt;
OpenSim.exe responds to various command line arguments. These include &amp;quot;-inifile&amp;quot;, &amp;quot;-configfile&amp;quot;, &amp;quot;-gridmode&amp;quot;, &amp;quot;-physics&amp;quot;, &amp;quot;-config&amp;quot; &amp;amp; &amp;quot;-noverbose&amp;quot;. When starting OpenSim in either Windows or Linux, one could, for example, add &amp;quot;-physics=OpenDynamicsEngine&amp;quot; to run the OpenDynamicsEngine instead of basicphysics, or use &amp;quot;-gridmode=true&amp;quot; to force opensim.exe to run as a region server (the rest of the grid services have their own executables).  As many of these settings are normally controlled by OpenSim.ini, most users (especially in standalone mode) will not add any command line arguments.&lt;br /&gt;
&lt;br /&gt;
===Standalone mode===&lt;br /&gt;
&lt;br /&gt;
When you start OpenSim in standalone mode, it will ask you several questions at the console. The first set of prompts that start with &amp;quot;NETWORK SERVERS INFO&amp;quot;, you can just hit return to accept the defaults if you will be running in standalone mode. The prompts that start with &amp;quot;DEFAULT REGION CONFIG&amp;quot; are where you need to start paying attention. Some are self-explanatory. Here are explanations for the others:&amp;lt;br&amp;gt;&lt;br /&gt;
* Grid Location. OpenSim regions can be placed anywhere on a 65536 by 65536 grid. In standalone mode, it is safe to leave these X and Y locations at their defaults for the first region (additional regions will need different coordinates, of course).&lt;br /&gt;
* Filename for local storage. Safe to leave at default.&lt;br /&gt;
* Internal IP address; This should always be 0.0.0.0 (0.0.0.0 means &amp;quot;listen for connections on any interface&amp;quot;, basically a wildcard)&lt;br /&gt;
* Internal IP port for incoming UDP client connection. You can make this any port you want, but it is safe to leave at the default 9000.&lt;br /&gt;
* External host name. If you will only be attaching to your sim from a SecondLife client on the same machine, you can leave this at the default 127.0.0.1. If you will be wanting to connect to it from a client on another machine, this should be the IP address or hostname of the machine you are running this sim on. It appears that this must actually be the External Host IP Address, not the Domain Name. (Hmm - Tried hostname (the one resolved by dns) and it worked out oke.)&lt;br /&gt;
* Be aware of [http://osgrid.org/forums/viewtopic.php?f=5&amp;amp;t=400&amp;amp;start=0&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a loopback] problems when Running viewer &amp;amp; server(s) on the same machine (LAN) but using the &amp;quot;external&amp;quot; configuration. (You might notice endless waiting for region handshake.) See also [http://opensimulator.org/wiki/Troubleshooting troubleshoot hints]&lt;br /&gt;
To connect to your new sim, start up secondlife with the following command line switches:&lt;br /&gt;
 -loginuri http://127.0.0.1:9000/ -loginpage http://127.0.0.1:9000/?method=login &lt;br /&gt;
This assumes you are running the secondlife client on the same box. If you are running it on a separate box, substitute the IP address of your sim machine.&amp;lt;br&amp;gt;&lt;br /&gt;
To create a user:&amp;lt;br&amp;gt;&lt;br /&gt;
type ''create user &amp;lt;first&amp;gt; &amp;lt;last&amp;gt; &amp;lt;password&amp;gt; &amp;lt;x_loc&amp;gt; &amp;lt;y_loc&amp;gt;'' in the server console.&lt;br /&gt;
&lt;br /&gt;
===Grid mode===&lt;br /&gt;
You want to run your own grid. Great! Assuming that you already got your sim running in standalone mode, here is what you need to do:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Current builds of OpenSim grid mode are using mysql to store the grid information. You must have this installed and configured if you want to run your own grid. See [[mysql-config]] for more information.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Four of the servers should be started in a certain order. UGAI: UserServer, GridServer, AssetServer, InventoryServer. The MessagingServer can be started at any point after the GridServer, and the RegionServer(s) should always come last.  These are all found in the bin directory. In windows, you can just double-click on the executables to start them. In Linux and Mac OS X type &amp;quot;mono filename&amp;quot; from a prompt. The executable names, in order, are:&lt;br /&gt;
 OpenSim.Grid.UserServer.exe&lt;br /&gt;
 OpenSim.Grid.GridServer.exe&lt;br /&gt;
 OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
3. Start the UserServer. If you will be running the GridServer on the same box, hit enter to accept the defaults, until it gives you the prompt&lt;br /&gt;
 OpenUser#&lt;br /&gt;
This is the main prompt for the user server. If you will be running the GridServer on another box, change the Default Grid Server URI as appropriate.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Start the GridServer. Again, you can hit return at all the prompts if you are running them all on the same machine. If not, change the URIs for the Asset Server and User server to point to where you are running them. You will finally get to the console prompt for the GridServer which looks like this:&lt;br /&gt;
 OpenGrid#&lt;br /&gt;
5. Start the AssetServer. The console prompt for this server will be:&lt;br /&gt;
 OpenAsset#&lt;br /&gt;
6. Start the InventoryServer. The console prompt for this server will be:&lt;br /&gt;
 INVENTORY#&lt;br /&gt;
7. Start the MessagingServer.  The console prompt for this is:&lt;br /&gt;
 Messaging#&lt;br /&gt;
8. If you are running all of these servers on the same box, which would be the normal configuration, you should be ready to start up your sim.  The mode that OpenSim.exe starts in is normally controlled by a setting in your OpenSim.ini.  It defaults to standalone mode if that setting is not specified or the file is not found.  If you wish, you can force opensim to start in gridmode on the command line as follows:&lt;br /&gt;
 OpenSim.exe -gridmode=true&lt;br /&gt;
or:&lt;br /&gt;
 mono OpenSim.exe -gridmode=true&lt;br /&gt;
With any luck, everything will come up without too many errors.&amp;lt;br&amp;gt;&lt;br /&gt;
9. Go to the UserServer console, and type 'create user' to create a new avatar. It will prompt you for the name and password, and the X and Y of the sim that should be his home location. Use 1000 and 1000, or wherever you told your sim to live when you brought it up in standalone mode. At the console of any of these servers, you should be able to type 'help' to get a list of commands.&lt;br /&gt;
&lt;br /&gt;
You should now be able to connect to your new grid with your secondlife client. You need to tell your client to point at the UserServer rather than directly at the sim, though:&lt;br /&gt;
 secondlife -loginuri http://127.0.0.1:8002/&lt;br /&gt;
8002 is the default port for the UserServer, and that IP address should be changed to the server you are running the UserServer on, if they are not all on the same box.  Happy OpenSimming!&amp;lt;br&amp;gt;&lt;br /&gt;
''Note: if you are using Windows Vista, remember to start servers as Admin. If not it will prompt you an error in console like &amp;quot;Error - Access denied&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Multiple regions==&lt;br /&gt;
&lt;br /&gt;
Using Physical Prim with the OpenDynamicsEngine on *nix, it's recommended that you set your stack reserve level higher then default with the following command;&lt;br /&gt;
&amp;lt;tt&amp;gt;ulimit -s 262144&amp;lt;/tt&amp;gt; Or, run the opensim-ode.sh to start up OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
A powerful region generator is available at: [[RegionGenerator]]&lt;br /&gt;
&lt;br /&gt;
For running multiple regions on the same box, you simply make multiple copies of the 'default.xml' file inside the &amp;lt;tt&amp;gt;bin/Regions/&amp;lt;/tt&amp;gt; directory.  You can do this using the script &amp;lt;tt&amp;gt;make.php&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;share/regions&amp;lt;/tt&amp;gt;, or you can generate the files by hand.&lt;br /&gt;
&lt;br /&gt;
If you want to create the files by hand:&lt;br /&gt;
&lt;br /&gt;
:first copy the default.xml file in the &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt; directory, and name them anything you want (I name mine region.x.y.xml, where region is the name of the region, and x and y are the grid coords.)&lt;br /&gt;
:Open each xml file and edit the uuid (a generator can be found at [http://www.famkruithof.net/uuid/uuidgen uuidgen webpage] or on unix, use the uuidgen command), region name, x &amp;amp; y positions, and internal ip port. IMPORTANT!  The UUID, name, and grid coordinates ''must'' be unique for each region on a grid.  The port assignment must be unique for each region that is running on a particular machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;tt&amp;gt;sim_location_x&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sim_location_y&amp;lt;/tt&amp;gt; should be adjacent integers if you want your regions to be adjacent, so you can run back and forth between them.  '''IMPORTANT: THESE GRID COORDINATES ARE ''NOT'' IN METERS.  THEY ARE SIM POSITIONS.'''  (1000, 1000) is next to (1001,1000), (1000, 1001), and so forth.  1256, 2000, 2048 and similar values are '''not''' adjacent to 1000, they are very far away, so you would not see your sims from one another.&lt;br /&gt;
&lt;br /&gt;
Once you have 2 or more xml files in the bin/Regions folder, running a ''single'' copy of &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; will start up all of your sims! If you come across any errors, there is most likely an error in your xml files.&lt;br /&gt;
&lt;br /&gt;
As of 6-Feb-2008, take care NOT to leave editor backup copies of the files in this directory e.g. emacs style backup names like Regionname.xml~. These are loaded by opensim.exe as if they are legitimate region descriptions, and will therefore give errors indicating you are trying to re-use the socket for that region.&lt;br /&gt;
&lt;br /&gt;
==Attaching your sim to someone else's grid==&lt;br /&gt;
To set up the region server (i.e., &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt;) to connect to an external grid, you should edit the &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file in the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory.  In that file, there is a &amp;lt;tt&amp;gt;[Network]&amp;lt;/tt&amp;gt; section with URLs for the grid, user, and asset servers, as well as send and receive keys (for a basic level of security).  The addresses and send/receive keys will vary depending on the grid you are connecting to, and the grid operator should tell you what values to use.&lt;br /&gt;
&lt;br /&gt;
The other file you may have to change is in your &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt; directory. This is where your individual region config files are. If you only have one region, it will by default be called &amp;lt;tt&amp;gt;default.xml&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be edited with any text editor. The grid owner may tell you what X and Y location you can place your sim at (you can't have multiple sims at the same location on the grid). If so, the fields you will need to change in this file are &amp;lt;tt&amp;gt;sim_location_x&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sim_location_y&amp;lt;/tt&amp;gt;.  And the &amp;lt;tt&amp;gt;external_host_name&amp;lt;/tt&amp;gt; should be set to the hostname or IP address of your simulation server (i.e., the machine that is running &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt;).&lt;br /&gt;
A list of public grids that you can attach your sim to is at [[OpenSim: Grids]]&lt;br /&gt;
&lt;br /&gt;
==Running==&lt;br /&gt;
&lt;br /&gt;
===StandAlone===&lt;br /&gt;
'''&amp;lt;u&amp;gt;Windows&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
On Windows Vista, it may be necessary to explicitly &amp;quot;Run as administrator&amp;quot; for opensim.exe to accept connections from a client, even when running as an administrator user. Navigate to the opensim\bin directory, right click opensim.exe, and select &amp;quot;Run as administrator&amp;quot;.&lt;br /&gt;
Connect: opensim://localhost:9000 , or opensim://127.0.0.1:9000, or opensim://myipadress:9000&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;Linux&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;OSX&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
===Local Grid===&lt;br /&gt;
'''&amp;lt;u&amp;gt;Windows&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 OpenSim.Grid.UserServer.exe&lt;br /&gt;
 OpenSim.Grid.GridServer.exe&lt;br /&gt;
 OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;Linux&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.Grid.UserServer.exe&lt;br /&gt;
 mono OpenSim.Grid.GridServer.exe&lt;br /&gt;
 mono OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 mono OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 mono OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;OSX&amp;lt;/u&amp;gt;''''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.Grid.UserServer.exe&lt;br /&gt;
 mono OpenSim.Grid.GridServer.exe&lt;br /&gt;
 mono OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 mono OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 mono OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
Connect: opensim://myipaddress:9000&lt;br /&gt;
&lt;br /&gt;
===Note About Mono===&lt;br /&gt;
&lt;br /&gt;
If you're using mono, you should increase the value of the mono environment variable MONO_THREADS_PER_CPU from its default of 5 to some number that works for your sim. The exact number depends on many factors including: the number of CPUs in your machine, what else you use that machine for, how many regions you have in your sim, how many of them are adjacent, how many scripts you have, and how many avatars you expect to serve at the same time. As a reference, Wright Plaza in OSGrid, which is running as a single region on a sim and routinely hosts meetings with 20 avatars, uses the value 125. &lt;br /&gt;
&lt;br /&gt;
If this number is too low, the operation of your sim will start to break in all sorts of different ways. A common symptom is the freezing of all activity upon login of a new avatar. Other symptoms are a lot more subtle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration of region modules ==&lt;br /&gt;
&lt;br /&gt;
* [[IRCBridgeModule]]&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Configuration</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Configuration"/>
				<updated>2009-01-23T20:15:44Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: /* Standalone mode */  (remote)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenSim Command line options ==&lt;br /&gt;
To run OpenSim in somewhat customized environments it's often helpful to modify the programs behaviour via command line arguments.&lt;br /&gt;
OpenSim knows a just a few of these as most parts of the behaviour are controlled via an .INI-File (see below).&lt;br /&gt;
&lt;br /&gt;
The following command line switches are known:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Switch !! Meaning/Behaviour&lt;br /&gt;
|-&lt;br /&gt;
| inifile || changes the name (Path) of the inifile. See below for details&lt;br /&gt;
|-&lt;br /&gt;
| inimaster || allows to read in a master config file. See below for details&lt;br /&gt;
|-&lt;br /&gt;
| background || needs to be explained&lt;br /&gt;
|-&lt;br /&gt;
| gridmode || explain me&lt;br /&gt;
|-&lt;br /&gt;
| physics || explain me&lt;br /&gt;
|-&lt;br /&gt;
| useexecutepath || explain me&lt;br /&gt;
|-&lt;br /&gt;
| hypergrid || explain me&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OpenSim configuration file==&lt;br /&gt;
The simulator configuration is managed using a file called [[OpenSim.ini]]. This file is used regardless of whether the sim is running in standalone or grid mode. Detailed information on the options available for setttings in this file can be found [[OpenSim.ini|here]].&lt;br /&gt;
Please note, that the name OpenSim.ini can be changed via command line arguments (see above).&lt;br /&gt;
&lt;br /&gt;
It is also possible to distribute the inifile settings over two files. This is useful if you want to run several OpenSim processes where most of your settings are identical but some settings differ.&lt;br /&gt;
The master file is read first, then the inifile is read. Settings given in the inifile overrule settings given in the master file.&lt;br /&gt;
The master file has the same format and the same keywords as the inifile, so the same documentation applies.&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
Usually you don't have a debugger and the source code at hand when a situation comes up. OpenSim does some logging to give you information about how it works.&lt;br /&gt;
This is done by use of the [http://logging.apache.org/log4net/index.html log4net-package]. The obvious console output of OpenSim as well as the OpenSim.log output are done via this package and come readily configured out of the box. But you can also make extended use of all other options this package can give you.&lt;br /&gt;
&lt;br /&gt;
OpenSim makes use of the .NET System.Configuration API which means that the file that holds all the logging configuration is bin/OpenSim.exe.config .&lt;br /&gt;
&lt;br /&gt;
More information on how to configure log4net can be found on the [http://logging.apache.org/log4net/release/manual/configuration.html log4net web pages].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Database==&lt;br /&gt;
Opensim's supports the following database-engines:&lt;br /&gt;
* SQLite (default - a lightweight database that comes bundled with OpenSim and can be used without requiring any extra configuration.  It is mostly intended to get you up and running quickly, not for production use.)&lt;br /&gt;
* MySQL (fully supported)&lt;br /&gt;
* MSSQL (partially supported - some recent OpenSim features may not yet be implemented)&lt;br /&gt;
&lt;br /&gt;
More information on database support can be found on the [[OpenSim Database support]] page.&lt;br /&gt;
&lt;br /&gt;
==Script engine==&lt;br /&gt;
OpenSim supports multiple script engines. See [[ScriptEngines]] for details&lt;br /&gt;
&lt;br /&gt;
==Permissions Configuration==&lt;br /&gt;
OpenSim has a quite elaborate set of permissions. See [[OpenSim:Permissions(Server)]] for for details.&lt;br /&gt;
&lt;br /&gt;
==Standalone vs. Grid==&lt;br /&gt;
We recommend that you first get OpenSim running in standalone mode before you attempt to connect it to a grid, either your own grid or a public grid.  An OpenSim configuration consists of regions (run by region simulators) and 5 core backend services (which manage users, the grid, assets, inventories, and grid-wide messaging, collectively known as UGAIM).&lt;br /&gt;
&lt;br /&gt;
A system running in '''standalone mode''' (that is, one  with OpenSim.ini configured such that gridmode = false) -- also known as &amp;quot;sandbox mode&amp;quot; -- runs everything (all UGAIM services and one or more regions) in a single executable (OpenSim.exe).  External regions cannot be added to an OpenSim running in this mode.&lt;br /&gt;
&lt;br /&gt;
In '''grid mode''', the five services ([[User Server|User]], [[Grid Server|Grid]], [[Asset Server|Asset]], [[Inventory Server|Inventory]], [[Messaging Server|Messaging]], or UGAIM) are each started as separate executables.  This means that they can be run either on the same machine or spread out across multiple computers.  In this mode, OpenSim.exe serves one or more regions, which communicate with the core servers.  This mode even allows region servers run by other people on their own machines to connect, if you wish.&lt;br /&gt;
&lt;br /&gt;
Naturally, this means that running in grid mode is somewhat more complicated than running in standalone mode.  It requires an understanding of UUID, X,Y location, server handshake passwords, master avatars, and a couple of other settings. These are not difficult, but do require a little more care in setting things up.&lt;br /&gt;
&lt;br /&gt;
If you want to run a grid of your own (either private or public) you would start the core services up before connecting a region simulator.  If you want to connect your region server to a grid that someone else is running, you need only start the region server in grid mode (with the necessary security keys and location information mentioned in the last paragraph).&lt;br /&gt;
&lt;br /&gt;
OpenSim.exe responds to various command line arguments. These include &amp;quot;-inifile&amp;quot;, &amp;quot;-configfile&amp;quot;, &amp;quot;-gridmode&amp;quot;, &amp;quot;-physics&amp;quot;, &amp;quot;-config&amp;quot; &amp;amp; &amp;quot;-noverbose&amp;quot;. When starting OpenSim in either Windows or Linux, one could, for example, add &amp;quot;-physics=OpenDynamicsEngine&amp;quot; to run the OpenDynamicsEngine instead of basicphysics, or use &amp;quot;-gridmode=true&amp;quot; to force opensim.exe to run as a region server (the rest of the grid services have their own executables).  As many of these settings are normally controlled by OpenSim.ini, most users (especially in standalone mode) will not add any command line arguments.&lt;br /&gt;
&lt;br /&gt;
===Standalone mode===&lt;br /&gt;
&lt;br /&gt;
When you start OpenSim in standalone mode, it will ask you several questions at the console. The first set of prompts that start with &amp;quot;NETWORK SERVERS INFO&amp;quot;, you can just hit return to accept the defaults if you will be running in standalone mode. The prompts that start with &amp;quot;DEFAULT REGION CONFIG&amp;quot; are where you need to start paying attention. Some are self-explanatory. Here are explanations for the others:&amp;lt;br&amp;gt;&lt;br /&gt;
* Grid Location. OpenSim regions can be placed anywhere on a 65536 by 65536 grid. In standalone mode, it is safe to leave these X and Y locations at their defaults for the first region (additional regions will need different coordinates, of course).&lt;br /&gt;
* Filename for local storage. Safe to leave at default.&lt;br /&gt;
* Internal IP address; This should always be 0.0.0.0 (0.0.0.0 means &amp;quot;listen for connections on any interface&amp;quot;, basically a wildcard)&lt;br /&gt;
* Internal IP port for incoming UDP client connection. You can make this any port you want, but it is safe to leave at the default 9000.&lt;br /&gt;
* External host name. If you will only be attaching to your sim from a SecondLife client on the same machine, you can leave this at the default 127.0.0.1. If you will be wanting to connect to it from a client on another machine, this should be the IP address or hostname of the machine you are running this sim on. N.B - It appears that this must actually be the External Host IP Address, not the Domain Name.&lt;br /&gt;
N.B.- Tried hostname (the one resolved by dns) and it worked out oke.&lt;br /&gt;
N.B - Be aware of [http://osgrid.org/forums/viewtopic.php?f=5&amp;amp;t=400&amp;amp;start=0&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a loopback] problems, p.e. if you run viewer &amp;amp; region on the same machine but using the &amp;quot;external&amp;quot; configuration. (Things you might notice is endless waiting for region handshake.) &lt;br /&gt;
To connect to your new sim, start up secondlife with the following command line switches:&lt;br /&gt;
 -loginuri http://127.0.0.1:9000/ -loginpage http://127.0.0.1:9000/?method=login &lt;br /&gt;
This assumes you are running the secondlife client on the same box. If you are running it on a separate box, substitute the IP address of your sim machine.&amp;lt;br&amp;gt;&lt;br /&gt;
To create a user:&amp;lt;br&amp;gt;&lt;br /&gt;
type ''create user &amp;lt;first&amp;gt; &amp;lt;last&amp;gt; &amp;lt;password&amp;gt; &amp;lt;x_loc&amp;gt; &amp;lt;y_loc&amp;gt;'' in the server console.&lt;br /&gt;
&lt;br /&gt;
===Grid mode===&lt;br /&gt;
You want to run your own grid. Great! Assuming that you already got your sim running in standalone mode, here is what you need to do:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Current builds of OpenSim grid mode are using mysql to store the grid information. You must have this installed and configured if you want to run your own grid. See [[mysql-config]] for more information.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Four of the servers should be started in a certain order. UGAI: UserServer, GridServer, AssetServer, InventoryServer. The MessagingServer can be started at any point after the GridServer, and the RegionServer(s) should always come last.  These are all found in the bin directory. In windows, you can just double-click on the executables to start them. In Linux and Mac OS X type &amp;quot;mono filename&amp;quot; from a prompt. The executable names, in order, are:&lt;br /&gt;
 OpenSim.Grid.UserServer.exe&lt;br /&gt;
 OpenSim.Grid.GridServer.exe&lt;br /&gt;
 OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
3. Start the UserServer. If you will be running the GridServer on the same box, hit enter to accept the defaults, until it gives you the prompt&lt;br /&gt;
 OpenUser#&lt;br /&gt;
This is the main prompt for the user server. If you will be running the GridServer on another box, change the Default Grid Server URI as appropriate.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Start the GridServer. Again, you can hit return at all the prompts if you are running them all on the same machine. If not, change the URIs for the Asset Server and User server to point to where you are running them. You will finally get to the console prompt for the GridServer which looks like this:&lt;br /&gt;
 OpenGrid#&lt;br /&gt;
5. Start the AssetServer. The console prompt for this server will be:&lt;br /&gt;
 OpenAsset#&lt;br /&gt;
6. Start the InventoryServer. The console prompt for this server will be:&lt;br /&gt;
 INVENTORY#&lt;br /&gt;
7. Start the MessagingServer.  The console prompt for this is:&lt;br /&gt;
 Messaging#&lt;br /&gt;
8. If you are running all of these servers on the same box, which would be the normal configuration, you should be ready to start up your sim.  The mode that OpenSim.exe starts in is normally controlled by a setting in your OpenSim.ini.  It defaults to standalone mode if that setting is not specified or the file is not found.  If you wish, you can force opensim to start in gridmode on the command line as follows:&lt;br /&gt;
 OpenSim.exe -gridmode=true&lt;br /&gt;
or:&lt;br /&gt;
 mono OpenSim.exe -gridmode=true&lt;br /&gt;
With any luck, everything will come up without too many errors.&amp;lt;br&amp;gt;&lt;br /&gt;
9. Go to the UserServer console, and type 'create user' to create a new avatar. It will prompt you for the name and password, and the X and Y of the sim that should be his home location. Use 1000 and 1000, or wherever you told your sim to live when you brought it up in standalone mode. At the console of any of these servers, you should be able to type 'help' to get a list of commands.&lt;br /&gt;
&lt;br /&gt;
You should now be able to connect to your new grid with your secondlife client. You need to tell your client to point at the UserServer rather than directly at the sim, though:&lt;br /&gt;
 secondlife -loginuri http://127.0.0.1:8002/&lt;br /&gt;
8002 is the default port for the UserServer, and that IP address should be changed to the server you are running the UserServer on, if they are not all on the same box.  Happy OpenSimming!&amp;lt;br&amp;gt;&lt;br /&gt;
''Note: if you are using Windows Vista, remember to start servers as Admin. If not it will prompt you an error in console like &amp;quot;Error - Access denied&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Multiple regions==&lt;br /&gt;
&lt;br /&gt;
Using Physical Prim with the OpenDynamicsEngine on *nix, it's recommended that you set your stack reserve level higher then default with the following command;&lt;br /&gt;
&amp;lt;tt&amp;gt;ulimit -s 262144&amp;lt;/tt&amp;gt; Or, run the opensim-ode.sh to start up OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
A powerful region generator is available at: [[RegionGenerator]]&lt;br /&gt;
&lt;br /&gt;
For running multiple regions on the same box, you simply make multiple copies of the 'default.xml' file inside the &amp;lt;tt&amp;gt;bin/Regions/&amp;lt;/tt&amp;gt; directory.  You can do this using the script &amp;lt;tt&amp;gt;make.php&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;share/regions&amp;lt;/tt&amp;gt;, or you can generate the files by hand.&lt;br /&gt;
&lt;br /&gt;
If you want to create the files by hand:&lt;br /&gt;
&lt;br /&gt;
:first copy the default.xml file in the &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt; directory, and name them anything you want (I name mine region.x.y.xml, where region is the name of the region, and x and y are the grid coords.)&lt;br /&gt;
:Open each xml file and edit the uuid (a generator can be found at [http://www.famkruithof.net/uuid/uuidgen uuidgen webpage] or on unix, use the uuidgen command), region name, x &amp;amp; y positions, and internal ip port. IMPORTANT!  The UUID, name, and grid coordinates ''must'' be unique for each region on a grid.  The port assignment must be unique for each region that is running on a particular machine.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;tt&amp;gt;sim_location_x&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sim_location_y&amp;lt;/tt&amp;gt; should be adjacent integers if you want your regions to be adjacent, so you can run back and forth between them.  '''IMPORTANT: THESE GRID COORDINATES ARE ''NOT'' IN METERS.  THEY ARE SIM POSITIONS.'''  (1000, 1000) is next to (1001,1000), (1000, 1001), and so forth.  1256, 2000, 2048 and similar values are '''not''' adjacent to 1000, they are very far away, so you would not see your sims from one another.&lt;br /&gt;
&lt;br /&gt;
Once you have 2 or more xml files in the bin/Regions folder, running a ''single'' copy of &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; will start up all of your sims! If you come across any errors, there is most likely an error in your xml files.&lt;br /&gt;
&lt;br /&gt;
As of 6-Feb-2008, take care NOT to leave editor backup copies of the files in this directory e.g. emacs style backup names like Regionname.xml~. These are loaded by opensim.exe as if they are legitimate region descriptions, and will therefore give errors indicating you are trying to re-use the socket for that region.&lt;br /&gt;
&lt;br /&gt;
==Attaching your sim to someone else's grid==&lt;br /&gt;
To set up the region server (i.e., &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt;) to connect to an external grid, you should edit the &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file in the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory.  In that file, there is a &amp;lt;tt&amp;gt;[Network]&amp;lt;/tt&amp;gt; section with URLs for the grid, user, and asset servers, as well as send and receive keys (for a basic level of security).  The addresses and send/receive keys will vary depending on the grid you are connecting to, and the grid operator should tell you what values to use.&lt;br /&gt;
&lt;br /&gt;
The other file you may have to change is in your &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt; directory. This is where your individual region config files are. If you only have one region, it will by default be called &amp;lt;tt&amp;gt;default.xml&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be edited with any text editor. The grid owner may tell you what X and Y location you can place your sim at (you can't have multiple sims at the same location on the grid). If so, the fields you will need to change in this file are &amp;lt;tt&amp;gt;sim_location_x&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sim_location_y&amp;lt;/tt&amp;gt;.  And the &amp;lt;tt&amp;gt;external_host_name&amp;lt;/tt&amp;gt; should be set to the hostname or IP address of your simulation server (i.e., the machine that is running &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt;).&lt;br /&gt;
A list of public grids that you can attach your sim to is at [[OpenSim: Grids]]&lt;br /&gt;
&lt;br /&gt;
==Running==&lt;br /&gt;
&lt;br /&gt;
===StandAlone===&lt;br /&gt;
'''&amp;lt;u&amp;gt;Windows&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
On Windows Vista, it may be necessary to explicitly &amp;quot;Run as administrator&amp;quot; for opensim.exe to accept connections from a client, even when running as an administrator user. Navigate to the opensim\bin directory, right click opensim.exe, and select &amp;quot;Run as administrator&amp;quot;.&lt;br /&gt;
Connect: opensim://localhost:9000 , or opensim://127.0.0.1:9000, or opensim://myipadress:9000&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;Linux&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;OSX&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
===Local Grid===&lt;br /&gt;
'''&amp;lt;u&amp;gt;Windows&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 OpenSim.Grid.UserServer.exe&lt;br /&gt;
 OpenSim.Grid.GridServer.exe&lt;br /&gt;
 OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;Linux&amp;lt;/u&amp;gt;'''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.Grid.UserServer.exe&lt;br /&gt;
 mono OpenSim.Grid.GridServer.exe&lt;br /&gt;
 mono OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 mono OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 mono OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;OSX&amp;lt;/u&amp;gt;''''&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.Grid.UserServer.exe&lt;br /&gt;
 mono OpenSim.Grid.GridServer.exe&lt;br /&gt;
 mono OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 mono OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 mono OpenSim.Grid.MessagingServer.exe&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
Connect: opensim://myipaddress:9000&lt;br /&gt;
&lt;br /&gt;
===Note About Mono===&lt;br /&gt;
&lt;br /&gt;
If you're using mono, you should increase the value of the mono environment variable MONO_THREADS_PER_CPU from its default of 5 to some number that works for your sim. The exact number depends on many factors including: the number of CPUs in your machine, what else you use that machine for, how many regions you have in your sim, how many of them are adjacent, how many scripts you have, and how many avatars you expect to serve at the same time. As a reference, Wright Plaza in OSGrid, which is running as a single region on a sim and routinely hosts meetings with 20 avatars, uses the value 125. &lt;br /&gt;
&lt;br /&gt;
If this number is too low, the operation of your sim will start to break in all sorts of different ways. A common symptom is the freezing of all activity upon login of a new avatar. Other symptoms are a lot more subtle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration of region modules ==&lt;br /&gt;
&lt;br /&gt;
* [[IRCBridgeModule]]&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:Configuration</id>
		<title>Talk:Configuration</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:Configuration"/>
				<updated>2009-01-22T21:45:53Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: New page: Hi I'm sorry, just did a section edit view and save .... and the result is a lot of loss.  Please restore the original and add the remark about loopback when using external hsot configurat...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi I'm sorry, just did a section edit view and save .... and the result is a lot of loss.&lt;br /&gt;
&lt;br /&gt;
Please restore the original and add the remark about loopback when using external hsot configuration&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Configuration</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Configuration"/>
				<updated>2009-01-22T21:40:53Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: NAT problems&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Standalone mode===&lt;br /&gt;
&lt;br /&gt;
When you start OpenSim in standalone mode, it will ask you several questions at the console. The first set of prompts that start with &amp;quot;NETWORK SERVERS INFO&amp;quot;, you can just hit return to accept the defaults if you will be running in standalone mode. The prompts that start with &amp;quot;DEFAULT REGION CONFIG&amp;quot; are where you need to start paying attention. Some are self-explanatory. Here are explanations for the others:&amp;lt;br&amp;gt;&lt;br /&gt;
* Grid Location. OpenSim regions can be placed anywhere on a 65536 by 65536 grid. In standalone mode, it is safe to leave these X and Y locations at their defaults for the first region (additional regions will need different coordinates, of course).&lt;br /&gt;
* Filename for local storage. Safe to leave at default.&lt;br /&gt;
* Internal IP address; This should always be 0.0.0.0 (0.0.0.0 means &amp;quot;listen for connections on any interface&amp;quot;, basically a wildcard)&lt;br /&gt;
* Internal IP port for incoming UDP client connection. You can make this any port you want, but it is safe to leave at the default 9000.&lt;br /&gt;
* External host name. If you will only be attaching to your sim from a SecondLife client on the same machine, you can leave this at the default 127.0.0.1. If you will be wanting to connect to it from a client on another machine, this should be the IP address or hostname of the machine you are running this sim on. N.B - It appears that this must actually be the External Host IP Address, not the Domain Name.&lt;br /&gt;
* If configuring &amp;quot;External Host Name&amp;quot; (you can use the host name is my experience) and running viewer and server on the same machine (or LAN when using wan-ip and port-forwarding) create a [http://osgrid.org/forums/viewtopic.php?f=5&amp;amp;t=400&amp;amp;start=0&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a loopback]&lt;br /&gt;
To connect to your new sim, start up secondlife with the following command line switches:&lt;br /&gt;
 -loginuri http://127.0.0.1:9000/ -loginpage http://127.0.0.1:9000/?method=login &lt;br /&gt;
This assumes you are running the secondlife client on the same box. If you are running it on a separate box, substitute the IP address of your sim machine.&amp;lt;br&amp;gt;&lt;br /&gt;
To create a user:&amp;lt;br&amp;gt;&lt;br /&gt;
type ''create user &amp;lt;first&amp;gt; &amp;lt;last&amp;gt; &amp;lt;password&amp;gt; &amp;lt;x_loc&amp;gt; &amp;lt;y_loc&amp;gt;'' in the server console.&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Tips</id>
		<title>Tips</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Tips"/>
				<updated>2008-08-30T21:23:44Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: /* Placing data away from the code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Users]]&lt;br /&gt;
==Terrain Tidbits==&lt;br /&gt;
===How can I flatten a region?===&lt;br /&gt;
When you have multiple regions, that you need to terraform to a certain height, the quickest way to do it is by selecting a region, and fill the terrain to the specified height:&lt;br /&gt;
 change-region YourRegionName&lt;br /&gt;
 script terrain fill 20&lt;br /&gt;
&lt;br /&gt;
''Note:'' Remember to change to the region you wish to modify if that is the only region wish to make changes to. Without using the change-region command, you may very well end up flattening multiple regions!&lt;br /&gt;
&lt;br /&gt;
As of SVN 4061&lt;br /&gt;
  terrain fill 25&lt;br /&gt;
  &lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
&lt;br /&gt;
=== What programs can I use to create terrains for OpenSim? ===&lt;br /&gt;
If you are after simple terrain files (jpg, gif, etc), you can use Photoshop or any number of freeware programs, like [http://www.gimp.org/ Gimp]. If you want more complex terrains, you will need programs that output to standard 3d raw format (aka r32 or r64). [http://www.bundysoft.com/L3DT/ L3DT] and [http://www.planetside.co.uk/terragen/ Terragen] are two of the top commercial programs for this. (anyone know of a freeware one?), or you could, with some practice, use [http://www.blender.org/ Blender]. The free version of L3DT can make terrains up to 2048x2048 in size, or 8x8 regions.&lt;br /&gt;
You can use `terrain load IMG yourfile.png` to load '''greyscale''' PNG files.  Remember to use something like `terrain rescale 0 25` to make it visible.&lt;br /&gt;
Here is some info on [[Using L3DT]] to make a terrain.&lt;br /&gt;
&lt;br /&gt;
You can also use http://lab.parkstudio.ru/terra/ if you know a bit about heightmaps and how they work.  Just set the custom landscape texture gradient to pure black and pure white and turn off water.&lt;br /&gt;
And here are some [[Free Terrains]] that you can use. Enjoy!&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the files for my terrains? ===&lt;br /&gt;
This one is actually pretty simple, but first the 'hard' answer: anywhere in the PATH will work. Lost? yeah, I was too, so... just drop the file into the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory (right where your &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; file is).&lt;br /&gt;
&lt;br /&gt;
===How do I change the terrain for a group of sims?===&lt;br /&gt;
First, the file must be in f32 (or f64?) format. This is easy to do with L3DT's export feature. (Use the RAW format and set the options to &amp;lt;tt&amp;gt;Y flipped = true&amp;lt;/tt&amp;gt; and at the bottom, change it to read 'float' instead of 'ushort'). It also needs to be a file that will cover each sim in a 256x256 layer (so, for 2x2 regions, you need a 512x512 file), It is very important that you rename the file extension to .r32 for the import to properly work.&lt;br /&gt;
Then, once you have it saved, on the &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; console, type in:&lt;br /&gt;
 script terrain load-tile &amp;lt;filename&amp;gt; &amp;lt;image X&amp;gt; &amp;lt;image y&amp;gt; &amp;lt;bottomleftsim X&amp;gt; &amp;lt;bottomleftsim y&amp;gt;&lt;br /&gt;
For example, I run a square of 4 sims in a 2x2 pattern. I started my sim placement at 0, 0 and ended at 1, 1. my line reads:&lt;br /&gt;
 &amp;lt;strike&amp;gt;script terrain load-tile simalpha.r32 512 512 0 0&amp;lt;/strike&amp;gt;&lt;br /&gt;
 script terrain load-tile simalpha.r32 2 2 0 0 ([[User:Oudrun|Oudrun]])&lt;br /&gt;
New syntax is using number of tiles instead of imagesize (one tile 256x356 pix). Above example is for a 2x2 region terrainfile.&lt;br /&gt;
&lt;br /&gt;
Next, before you log in, you may want to go to type in: *(THIS FUNCTION MAY NOT WORK)&lt;br /&gt;
 script terrain multiply 0.4&lt;br /&gt;
This should scale it down from the nearly 300 meters altitude I ran into to something a little more reasonable for the minimap.&lt;br /&gt;
&lt;br /&gt;
===How do I load a terrain file on startup?===&lt;br /&gt;
Edit the file &amp;lt;tt&amp;gt;startup_commands.txt&amp;lt;/tt&amp;gt; in the bin directory and add the above commands &amp;quot;&amp;lt;tt&amp;gt;script terrain load-tile ...&amp;lt;/tt&amp;gt;&amp;quot; and &amp;quot;&amp;lt;tt&amp;gt;script terrain multiply ...&amp;lt;/tt&amp;gt;&amp;quot; one per line.&lt;br /&gt;
&lt;br /&gt;
*** Notice this method is no longer required and should be considered a legacy function, Terrain persistance is now working 100%.&lt;br /&gt;
&lt;br /&gt;
Terrain Tidbits brought to you by Tilde, with a few questions in IRC :) - [[User:Tildeampersand|Tilde]] 10:32, 15 August 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
===How do I import into OpenSim the terrain shape of my Second Life sim?===&lt;br /&gt;
First, assure you are in the right region if you have more than one, by using: &lt;br /&gt;
&lt;br /&gt;
 change-region &amp;lt;nowiki&amp;gt;&amp;lt;regionname&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then use the command (file extension now determines the format, use .r32 for L3DT terrains)&lt;br /&gt;
&lt;br /&gt;
 script terrain load &amp;lt;filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Watch [http://archimedix.wordpress.com/2007/11/26/opensim/ this video] for a step-by-step tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Other useless or useful info depending on who reads it ===&lt;br /&gt;
&lt;br /&gt;
* I found out that each point on the grey scale (0 to 255) equals approximately .23 to .25 meters in terrain height. - [[CharlieO]]&lt;br /&gt;
* Also for those who want to manually edit a png file, you need at minimum 3 different shades of grey. and one has to be drastically different than the other 2 in order to have the height show correctly. - [[CharlieO]]&lt;br /&gt;
 example:&lt;br /&gt;
  1) 0,0,0 &lt;br /&gt;
  2) 223, 233, 233 &lt;br /&gt;
  3) 255, 255, 255&lt;br /&gt;
&lt;br /&gt;
==General Setup Tricks==&lt;br /&gt;
=== Changing viewer start webpage in standalone mode ===&lt;br /&gt;
&lt;br /&gt;
In order to change the page that the viewer starts in /opensim/bin/ there is a http_loginform.html.example page.  Removing the .example will make this page be the start webpage which you can edit etc.  Since the login html code is no longer needed this can be modified at will.&lt;br /&gt;
&lt;br /&gt;
=== Making the server remember terrain, prims and other region storage changes after reboot ===&lt;br /&gt;
In order for the server to remember these things you must select a database to be used in the OpenSim.ini file.  For more info on setting this up see [[OpenSim_Database_support]].  The easiest to set up is SqLite which has a guide on the linked page.&lt;br /&gt;
&lt;br /&gt;
=== Placing data away from the code ===&lt;br /&gt;
A good set up, separates the code (replaced often in this project) from the data (&amp;quot;unique&amp;quot; and more valuable for the user). Things to do:&lt;br /&gt;
* separate your region definitions by using the ''regionload_regionsdir'' value in the OpenSim.ini&lt;br /&gt;
 e.g. regionload_regionsdir=&amp;quot;../OSHirvi/Regions&amp;quot; places the Regions directory besides the &amp;quot;code directory&amp;quot; in a folder called OSHirvi&lt;br /&gt;
* make your data persistent in a database (see above), this requires (again) to edit your OpenSim.ini file. You might use unique names to separate multiple setups within the database server you use.&lt;br /&gt;
 e.g. ''storage_connection_string=''&amp;quot;Data Source=localhost;Database=OSHirvi;User ID=OSHirvi;Password=password;&amp;quot;; &lt;br /&gt;
* the next step is copying/cutting OpenSim.ini itself away from the code&lt;br /&gt;
 p.e. place this file in ../OSHirvi/OpenSim.1.ini &lt;br /&gt;
* to point from your place ../ to your wanted runtime directory create a link (or some call it shortcut). If you download a newer build just change the link.&lt;br /&gt;
 e.g. ln -s opensimservercode opensim-0.5.8.5695&lt;br /&gt;
&lt;br /&gt;
Now create a script, and call it startHirvi.sh that:&lt;br /&gt;
 a) gets it current directory in the code directory, found by the link&lt;br /&gt;
 b) starts up OpenSim.exe with the required .ini file, by using the ''-inifile'' startup option. You can still add other options. &lt;br /&gt;
 cd ../opensimservercode&lt;br /&gt;
 mono OpenSim.exe -inifile ../OSHirvi/OpenSim.1.ini -gridmode=true&lt;br /&gt;
&lt;br /&gt;
Oke, done this you are left with a code directory still filled with runtime data, but this is just persistent temporary stuff that the server automatic rebuilds if it is deleted. Still a pitty there is no way to get it separate. &lt;br /&gt;
 ./addin-db-00&lt;br /&gt;
 ./addins&lt;br /&gt;
 ./OpaenSim.log and many others if you run in grid-mode&lt;br /&gt;
 ./estate_settings.xml and many other configuration settings&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:Tips</id>
		<title>Talk:Tips</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:Tips"/>
				<updated>2008-08-26T20:27:03Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: New page: Anyone more to contribute to my section Place data away from the code. Be welcme and help me (Ulysses Hirvi) out.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anyone more to contribute to my section Place data away from the code. Be welcme and help me (Ulysses Hirvi) out.&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Tips</id>
		<title>Tips</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Tips"/>
				<updated>2008-08-26T20:25:04Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: Placing data away from code, good habbits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Users]]&lt;br /&gt;
==Terrain Tidbits==&lt;br /&gt;
===How can I flatten a region?===&lt;br /&gt;
When you have multiple regions, that you need to terraform to a certain height, the quickest way to do it is by selecting a region, and fill the terrain to the specified height:&lt;br /&gt;
 change-region YourRegionName&lt;br /&gt;
 script terrain fill 20&lt;br /&gt;
&lt;br /&gt;
''Note:'' Remember to change to the region you wish to modify if that is the only region wish to make changes to. Without using the change-region command, you may very well end up flattening multiple regions!&lt;br /&gt;
&lt;br /&gt;
As of SVN 4061&lt;br /&gt;
  terrain fill 25&lt;br /&gt;
  &lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
&lt;br /&gt;
=== What programs can I use to create terrains for OpenSim? ===&lt;br /&gt;
If you are after simple terrain files (jpg, gif, etc), you can use Photoshop or any number of freeware programs, like [http://www.gimp.org/ Gimp]. If you want more complex terrains, you will need programs that output to standard 3d raw format (aka r32 or r64). [http://www.bundysoft.com/L3DT/ L3DT] and [http://www.planetside.co.uk/terragen/ Terragen] are two of the top commercial programs for this. (anyone know of a freeware one?), or you could, with some practice, use [http://www.blender.org/ Blender]. The free version of L3DT can make terrains up to 2048x2048 in size, or 8x8 regions.&lt;br /&gt;
You can use `terrain load IMG yourfile.png` to load '''greyscale''' PNG files.  Remember to use something like `terrain rescale 0 25` to make it visible.&lt;br /&gt;
Here is some info on [[Using L3DT]] to make a terrain.&lt;br /&gt;
&lt;br /&gt;
You can also use http://lab.parkstudio.ru/terra/ if you know a bit about heightmaps and how they work.  Just set the custom landscape texture gradient to pure black and pure white and turn off water.&lt;br /&gt;
And here are some [[Free Terrains]] that you can use. Enjoy!&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the files for my terrains? ===&lt;br /&gt;
This one is actually pretty simple, but first the 'hard' answer: anywhere in the PATH will work. Lost? yeah, I was too, so... just drop the file into the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory (right where your &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; file is).&lt;br /&gt;
&lt;br /&gt;
===How do I change the terrain for a group of sims?===&lt;br /&gt;
First, the file must be in f32 (or f64?) format. This is easy to do with L3DT's export feature. (Use the RAW format and set the options to &amp;lt;tt&amp;gt;Y flipped = true&amp;lt;/tt&amp;gt; and at the bottom, change it to read 'float' instead of 'ushort'). It also needs to be a file that will cover each sim in a 256x256 layer (so, for 2x2 regions, you need a 512x512 file), It is very important that you rename the file extension to .r32 for the import to properly work.&lt;br /&gt;
Then, once you have it saved, on the &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; console, type in:&lt;br /&gt;
 script terrain load-tile &amp;lt;filename&amp;gt; &amp;lt;image X&amp;gt; &amp;lt;image y&amp;gt; &amp;lt;bottomleftsim X&amp;gt; &amp;lt;bottomleftsim y&amp;gt;&lt;br /&gt;
For example, I run a square of 4 sims in a 2x2 pattern. I started my sim placement at 0, 0 and ended at 1, 1. my line reads:&lt;br /&gt;
 &amp;lt;strike&amp;gt;script terrain load-tile simalpha.r32 512 512 0 0&amp;lt;/strike&amp;gt;&lt;br /&gt;
 script terrain load-tile simalpha.r32 2 2 0 0 ([[User:Oudrun|Oudrun]])&lt;br /&gt;
New syntax is using number of tiles instead of imagesize (one tile 256x356 pix). Above example is for a 2x2 region terrainfile.&lt;br /&gt;
&lt;br /&gt;
Next, before you log in, you may want to go to type in: *(THIS FUNCTION MAY NOT WORK)&lt;br /&gt;
 script terrain multiply 0.4&lt;br /&gt;
This should scale it down from the nearly 300 meters altitude I ran into to something a little more reasonable for the minimap.&lt;br /&gt;
&lt;br /&gt;
===How do I load a terrain file on startup?===&lt;br /&gt;
Edit the file &amp;lt;tt&amp;gt;startup_commands.txt&amp;lt;/tt&amp;gt; in the bin directory and add the above commands &amp;quot;&amp;lt;tt&amp;gt;script terrain load-tile ...&amp;lt;/tt&amp;gt;&amp;quot; and &amp;quot;&amp;lt;tt&amp;gt;script terrain multiply ...&amp;lt;/tt&amp;gt;&amp;quot; one per line.&lt;br /&gt;
&lt;br /&gt;
*** Notice this method is no longer required and should be considered a legacy function, Terrain persistance is now working 100%.&lt;br /&gt;
&lt;br /&gt;
Terrain Tidbits brought to you by Tilde, with a few questions in IRC :) - [[User:Tildeampersand|Tilde]] 10:32, 15 August 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
===How do I import into OpenSim the terrain shape of my Second Life sim?===&lt;br /&gt;
First, assure you are in the right region if you have more than one, by using: &lt;br /&gt;
&lt;br /&gt;
 change-region &amp;lt;nowiki&amp;gt;&amp;lt;regionname&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then use the command (file extension now determines the format, use .r32 for L3DT terrains)&lt;br /&gt;
&lt;br /&gt;
 script terrain load &amp;lt;filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Watch [http://archimedix.wordpress.com/2007/11/26/opensim/ this video] for a step-by-step tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Other useless or useful info depending on who reads it ===&lt;br /&gt;
&lt;br /&gt;
* I found out that each point on the grey scale (0 to 255) equals approximately .23 to .25 meters in terrain height. - [[CharlieO]]&lt;br /&gt;
* Also for those who want to manually edit a png file, you need at minimum 3 different shades of grey. and one has to be drastically different than the other 2 in order to have the height show correctly. - [[CharlieO]]&lt;br /&gt;
 example:&lt;br /&gt;
  1) 0,0,0 &lt;br /&gt;
  2) 223, 233, 233 &lt;br /&gt;
  3) 255, 255, 255&lt;br /&gt;
&lt;br /&gt;
==General Setup Tricks==&lt;br /&gt;
=== Changing viewer start webpage in standalone mode ===&lt;br /&gt;
&lt;br /&gt;
In order to change the page that the viewer starts in /opensim/bin/ there is a http_loginform.html.example page.  Removing the .example will make this page be the start webpage which you can edit etc.  Since the login html code is no longer needed this can be modified at will.&lt;br /&gt;
&lt;br /&gt;
=== Making the server remember terrain, prims and other region storage changes after reboot ===&lt;br /&gt;
In order for the server to remember these things you must select a database to be used in the OpenSim.ini file.  For more info on setting this up see [[OpenSim_Database_support]].  The easiest to set up is SqLite which has a guide on the linked page.&lt;br /&gt;
&lt;br /&gt;
=== Placing data away from the code ===&lt;br /&gt;
A good set up, separates the code (replaced often in this project) from the data (&amp;quot;unique&amp;quot; and more valuable for the user). Things to do:&lt;br /&gt;
* separate your region definitions by using the ''regionload_regionsdir'' value in the OpenSim.ini&lt;br /&gt;
 p.e. regionload_regionsdir=&amp;quot;../OSHirvi/Regions&amp;quot; places the Regions directory besides the &amp;quot;code directory&amp;quot; in a folder called OSHirvi&lt;br /&gt;
* make your data persistent in a database (see above), this requires (again) to edit your OpenSim.ini file. You might use unique names to separate multiple setups within the database server you use.&lt;br /&gt;
 p.e. ''storage_connection_string=''&amp;quot;Data Source=localhost;Database=OSHirvi;User ID=OSHirvi;Password=password;&amp;quot;; &lt;br /&gt;
* the next step is copying/cutting OpenSim.ini itself away from the code&lt;br /&gt;
 p.e. place this file in ../OSHirvi/OpenSim.1.ini &lt;br /&gt;
* to point from your place ../ to your wanted runtime directory create a link (or some call it shortcut). If you download a newer build just change the link.&lt;br /&gt;
 p.e. ln -s opensimservercode opensim-0.5.8.5695&lt;br /&gt;
&lt;br /&gt;
Now create a script, and call it startHirvi.sh that:&lt;br /&gt;
 a) gets it current directory in the code directory, found by the link&lt;br /&gt;
 b) starts up OpenSim.exe with the required .ini file, by using the ''-inifile'' startup option. You can still add other options. &lt;br /&gt;
 cd ../opensimservercode&lt;br /&gt;
 mono OpenSim.exe -inifile ../OSHirvi/OpenSim.1.ini -gridmode=true&lt;br /&gt;
&lt;br /&gt;
Oke, done this you are left with a code directory still filled with runtime data, but this is just persistent temporary stuff that the server automatic rebuilds if it is deleted. Still a pitty there is no way to get it separate. &lt;br /&gt;
 ./addin-db-00&lt;br /&gt;
 ./addins&lt;br /&gt;
 ./OpenSim.log and many others if you run in grid-mode&lt;br /&gt;
 ./estate_settings.xml and many other configuration settings&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Tips</id>
		<title>Tips</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Tips"/>
				<updated>2008-08-26T19:49:42Z</updated>
		
		<summary type="html">&lt;p&gt;UlyssesHirvi: /* General Setup Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Users]]&lt;br /&gt;
==Terrain Tidbits==&lt;br /&gt;
===How can I flatten a region?===&lt;br /&gt;
When you have multiple regions, that you need to terraform to a certain height, the quickest way to do it is by selecting a region, and fill the terrain to the specified height:&lt;br /&gt;
 change-region YourRegionName&lt;br /&gt;
 script terrain fill 20&lt;br /&gt;
&lt;br /&gt;
''Note:'' Remember to change to the region you wish to modify if that is the only region wish to make changes to. Without using the change-region command, you may very well end up flattening multiple regions!&lt;br /&gt;
&lt;br /&gt;
As of SVN 4061&lt;br /&gt;
  terrain fill 25&lt;br /&gt;
  &lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
&lt;br /&gt;
=== What programs can I use to create terrains for OpenSim? ===&lt;br /&gt;
If you are after simple terrain files (jpg, gif, etc), you can use Photoshop or any number of freeware programs, like [http://www.gimp.org/ Gimp]. If you want more complex terrains, you will need programs that output to standard 3d raw format (aka r32 or r64). [http://www.bundysoft.com/L3DT/ L3DT] and [http://www.planetside.co.uk/terragen/ Terragen] are two of the top commercial programs for this. (anyone know of a freeware one?), or you could, with some practice, use [http://www.blender.org/ Blender]. The free version of L3DT can make terrains up to 2048x2048 in size, or 8x8 regions.&lt;br /&gt;
You can use `terrain load IMG yourfile.png` to load '''greyscale''' PNG files.  Remember to use something like `terrain rescale 0 25` to make it visible.&lt;br /&gt;
Here is some info on [[Using L3DT]] to make a terrain.&lt;br /&gt;
&lt;br /&gt;
You can also use http://lab.parkstudio.ru/terra/ if you know a bit about heightmaps and how they work.  Just set the custom landscape texture gradient to pure black and pure white and turn off water.&lt;br /&gt;
And here are some [[Free Terrains]] that you can use. Enjoy!&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the files for my terrains? ===&lt;br /&gt;
This one is actually pretty simple, but first the 'hard' answer: anywhere in the PATH will work. Lost? yeah, I was too, so... just drop the file into the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory (right where your &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; file is).&lt;br /&gt;
&lt;br /&gt;
===How do I change the terrain for a group of sims?===&lt;br /&gt;
First, the file must be in f32 (or f64?) format. This is easy to do with L3DT's export feature. (Use the RAW format and set the options to &amp;lt;tt&amp;gt;Y flipped = true&amp;lt;/tt&amp;gt; and at the bottom, change it to read 'float' instead of 'ushort'). It also needs to be a file that will cover each sim in a 256x256 layer (so, for 2x2 regions, you need a 512x512 file), It is very important that you rename the file extension to .r32 for the import to properly work.&lt;br /&gt;
Then, once you have it saved, on the &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; console, type in:&lt;br /&gt;
 script terrain load-tile &amp;lt;filename&amp;gt; &amp;lt;image X&amp;gt; &amp;lt;image y&amp;gt; &amp;lt;bottomleftsim X&amp;gt; &amp;lt;bottomleftsim y&amp;gt;&lt;br /&gt;
For example, I run a square of 4 sims in a 2x2 pattern. I started my sim placement at 0, 0 and ended at 1, 1. my line reads:&lt;br /&gt;
 &amp;lt;strike&amp;gt;script terrain load-tile simalpha.r32 512 512 0 0&amp;lt;/strike&amp;gt;&lt;br /&gt;
 script terrain load-tile simalpha.r32 2 2 0 0 ([[User:Oudrun|Oudrun]])&lt;br /&gt;
New syntax is using number of tiles instead of imagesize (one tile 256x356 pix). Above example is for a 2x2 region terrainfile.&lt;br /&gt;
&lt;br /&gt;
Next, before you log in, you may want to go to type in: *(THIS FUNCTION MAY NOT WORK)&lt;br /&gt;
 script terrain multiply 0.4&lt;br /&gt;
This should scale it down from the nearly 300 meters altitude I ran into to something a little more reasonable for the minimap.&lt;br /&gt;
&lt;br /&gt;
===How do I load a terrain file on startup?===&lt;br /&gt;
Edit the file &amp;lt;tt&amp;gt;startup_commands.txt&amp;lt;/tt&amp;gt; in the bin directory and add the above commands &amp;quot;&amp;lt;tt&amp;gt;script terrain load-tile ...&amp;lt;/tt&amp;gt;&amp;quot; and &amp;quot;&amp;lt;tt&amp;gt;script terrain multiply ...&amp;lt;/tt&amp;gt;&amp;quot; one per line.&lt;br /&gt;
&lt;br /&gt;
*** Notice this method is no longer required and should be considered a legacy function, Terrain persistance is now working 100%.&lt;br /&gt;
&lt;br /&gt;
Terrain Tidbits brought to you by Tilde, with a few questions in IRC :) - [[User:Tildeampersand|Tilde]] 10:32, 15 August 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
===How do I import into OpenSim the terrain shape of my Second Life sim?===&lt;br /&gt;
First, assure you are in the right region if you have more than one, by using: &lt;br /&gt;
&lt;br /&gt;
 change-region &amp;lt;nowiki&amp;gt;&amp;lt;regionname&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then use the command (file extension now determines the format, use .r32 for L3DT terrains)&lt;br /&gt;
&lt;br /&gt;
 script terrain load &amp;lt;filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Watch [http://archimedix.wordpress.com/2007/11/26/opensim/ this video] for a step-by-step tutorial.&lt;br /&gt;
&lt;br /&gt;
=== Other useless or useful info depending on who reads it ===&lt;br /&gt;
&lt;br /&gt;
* I found out that each point on the grey scale (0 to 255) equals approximately .23 to .25 meters in terrain height. - [[CharlieO]]&lt;br /&gt;
* Also for those who want to manually edit a png file, you need at minimum 3 different shades of grey. and one has to be drastically different than the other 2 in order to have the height show correctly. - [[CharlieO]]&lt;br /&gt;
 example:&lt;br /&gt;
  1) 0,0,0 &lt;br /&gt;
  2) 223, 233, 233 &lt;br /&gt;
  3) 255, 255, 255&lt;br /&gt;
&lt;br /&gt;
==General Setup Tricks==&lt;br /&gt;
=== Changing viewer start webpage in standalone mode ===&lt;br /&gt;
&lt;br /&gt;
In order to change the page that the viewer starts in /opensim/bin/ there is a http_loginform.html.example page.  Removing the .example will make this page be the start webpage which you can edit etc.  Since the login html code is no longer needed this can be modified at will.&lt;br /&gt;
&lt;br /&gt;
=== Making the server remember terrain, prims and other region storage changes after reboot ===&lt;br /&gt;
In order for the server to remember these things you must select a database to be used in the OpenSim.ini file.  For more info on setting this up see [[OpenSim_Database_support]].  The easiest to set up is SqLite which has a guide on the linked page.&lt;br /&gt;
&lt;br /&gt;
=== Placing data away from the code ===&lt;br /&gt;
A good set up, separates the code (replaced often in this project) from the data (&amp;quot;unique&amp;quot; and more valuable for the user). Things to do:&lt;br /&gt;
* separate your region definitions by using the ''regionload_regionsdir'' value in the OpenSim.ini&lt;br /&gt;
 p.e. regionload_regionsdir=&amp;quot;../OSHirvi/Regions&amp;quot; places the Regions directory besides the &amp;quot;code directory&amp;quot; in a folder called OSHirvi&lt;br /&gt;
* make your data persistent in a database (see above), this requires (again) to edit your OpenSim.ini file. You might use unique names to separate multiple setups within the database server you use.&lt;br /&gt;
 p.e. ''storage_connection_string=''&amp;quot;Data Source=localhost;Database=OSHirvi;User ID=OSHirvi;Password=password;&amp;quot;; &lt;br /&gt;
* the next step is copying/cutting OpenSim.ini itself away from the code&lt;br /&gt;
 p.e. place this file in ../OSHirvi/OpenSim.1.ini &lt;br /&gt;
* to point from your place ../ to your wanted runtime directory create a link (or some call it shortcut). If you download a newer build just change the link.&lt;br /&gt;
 p.e. ln -s opensimservercode opensim-0.5.8.5695&lt;br /&gt;
&lt;br /&gt;
Now create a script, and call it startHirvi.sh that:&lt;br /&gt;
 a) gets it current directory in the code directory, found by the link&lt;br /&gt;
 b) starts up OpenSim.exe with the required .ini file, by using the ''-inifile'' startup option. You can still add other options. &lt;br /&gt;
 cd ../opensimservercode&lt;br /&gt;
 mono OpenSim.exe -inifile ../OSHirvi/OpenSim.1.ini -gridmode=true&lt;/div&gt;</summary>
		<author><name>UlyssesHirvi</name></author>	</entry>

	</feed>