<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>xyzzy xyzzy... &#187; opensim</title>
	<atom:link href="http://xyzzyxyzzy.net/tag/opensim/feed" rel="self" type="application/rss+xml" />
	<link>http://xyzzyxyzzy.net</link>
	<description>...you are in a grid of twisty, little links, all alike. there's a teleport gate here.</description>
	<pubDate>Thu, 08 May 2008 14:24:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>updated mono build script for hardy heron and mono 1.9.1</title>
		<link>http://xyzzyxyzzy.net/2008/05/08/updated-mono-build-script-for-hardy-heron-and-mono-191/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/08/updated-mono-build-script-for-hardy-heron-and-mono-191/#comments</comments>
		<pubDate>Thu, 08 May 2008 12:23:55 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[libsecondlife]]></category>

		<category><![CDATA[mono]]></category>

		<category><![CDATA[opensim]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=103</guid>
		<description><![CDATA[mucking around with trying to get mono to run on hardy heron (and my custom compiled kernel1) i ended up with a mutilated mono installation. just following my previous recipe didn&#8217;t work out too well for the mono document browser&#8230;duh&#8230;:-(

so, i took sean&#8217;s shell script and gave that a spin. that worked mostly &#8212; i [...]]]></description>
			<content:encoded><![CDATA[<p>mucking around with <a href="http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/">trying to get mono to run on hardy heron</a> (and my custom compiled kernel<sup id="fnref:5b13aa4c12d034c4917904152a7c29a31"><a href="#fn:5b13aa4c12d034c4917904152a7c29a31" rel="footnote">1</a></sup>) i ended up with a mutilated mono installation. just following my <a href="http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/">previous recipe</a> didn&#8217;t work out too well for the mono document browser&#8230;duh&#8230;:-(</p>

<p>so, i took <a href="http://dague.net/2008/03/29/mono-19-install-script/">sean&#8217;s shell script</a> and gave that a spin. that worked mostly &#8212; i had to adapt it to mono 1.9.1 for the mono-doc stuff and also install additional mono packages. here&#8217;s the revised edition:</p>

<pre>
#!/bin/sh

# This is needed to pick up our built mono for commands
export PATH=/usr/local/bin:$PATH 

apt-get install build-essential bison gawk
apt-get install libglib2.0-dev
apt-get install libpng12-dev libx11-dev libfontconfig1-dev
apt-get install libfreetype6-dev libjpeg62-dev libtiff4-dev
apt-get install libungif4-dev libexif-dev libcairo2-dev
apt-get install libpango1.0-dev libgtk2.0-dev libglade2-dev
apt-get install libgnome2-dev libgnomecanvas2-dev libgnomeui-dev
apt-get install libgnomeprint2.2-dev libgnomeprintui2.2-dev
apt-get install libpanel-applet2-dev libgtksourceview-dev
apt-get install libgtkhtml3.14-dev

BUILDDIR=/usr/src/local/mono/1.9.1
mkdir -p $BUILDDIR
cd $BUILDDIR

wget -c http://go-mono.com/sources/libgdiplus/libgdiplus-1.9.tar.bz2
tar xvf libgdiplus-1.9.tar.bz2
cd libgdiplus-1.9
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://go-mono.com/sources/mono/mono-1.9.1.tar.bz2
tar xvf mono-1.9.1.tar.bz2
cd mono-1.9.1
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://switch.dl.sourceforge.net/sourceforge/nant/nant-0.86-beta1-src.tar.gz
tar xvf nant-0.86-beta1-src.tar.gz
cd nant-0.86-beta1
make install --prefix=/usr/local
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/gtk-sharp212/gtk-sharp-2.12.0.tar.bz2
tar xvf gtk-sharp-2.12.0.tar.bz2
cd gtk-sharp-2.12.0
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/gecko-sharp2/gecko-sharp-2.0-0.13.tar.bz2
tar xvf gecko-sharp-2.0-0.13.tar.bz2
cd gecko-sharp-2.0-0.13
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://go-mono.com/sources/gnome-sharp2/gnome-sharp-2.16.1.tar.gz
tar xvf gnome-sharp-2.16.1.tar.gz
cd gnome-sharp-2.16.1
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://go-mono.com/sources/gtksourceview-sharp2/gtksourceview-sharp-2.0-0.12.tar.bz2
tar xvf gtksourceview-sharp-2.0-0.12.tar.bz2
cd gtksourceview-sharp-2.0-0.12
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/gnome-desktop-sharp2/gnome-desktop-sharp-2.20.1.tar.bz2
tar xvf gnome-desktop-sharp-2.20.1.tar.bz2
cd gnome-desktop-sharp-2.20.1
./configure --prefix=/usr/local
make
make install
cd ..

cd mono-1.9.1
wget  -c http://go-mono.com/sources/monodoc/monodoc-1.9.zip
unzip monodoc-1.9.zip
cd monodoc-1.9
./configure --prefix=/usr/local
make
make install
cd ../..

wget -c http://go-mono.com/sources/mono-tools/mono-tools-1.9.tar.bz2
tar xvf mono-tools-1.9.tar.bz2
cd mono-tools-1.9
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/mono-debugger/mono-debugger-0.60.tar.bz2
tar xvf mono-debugger-0.60.tar.bz2
cd mono-debugger-0.60
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/heap-buddy/heap-buddy-0.2.tar.gz
tar xvf heap-buddy-0.2.tar.gz
cd heap-buddy-0.2
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/mono-addins/mono-addins-0.3.1.tar.bz2
tar xvf mono-addins-0.3.1.tar.bz2
cd mono-addins-0.3.1
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/monodevelop/monodevelop-1.0.tar.bz2
tar xvf monodevelop-1.0.tar.bz2
cd monodevelop-1.0
./configure --prefix=/usr/local
make
make install
cd ..
</pre>

<p><strong>note: you might want to adapt the setting of <code>BUILDDIR</code>!</strong></p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:5b13aa4c12d034c4917904152a7c29a31">
<p>yes, i&#8217;m not using the ubuntu supplied kernel as</p>

<ol>
<li>the suspend&#8211;resume stuff is just not working on my thinkpad X60(s), and</li>
<li>the iwl3945 WLAN driver just doesn&#8217;t grok our companies IEEE80211X setup <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
</ol>

<p><a href="#fnref:5b13aa4c12d034c4917904152a7c29a31" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/08/updated-mono-build-script-for-hardy-heron-and-mono-191/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>going from gutsy gibbon to hardy heron&#8230;or: muawhaha, mono is hosed&#8230;</title>
		<link>http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/</link>
		<comments>http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 21:03:38 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[libsecondlife]]></category>

		<category><![CDATA[mono]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[ubuntu hardy heron]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=100</guid>
		<description><![CDATA[just thought i&#8217;d let you participate in today&#8217;s adventure: triggered by ansgar commenting on ubuntu offering him to upgrade to ubuntu 8.04 &#8220;hardy heron&#8221; i though, &#8220;hmm, good idea, let&#8217;s do a quick update&#8221;&#8230;

&#8230;well, a couple of hours later i seemed to be back in business, hardy heron was installed on &#8220;my&#8221; x60 and i [...]]]></description>
			<content:encoded><![CDATA[<p>just thought i&#8217;d let you participate in today&#8217;s adventure: triggered by ansgar commenting on ubuntu offering him to upgrade to ubuntu 8.04 &#8220;hardy heron&#8221; i though, &#8220;hmm, good idea, let&#8217;s do a quick update&#8221;&#8230;</p>

<p>&#8230;well, a couple of hours later i seemed to be back in business, hardy heron was installed on &#8220;my&#8221; x60 and i was just about do another OpenSim build &#8212; when i noticed that <code>nant</code> was <em>seg faulting!</em> now, wait a moment, it clearly was not supposed to do that. ok, can happen, what with new libs and all that. so, let&#8217;s walk on over to <code>/usr/local/src/mono/nant-0.86b</code> and do a re-install. should be easy, peasy&#8230;</p>

<p>&#8230;except it wasn&#8217;t: mono&#8217;s compiler <code>mcs</code> kept seg faulting as well! hmmm.</p>

<p>ok. let&#8217;s reinstall mono. following <a href="http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/">my own script</a> i started the re-install &#8212; which crashed as well after about 5min of mucking around.</p>

<p>panic stations!</p>

<p>googling around it transpired that this would happen when running hardy heron with a custom compiled kernel of pre-2.6.24 vintage &#8212; which i was <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

<p>i&#8217;m happy to report that with 2.6.25 mono is running again <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/feed/</wfw:commentRss>
		<georss:point featurename="[49.592996386465515, 11.018568277359009]">49.592996386465515 11.018568277359009</georss:point>
	</item>
		<item>
		<title>console-less opensim</title>
		<link>http://xyzzyxyzzy.net/2008/04/29/console-less-opensim/</link>
		<comments>http://xyzzyxyzzy.net/2008/04/29/console-less-opensim/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 12:15:25 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[void]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=99</guid>
		<description><![CDATA[until a couple of days ago, opensim would only run in console mode: whenever you started OpenSim you would end up at a prompt inside OpenSim&#8217;s very own console &#8212; which is very convenient if you want to manage it that way. it is rather inconvenient if you want to start OpenSim as a daemon [...]]]></description>
			<content:encoded><![CDATA[<p>until a couple of days ago, opensim would only run in console mode: whenever you started OpenSim you would end up at a prompt inside OpenSim&#8217;s very own console &#8212; which is very convenient if you want to manage it that way. it is rather inconvenient if you want to start OpenSim as a daemon in the background (and control it via the <code>RemoteAdminPlugin</code>, for example).</p>

<p>as of OpenSim&#8217;s subversion release r4390 the basic support for running OpenSim without such a console is in the code base and all you need to do is invoke OpenSim with the <code>-background True</code> commandline parameter:</p>

<pre><code>% mono --debug OpenSim.exe -background True
</code></pre>

<p><strong>note: that&#8217;s just a single dash for <code>-background True</code>!</strong></p>

<p>another patch is on its way that not only adds code to properly shutdown OpenSim when the <code>admin_shutdown</code> XmlRpc method is invoked but it also adds the <code>shutdown.py</code> script:<sup id="fnref:66e281c5c65caddb065844182810c8b21"><a href="#fn:66e281c5c65caddb065844182810c8b21" rel="footnote">1</a></sup></p>

<textarea name="code" class="python:showcolumns" cols="60" rows="10">
#!/usr/bin/python
# -*- encoding: utf-8 -*-

import ConfigParser
import xmlrpclib
import optparse
import os.path

if __name__ == &#8216;__main__&#8217;:
    parser = optparse.OptionParser()
    parser.add_option(&#8217;-c&#8217;, &#8216;&#8211;config&#8217;, dest = &#8216;config&#8217;, help = &#8216;config file&#8217;, metavar = &#8216;CONFIG&#8217;)
    parser.add_option(&#8217;-s&#8217;, &#8216;&#8211;server&#8217;, dest = &#8217;server&#8217;, help = &#8216;URI for the grid server&#8217;, metavar = &#8216;SERVER&#8217;)
    parser.add_option(&#8217;-p&#8217;, &#8216;&#8211;password&#8217;, dest = &#8216;password&#8217;, help = &#8216;password for the grid server&#8217;, metavar = &#8216;PASSWD&#8217;)
    (options, args) = parser.parse_args()

    configFile = options.config
    if not configFile:
        if os.path.isfile(os.path.expanduser(&#8217;~/.opensim-console.rc&#8217;)):
            configFile = os.path.expanduser(&#8217;~/.opensim-console.rc&#8217;)
    if not configFile:
        parser.error(&#8217;missing option config&#8217;)
        sys.exit(1)

    config = ConfigParser.ConfigParser()
    config.readfp(open(configFile))

    server = config.get(&#8217;opensim&#8217;, &#8217;server&#8217;)
    password = config.get(&#8217;opensim&#8217;, &#8216;password&#8217;)
    
    if options.server: server = options.server
    if options.password: password = options.password

    gridServer = xmlrpclib.Server(server)
    res = gridServer.admin_shutdown({&#8217;password&#8217;: password})

    if res['success'] == &#8216;true&#8217;:
        print &#8217;shutdown of %s initiated&#8217; % server
    else:
        print &#8217;shutdown of %s failed&#8217; % server

</textarea>

<p>you can either pass in the server URI and password to use via commandline parameters, or you can create <code>.opensim-console.rc</code> in your home directory and set default values:</p>

<pre><code>[opensim]
server = http://127.0.0.1:9000/
password = secret
</code></pre>

<p>then all you need to do to shutdown your OpenSim server is: invoke <code>shutdown.py</code></p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:66e281c5c65caddb065844182810c8b21">
<p>to be found in <code>share/python/console/shutdown.py</code>.&#160;<a href="#fnref:66e281c5c65caddb065844182810c8b21" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/04/29/console-less-opensim/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>testing OpenSim and SecondLife voice settings</title>
		<link>http://xyzzyxyzzy.net/2008/04/22/testing-opensim-and-secondlife-voice-settings/</link>
		<comments>http://xyzzyxyzzy.net/2008/04/22/testing-opensim-and-secondlife-voice-settings/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 11:18:43 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[secondlife]]></category>

		<category><![CDATA[voice]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=97</guid>
		<description><![CDATA[last week i described how to set up asterisk &#38; opensim. a rather useful tool to test the whole setup is libsecondlife&#8217;s TestClient which (as of release 1758) contains commands to retrieve the voice account details and also to obtain the voice parcel info.

you start up your freshly compiled TestClient1&#8230;

% mono --debug TestClient --first Foo [...]]]></description>
			<content:encoded><![CDATA[<p>last week <a href="http://xyzzyxyzzy.net/2008/04/18/opensim-voice-support-the-goal-is-in-sight/">i described how to set up asterisk &amp; opensim.</a> a rather useful tool to test the whole setup is <a href="http://www.libsecondlife.org/wiki/Main_Page">libsecondlife&#8217;s TestClient</a> which (as of release 1758) contains commands to retrieve the voice account details and also to obtain the voice parcel info.</p>

<p>you start up your freshly compiled TestClient<sup id="fnref:b7d1449d1f02f561802ddec3905535c41"><a href="#fn:b7d1449d1f02f561802ddec3905535c41" rel="footnote">1</a></sup>&#8230;</p>

<pre><code>% mono --debug TestClient --first Foo --last Bar --pass secret
...
1 avatars online&gt;
</code></pre>

<p>and then you issue the <code>voiceaccount</code> command to obtain the voice account credentials:<sup id="fnref:b7d1449d1f02f561802ddec3905535c44"><a href="#fn:b7d1449d1f02f561802ddec3905535c44" rel="footnote">2</a></sup></p>

<pre><code>1 avatars online&gt; voiceaccount
DEBUG [libsecondlife]: New CAPS request to 
https://sim4042.agni.lindenlab.com:1204/cap/&#8230;. initiated
Voice Account for Ghostly Writer: 
    user &#8220;x2MOzi4T1Sq-qsfh77_Mnag==&#8221;, 
    password &#8220;XXXXXXXXXXXXXXX&#8221;
1 avatars online&gt; DEBUG [Ghostly Writer]: Voice version 1 verified
</code></pre>

<p>&#8230;this tells us the voice account user name<sup id="fnref:b7d1449d1f02f561802ddec3905535c42"><a href="#fn:b7d1449d1f02f561802ddec3905535c42" rel="footnote">3</a></sup> and password<sup id="fnref:b7d1449d1f02f561802ddec3905535c43"><a href="#fn:b7d1449d1f02f561802ddec3905535c43" rel="footnote">4</a></sup>. next you can issue the <code>voiceparcel</code> command to obtain the parce voice info details for the parcel you are currently on&#8230;</p>

<pre><code>1 avatars online&gt; voiceparcel
DEBUG [libsecondlife]: New CAPS request to 
https://sim4042.agni.lindenlab.com:12043/cap/&#8230; initiated
Parcel Voice Info request for Ghostly Writer: 
    region name &#8220;Zurela&#8221;, 
    parcel local id 26, 
    channel URI sip:confctl-243489@bhr.vivox.com
</code></pre>

<p>&#8230;which returns the region, parcel local ID, and the channel URI (the &#8220;conf call&#8221;) for that parcel.</p>

<p>repeating the whole exercise with OpenSim gives us this output:</p>

<pre><code>% mono TestClient.exe --first Foo --last Bar --pass secret \
        --loginuri http://127.0.0.1:9000/
DEBUG [libsecondlife]: New CAPS request to http://127.0.0.1:9000/ initiated
DEBUG [Foo Bar]: Setting InventoryRoot to d8913a4b-&#8230;
DEBUG [Foo Bar]: Login status: ConnectingToSim: Connecting to simulator&#8230;
INFO [Foo Bar]: Connecting to (127.0.0.1:9000)
INFO [Foo Bar]: Received a region handshake for user error (127.0.0.1:9000)
DEBUG [libsecondlife]: New CAPS request to 
http://127.0.0.1:9000/CAPS/&#8230; initiated
DEBUG [Foo Bar]: Login status: Success: Welcome to OpenSim
Logged in Foo Bar
Type quit to exit.  Type help for a command list.
1 avatars online&gt; DEBUG [Foo Bar]: Got capabilities: 
    UpdateNotecardAgentInventory 
    NewFileAgentInventory 
    FetchInventoryDescendents 
    MapLayer UpdateScriptTaskInventory 
    UpdateScriptAgentInventory ParcelVoiceInfoRequest 
    ProvisionVoiceAccountRequest
INFO [Foo Bar]: Connecting to (127.0.0.1:19999)
INFO [Foo Bar]: Received a region handshake for solid (127.0.0.1:19999)
1 avatars online&gt;
1 avatars online&gt; voiceaccount
DEBUG [libsecondlife]: New CAPS request to 
http://127.0.0.1:9000/CAPS/&#8230; initiated
Voice Account for Foo Bar: 
    user &#8220;xJ_Mn9bMsTkWxiduZkM4zSw==&#8221;, 
    password &#8220;$1$a857bc518438f33c16504831a5a47dd0&#8243;
</code></pre>

<p>and <code>voiceparcel</code>:</p>

<pre><code>1 avatars online&gt; voiceparcel
DEBUG [libsecondlife]: New CAPS request to 
http://127.0.0.1:9000/CAPS/&#8230; initiated
Parcel Voice Info request for Foo Bar: 
    region name &#8220;user error&#8221;, 
    parcel local id 1, 
    channel URI sip:54a9888b-&#8230;-85d45956bc1b@secondlife.zurich.ibm.com
</code></pre>

<p>a bit different, but in essence the same.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:b7d1449d1f02f561802ddec3905535c41">
<p>it needs to be compiled from the <a href="http://www.libsecondlife.org/wiki/SVN">libsecondlife subversion code base</a>.&#160;<a href="#fnref:b7d1449d1f02f561802ddec3905535c41" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:b7d1449d1f02f561802ddec3905535c44">
<p>i&#8217;ve changed the formatting to fit the output within the blog space, so the real output is a bit differently formatted.&#160;<a href="#fnref:b7d1449d1f02f561802ddec3905535c44" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:b7d1449d1f02f561802ddec3905535c42">
<p>the UUID of your avatar, base-64 encoded&#8230;and, yes, i cheated. can you find out which avatar i logged in for this example? ;-)&#160;<a href="#fnref:b7d1449d1f02f561802ddec3905535c42" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:b7d1449d1f02f561802ddec3905535c43">
<p>X-ed out here.&#160;<a href="#fnref:b7d1449d1f02f561802ddec3905535c43" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/04/22/testing-opensim-and-secondlife-voice-settings/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>opensim &#038; voice support: the goal is in sight&#8230;</title>
		<link>http://xyzzyxyzzy.net/2008/04/18/opensim-voice-support-the-goal-is-in-sight/</link>
		<comments>http://xyzzyxyzzy.net/2008/04/18/opensim-voice-support-the-goal-is-in-sight/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 10:51:59 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[asterisk]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[secondlife]]></category>

		<category><![CDATA[voice]]></category>

		<category><![CDATA[voiceforvw]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=89</guid>
		<description><![CDATA[if you&#8217;ve been following the opensim-commits mailing lists recently, you will have noticed that among the flurry of bug fixes and new features were a couple of commits mentioning the magic terms voice support. based on the the voice technology entry on wiki.secondlife.com, and also jhurliman&#8217;s libsl VoiceManager and VoiceTest code we have been working [...]]]></description>
			<content:encoded><![CDATA[<p>if you&#8217;ve been following the <a href="https://lists.berlios.de/mailman/listinfo/opensim-commits">opensim-commits mailing lists</a> recently, you will have noticed that among the flurry of bug fixes and new features were a couple of commits mentioning the magic terms <em>voice support.</em> based on the the <a href="http://wiki.secondlife.com/wiki/Voice/Technical">voice technology entry on wiki.secondlife.com,</a> and also <a href="http://openmetaverse.org/svn/index.cgi/libsl/trunk/libsecondlife/libsecondlife.Utilities/VoiceManager.cs?view=markup">jhurliman&#8217;s libsl VoiceManager</a> and <a href="http://openmetaverse.org/svn/index.cgi/libsl/trunk/VoiceTest/VoiceTest.cs?view=markup">VoiceTest code</a> we have been working on adding voice capabilities required to interact with Linden Lab&#8217;s SecondLife® client to OpenSim.</p>

<p>i&#8217;ll try and explain what we&#8217;ve achieved so far in the following sections. if you are impatient and want to skip the pretty pictures and high-level explanations you can use the following mini-table of contents:</p>

<ul>
<li><a href="#asterisk-opensim">asterisk-opensim integration</a></li>
<li><a href="#sip-accounts">automatic SIP account creation</a></li>
<li><a href="#conf-calls">automatic conference call setup</a></li>
<li><a href="#setup">setting it all up</a></li>
<li><a href="#setup-asteriskvoice">setting it all up: AsteriskVoiceModule</a></li>
<li><a href="#setup-asterisk-opensim">setting it all up: asterisk-opensim.py</a></li>
<li><a href="#setup-mysql">setting it all up: MySQL database</a></li>
<li><a href="#setup-asterisk">setting it all up: asterisk</a></li>
</ul>

<h3 id="asterisk-opensim">asterisk-opensim integration</h3>

<p>with the first iteration we refactored OpenSim&#8217;s capability system so that region module&#8217;s could contribute their capabilities to the seed capability and added a very simple, plain <code>VoiceModule</code>.</p>

<p>the second iteration (subversion r4236) now has a new voice module, <code>AsteriskVoiceModule</code>. also, in <code>share/python/asterisk</code> you should find a python XmlRpc server called <code>asterisk-opensim.py</code>. together with the <a href="http://www.asterisk.org/">open-source asterisk VoIP server</a> both bring us quite a bit closer to our goal of voice support for OpenSim.</p>

<p>to understand how <code>AsteriskVoiceModule</code> and <code>asterisk-opensim.py</code> and your SecondLife client play together, let&#8217;s take a look at the following figure:</p>

<p><img src="http://xyzzyxyzzy.net/wp-content/uploads/2008/04/asterisk-voice.png" alt="" title="ProvisionVoiceAccount request" width="528" height="378" class="aligncenter size-full wp-image-95" /></p>

<h3 id="sip-accounts">automatic SIP account creation</h3>

<p>when the SecondLife client logs in to the Linden Lab grid or to an OpenSim grid, among the first things it does (once it got its seed capabilties from the grid) is to ask the grid server for the voice acount details (#1, <code>ProvisionAccountRequest</code> in the figure above). these voice account details basically are your avatar&#8217;s SIP account details which your SecondLife client is going to pass on to <code>SLVoice(.exe)</code>.<sup id="fnref:82c9478e79c04c105badd511df755c921"><a href="#fn:82c9478e79c04c105badd511df755c921" rel="footnote">1</a></sup> in our case, <code>AsteriskVoiceModule</code> deals with the incoming caps request from the SecondLife client: it</p>

<ul>
<li>retrieves the avatar&#8217;s UUID and base64-encodes it, and</li>
<li>generates a one-time password (otp), and then</li>
<li>it then issues an <code>account_update</code> XmlRpc call to our <code>asterisk-opensim.py</code> XmlRpc server running on the same box as our asterisk server (#2, <code>account_update</code>). </li>
</ul>

<p><code>asterisk-opensim.py</code> checks that the XmlRpc call is correct and then updates the MySQL database that we use to configure asterisk in realtime by adding a dialplan for the UUID of our avatar (which basically creates a SIP account for our avatar)(#3, <code>update extensions_table</code>) &#8212; the MySQL database becomes effective (#4) the next time asterisk queries the database for its dialplan.</p>

<p>once <code>asterisk-opensim.py</code> has done its job, it tells <code>AsteriskVoiceModule</code> that it was successful (#5). <code>AsteriskVoiceModule</code> then returns the newly created (or updated) voice account information to your SecondLife client (#6).</p>

<p>Your SecondLife client then passes that information on to <code>SLVoice</code> which has nothing better to do than go and register with our asterisk server&#8230;</p>

<p>&#8230;well, it would, <strong>except, <code>SLVoice</code> as packaged with the normal SecondLife client does not know about our asterisk server. we&#8217;ll need to supply a <em>replacement</em> <code>SLVoice</code> client before we can claim success!</strong><sup id="fnref:82c9478e79c04c105badd511df755c922"><a href="#fn:82c9478e79c04c105badd511df755c922" rel="footnote">2</a></sup> you might want to check out the <em><a href="http://sourceforge.net/projects/voipforvw/">voipforvw</a></em> project for one example of such a replacement.</p>

<p>ok, so, we now have a SIP account, and our potential <code>SLVoice</code> replacement has registered with the asterisk server (well, once we&#8217;ve got it, that is ;-)) &#8212; how do we actually <em>get</em> voice and get to talk to other avatars? that&#8217;s what the next section is all about&#8230;</p>

<h3 id="conf-calls">automatic conference call setup</h3>

<p>lacking a proper spatial sound module for asterisk, we are just going to assign a conference call number to each and every region in our grid. sure, the idea being that whenever you avatar enters a new region, your SecondLife client will dial into the conference call for that region and leave the conference call of the old region.</p>

<p>how does your SecondLife client get the conference call number then? well, it turns out that the SecondLife client issues a <code>ParcelVoiceInfo</code> request to the grid each time it enters a new region<sup id="fnref:82c9478e79c04c105badd511df755c923"><a href="#fn:82c9478e79c04c105badd511df755c923" rel="footnote">3</a></sup>. again, the figure below illustrates what happens.</p>

<p><img src="http://xyzzyxyzzy.net/wp-content/uploads/2008/04/asterisk-voice-parcel.png" alt="" title="ParcelVoiceInfo request" width="530" height="378" class="aligncenter size-full wp-image-96" /></p>

<p>our <code>AsteriskVoiceModule</code> will receive the <code>ParcelVoiceInfo</code> call (#1) and will in turn issue a <code>region_update</code> XmlRpc call to <code>asterisk-opensim</code> (#2) containing the region&#8217;s UUID<sup id="fnref:82c9478e79c04c105badd511df755c924"><a href="#fn:82c9478e79c04c105badd511df755c924" rel="footnote">4</a></sup>.</p>

<p><code>asterisk-opensim</code> verifies the XmlRpc call from <code>AsteriskVoiceModule</code> and will then add records to asterisk&#8217;s MySQL database (#3) to</p>

<ul>
<li>create (or update) a conference call with the region UUID as the dial-in &#8220;number&#8221;</li>
<li>create appropriate dial plan entries for that conference call</li>
</ul>

<p>asterisk will pick up the changes the next time it goes through its dial plan (#4)</p>

<p>and, once done, <code>asterisk-opensim</code> returns <code>success: true</code> to <code>AsteriskVoiceModule</code> (#5), which then returns the region voice details to your SecondLife client (#6):</p>

<ul>
<li><code>region_name</code> &#8212; the name of the region your avatar is currently in</li>
<li><code>parcel_id</code> &#8212; i assume this contains the local ID of the piece of land your avatar is on</li>
<li><code>channel_uri</code> &#8212; basically, the UUID of the region plus the value of the <code>conf_domain</code> parameter from the <code>[AsteriskVoiceModule]</code> section from OpenSim.ini</li>
</ul>

<p>your SecondLife client passes the received information on to the <code>SLVoice</code> application which will then dial into to the conference call (#7) for the new region  (and leave the old conf call for the old region).<sup id="fnref:82c9478e79c04c105badd511df755c925"><a href="#fn:82c9478e79c04c105badd511df755c925" rel="footnote">5</a></sup></p>

<h3 id="setup">setting it all up</h3>

<p>to make this all work we need to</p>

<ul>
<li>enable <code>AsteriskVoiceModule</code></li>
<li>configure <code>asterisk-opensim.py</code></li>
<li>setup asterisk&#8217;s MySQL database</li>
<li>configure asterisk to query the MySQL database for its dial plan</li>
</ul>

<p>the following sections explain each step in more detail.</p>

<h3 id="setup-asteriskvoice">setting it all up: AsteriskVoiceModule</h3>

<p>to enable the <code>AsteriskVoiceModule</code> you need to add the following lines to <code>OpenSim.ini</code></p>

<pre><code>[AsteriskVoice]
enabled = true
; SIP account server domain
sip_domain = testserver.com
; SIP conf server domain
conf_domain = testserver.com
; URL of the asterisk opensim frontend
asterisk_frontend = http://testserver.com:49153/
; password for the asterisk frontend XmlRpc calls
asterisk_password = bah-humbug
; timeout for XmlRpc calls to asterisk front end (in ms)
asterisk_timeout = 3000
; salt for asterisk nonces
asterisk_salt = some_secret_here
</code></pre>

<p>what do the individual parameter mean:</p>

<dl>
<dt><code>enabled</code></dt>
<dd>if true enable the module. <strong>make sure you have the plain vanilla <code>Voice</code> module <em>disabled</em></strong></dd>

<dt><code>sip_domain</code></dt>
<dd>the SIP domain to append to UUIDs for user accounts (can be empty)</dd>

<dt><code>conf_domain</code></dt>
<dd>the SIP domain to append to UUIDs for region conference call IDs</dd>

<dt><code>asterisk_frontend</code></dt>
<dd>the URL of the <code>asterisk-opensim.py</code> front end</dd>

<dt><code>asterisk_password</code></dt>
<dd>the password required for the <code>asterisk-opensim.py</code> XmlRpc calls</dd>

<dt><code>asterisk_timeout</code></dt>
<dd><code>AsteriskVoiceModule</code> will wait this long for XmlRpc calls to <code>asterisk-opensim.py</code> to succeed 
(in ms)</dd>

<dt><code>asterisk_salt</code></dt>
<dd>salt to use for generating random one-time password for user SIP accounts</dd>
</dl>

<h3 id="setup-asterisk-opensim">setting it all up: asterisk-opensim.py</h3>

<p><code>asterisk-opensim.py</code> is configured through it&#8217;s own config file. you supply the path to the config file via the <code>--config</code> option (just invoke <code>asterisk-opensim.py</code> with <code>--help</code> to get usage instructions). the config file looks like this:</p>

<pre><code>[xmlrpc]
baseurl = http://127.0.0.1:53263/
debug   = true

[mysql]
server   = localhost
database = asterisk
user     = asterisk
password = asterisk
debug    = true

[mysql-templates]
tables = /path/to/create-table.sql
user   = /path/to/create-user.sql
region = /path/to/create-region.sql
debug    = true
</code></pre>

<p>we have three sections:</p>

<dl>
<dt><code>[xmlrpc]</code></dt>
<dd>here you configure the base URL for the <code>account_update</code> and <code>region_update</code> XmlRpc calls 
(currently you cannot supply a path name, we only take hostname and port)</dd>

<dt><code>[mysql]</code></dt>
<dd>here you configure which server to use, the name of the asterisk database, the user name and 
password of the MySQL user and whether you want debugging output or not.</dd>

<dt><code>[mysql-templates]</code></dt>
<dd>these are the path names to the templates that we use to create the required MySQL tables and
also to update user account and update region conference calls. also, you can switch on 
debugging here.</dd>
</dl>

<h3 id="setup-mysql">setting it all up: MySQL database</h3>

<p>setting up MySQL is pretty easy: you only need to create the asterisk database and the asterisk user:</p>

<pre><code># mysql -u root -p
mysql&gt; create database asterisk;
Query OK, 1 row affected (0.02 sec)

mysql&gt; use asterisk;
Database changed
mysql&gt; grant all on asterisk.* to 'asterisk'@'localhost' identified by 'asterisk';
Query OK, 0 rows affected (0.09 sec)

mysql&gt; quit;
Bye
</code></pre>

<p>that&#8217;s it. <code>asterisk-opensim.py</code> will take care of creating the necessary tables for you.</p>

<p>you might want to change the user name (the <code>'asterisk</code> part of <code>'asterisk'@'localhost'</code>) and password (again, the <code>'asterisk'</code> part in <code>identified by 'asterisk'</code>) &#8212; but make sure you adapt your <code>[asterisk-opensim.cfg](#setup-asterisk-opensim)</code> and your <a href="#setup-asterisk">asterisk configuration</a> accordingly.</p>

<h3 id="setup-asterisk">setting it all up: asterisk</h3>

<p>we need to configure asterisk to use the ODBC database interconnect (also called asterisk realtime).</p>

<p>in your asterisk configuration directory &#8212; on ubuntu that&#8217;s <code>/etc/asterisk</code> &#8212; you need to make sure that you have</p>

<pre><code>sipusers =&gt; odbc,asterisk,ast_sipfriends
sippeers =&gt; odbc,asterisk,ast_sipfriends
extensions =&gt; odbc,asterisk,extensions_table
</code></pre>

<p>in <code>extconfig.conf</code></p>

<p>then in <code>res_odbc.conf</code> you need to have the following section:</p>

<pre><code>[asterisk]
enabled =&gt; yes
dsn =&gt; asterisk-connector
username =&gt; asterisk
password =&gt; asterisk
;pooling =&gt; no
;limit =&gt; 5
pre-connect =&gt; yes
</code></pre>

<p>this assumes that your asterisk database is &#8220;asterisk&#8221;. likewise, that the MySQL username and password is &#8216;asterisk&#8217;  &#8212; if you used different values in your <a href="#setup-mysql">MySQL setup </a>, you, of course, need to reflect that here.</p>

<p>then, you need to have the following <code>extensions.conf</code>:</p>

<pre><code>[general]
static=yes
writeprotect=no
clearglobalvars=no

[globals]
CONSOLE=Console/dsp


[avatare]
switch =&gt; Realtime/@
</code></pre>

<p>finally, you need to have an empty <code>sip.conf</code>:</p>

<pre><code># mv sip.conf sip.conf.backup
# touch sip.conf
</code></pre>

<p>that&#8217;s about it, really.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:82c9478e79c04c105badd511df755c921">
<p>on windows it&#8217;s <code>SLVoice.exe</code>, on linux it&#8217;s just <code>SLVoice</code>.&#160;<a href="#fnref:82c9478e79c04c105badd511df755c921" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:82c9478e79c04c105badd511df755c922">
<p>emphasizing this so as not to get lots of emails telling me that your voice setup does not work. no, kids, we are not there yet. but we can see the city lights approaching&#8230;&#160;<a href="#fnref:82c9478e79c04c105badd511df755c922" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:82c9478e79c04c105badd511df755c923">
<p>it might actually do so, everytime you move into a new parcel (or <em>land</em> in OpenSim terminology), i haven&#8217;t checked that yet&#8230; &#8220;left as an exercise to the reader&#8221; ;-)&#160;<a href="#fnref:82c9478e79c04c105badd511df755c923" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:82c9478e79c04c105badd511df755c924">
<p>actually the region UUID plus the <code>conf_domain</code> parameter from the <code>[AsteriskVoiceModule]</code> config section in <code>OpenSim.ini</code>.&#160;<a href="#fnref:82c9478e79c04c105badd511df755c924" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:82c9478e79c04c105badd511df755c925">
<p>again, this requires a replacement <code>SLVoice</code> application, the standard one won&#8217;t do this.&#160;<a href="#fnref:82c9478e79c04c105badd511df755c925" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/04/18/opensim-voice-support-the-goal-is-in-sight/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>installing mono 1.9</title>
		<link>http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/</link>
		<comments>http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 10:13:28 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[libsecondlife]]></category>

		<category><![CDATA[mono]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/</guid>
		<description><![CDATA[to run the most recent libsecondlife release you need to have at least mono 1.9 installed. the following step-by-step recipe applies to a ubuntu 7.10 system and you should be root:

installing pre-reqs


apt-get install build-essential bison gawk
apt-get install libglib2.0-dev
apt-get install libpng12-dev libx11-dev libfontconfig1-dev 
apt-get install libfreetype6-dev libjpeg62-dev libtiff4-dev 
apt-get install libungif4-dev libexif-dev libcairo2-dev
apt-get install libpango1.0-dev libgtk2.0-dev [...]]]></description>
			<content:encoded><![CDATA[<p>to run the most recent libsecondlife release you need to have at least mono 1.9 installed. the following step-by-step recipe applies to a ubuntu 7.10 system and you should be root:</p>

<h3>installing pre-reqs</h3>

<pre>
apt-get install build-essential bison gawk
apt-get install libglib2.0-dev
apt-get install libpng12-dev libx11-dev libfontconfig1-dev 
apt-get install libfreetype6-dev libjpeg62-dev libtiff4-dev 
apt-get install libungif4-dev libexif-dev libcairo2-dev
apt-get install libpango1.0-dev libgtk2.0-dev libglade2-dev
apt-get install libgnome2-dev libgnomecanvas2-dev libgnomeui-dev
apt-get install libgnomeprint2.2-dev libgnomeprintui2.2-dev 
apt-get install libpanel-applet2-dev libgtksourceview-dev
apt-get install libgtkhtml3.14-dev
</pre>

<h3>installing libgdiplus</h3>

<pre>
wget http://go-mono.com/sources/libgdiplus/libgdiplus-1.9.tar.bz2
tar xvf libgdiplus-1.9.tar.bz2
cd libgdiplus-1.9
./configure --prefix=/usr/local
make
make install
</pre>

<h3>installing mono</h3>

<pre>
wget http://go-mono.com/sources/mono/mono-1.9.tar.bz2
tar xvf mono-1.9.tar.bz2 
cd mono-1.9
./configure --prefix=/usr/local
make
make install
</pre>

<h3>installing nant</h3>

<pre>
wget http://switch.dl.sourceforge.net/sourceforge/nant/nant-0.86-beta1-src.tar.gz
tar xvf nant-0.86-beta1-src.tar.gz
cd nant-0.86-beta1
make install prefix=/usr/local
</pre>

<p>you now have the base setup, which is sufficient for building and running libsecondlife and opensim. the following packages are add-ons that are nice-to-have but not necessary-to-have. i do recommend installing the monodoc &amp; mono-tools stuff, however &#8212; it makes live easier <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<h3>gtk-sharp</h3>

<pre>
wget http://go-mono.com/sources/gtk-sharp210/gtk-sharp-2.10.4.tar.bz2
tar xvf gtk-sharp-2.10.4.tar.bz2
cd gtk-sharp-2.10.4
./configure --prefix=/usr/local
make
make install
</pre>

<h3>gnome-sharp</h3>

<pre>
wget http://go-mono.com/sources/gnome-sharp2/gnome-sharp-2.16.1.tar.gz
tar xvf gnome-sharp-2.16.1.tar.gz
cd gnome-sharp-2.16.1
./configure --prefix=/usr/local
make
make install
</pre>

<h3>gtksourceview-sharp</h3>

<pre>
wget http://go-mono.com/sources/gtksourceview-sharp2/gtksourceview-sharp-2.0-0.12.tar.bz2
tar xvf gtksourceview-sharp-2.0-0.12.tar.bz2
cd gtksourceview-sharp-2.0-0.12
./configure --prefix=/usr/local
make
make install
</pre>

<h3>monodoc &amp; mono-tools</h3>

<p>to get the monodoc C# documentation viewer (recommended!) we need to install the monodoc package <strong>and</strong> the mono-tools package. monodoc itself needs to be installed <em>inside the mono-1.9 source directory<sup id="fnref:4e776672caeb7194216051d9f2d878dd1"><a href="#fn:4e776672caeb7194216051d9f2d878dd1" rel="footnote">1</a></sup></em> from above.</p>

<pre>
cd mono-1.9 # this is the source directory from the above
wget  http://go-mono.com/sources/monodoc/monodoc-1.9.zip
unzip monodoc-1.9.zip
cd monodoc-1.9
./configure --prefix=/usr/local
make
make install
cd ../..
</pre>

<p>next, install mono-tools:</p>

<pre>
wget http://go-mono.com/sources/mono-tools/mono-tools-1.9.tar.bz2
tar xvf mono-tools-1.9.tar.bz2
cd mono-tools-1.9
./configure --prefix=/usr/local
make
make install
</pre>

<p><code>configure</code> will mumble about gecko-sharp.dll not being build, that&#8217;s ok, just ignore it.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:4e776672caeb7194216051d9f2d878dd1">
<p>&#8230;otherwise, monodoc will not pick up the C# doc for the base assemblies.&#160;<a href="#fnref:4e776672caeb7194216051d9f2d878dd1" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/feed/</wfw:commentRss>
		</item>
		<item>
		<title>re-building opensim&#8217;s libsecondlife&#8230;</title>
		<link>http://xyzzyxyzzy.net/2008/03/13/re-building-opensims-libsecondlife/</link>
		<comments>http://xyzzyxyzzy.net/2008/03/13/re-building-opensims-libsecondlife/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 15:19:25 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[libsecondlife]]></category>

		<category><![CDATA[opensim]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/2008/03/13/re-building-opensims-libsecondlife/</guid>
		<description><![CDATA[regardless of whether you check out opensim from a source repository or are using prebuild packages, opensim will always bring along its own libsecondlife.dll. as of the time of this writing this libsecondlife.dll is the subversion 1550 snapshot from libsecondlife&#8217;s subversion repo.

as mentioned in an earlier post, opensim&#8217;s libsecondlife sources are not contained within the [...]]]></description>
			<content:encoded><![CDATA[<p>regardless of whether you check out opensim from a source repository or are using prebuild packages, opensim will always bring along its own libsecondlife.dll. as of the time of this writing this libsecondlife.dll is the subversion 1550 snapshot from <a href="http://www.libsecondlife.org/wiki/SVN">libsecondlife&#8217;s subversion repo.</a></p>

<p>as <a href="http://xyzzyxyzzy.net/2008/02/12/installing-opensim-on-powerpcor-of-eggs-and-virtual-worlds/">mentioned in an earlier post,</a> opensim&#8217;s libsecondlife sources are not contained within the main opensim source tree, you need to check those out separately:</p>

<pre><code>% svn co http://opensimulator.org/svn/opensim-libs/libsl1550 opensim-libs
</code></pre>

<p>then, just go into the newly checked out opensim-libs directory and run <code>nant</code> to build libsecondlife.dll&#8230;</p>

<pre><code>% cd opensim-libs
% nant
</code></pre>

<p>&#8230;and once it&#8217;s done, copy <code>bin/libsecondlife.dll</code> to your <code>opensim/bin</code> directory.</p>

<p>done. enjoy.</p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/03/13/re-building-opensims-libsecondlife/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>being slartibartfast&#8230;</title>
		<link>http://xyzzyxyzzy.net/2008/03/10/being-slartibartfast/</link>
		<comments>http://xyzzyxyzzy.net/2008/03/10/being-slartibartfast/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 22:12:26 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[l3dt]]></category>

		<category><![CDATA[mosaic tiling]]></category>

		<category><![CDATA[multi-region]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[terrain maps]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/2008/03/10/being-slartibartfast/</guid>
		<description><![CDATA[tonight i felt like being slartibartfast &#8212; yep, the urge to
create some fjords, mountain ranges, and islands was just
overwhelming. unfortunately, the previous routes to scratching that
itch were blocked: using L3DT to generate a nice looking landscape
(all by just twiddling a couple of sliders) and then loading the
resulting terrain map on to the 4&#215;4 island grid [...]]]></description>
			<content:encoded><![CDATA[<p>tonight i felt like being <a href="http://en.wikipedia.org/wiki/Slartibartfast">slartibartfast</a> &#8212; yep, the urge to
create some fjords, mountain ranges, and islands was just
overwhelming. unfortunately, the previous routes to scratching that
itch were blocked: using <a href="http://www.bundysoft.com/L3DT/">L3DT</a> to generate a nice looking landscape
(all by just twiddling a couple of sliders) and then loading the
resulting terrain map on to the 4&#215;4 island grid running on my trusted
X60. that route was blocked because OpenSim&#8217;s new terrain module
currently doesn&#8217;t do multi-region terrain loads <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

<p>yet &#8212; <a href="http://www.askmen.com/cars/car_lists_150/182_car_list.html">top gear moment!</a> &#8212; how hard can it be to split out the
terrain map from L3DT into region sized parcels and then just write a
nice little script to load them individually?</p>

<p>well, it turns out: not very hard.</p>

<h3>step-by-step from scratch to finished grid&#8230;</h3>

<p>someone on the #opensim-dev IRC channel mentioned the other day, that
<a href="http://www.bundysoft.com/L3DT/">L3DT</a> would run fine under wine on linux. having bought the
professional version (just USD 34.95 or so),<sup id="fnref:4e1fe62ab3304646f3385c036609feb92"><a href="#fn:4e1fe62ab3304646f3385c036609feb92" rel="footnote">1</a></sup> i took note, as so far i
had just been running it under vmware. sure enough, on l3dt&#8217;s web site
is a <a href="http://www.bundysoft.com/docs/doku.php?id=l3dt:userguide:linux">HOWTO describing the linux setup</a>.</p>

<h3>install wine &amp; then L3DT</h3>

<p>so, first install wine (didn&#8217;t have a need for it on my box until
now):</p>

<pre><code># apt-get install wine
</code></pre>

<p>next, download the development version of l3dt from the bundysoft
website, then run the installer through wine:<sup id="fnref:4e1fe62ab3304646f3385c036609feb91"><a href="#fn:4e1fe62ab3304646f3385c036609feb91" rel="footnote">2</a></sup></p>

<pre><code># wine /downloads/L3DT_PRO_dev-2.5.3.1.exe
</code></pre>

<p>that will install a runable l3dt on your ubuntu box. start it up and
we are ready for that slartibartfast feeling.</p>

<h3>becoming slartibartfast</h3>

<p>either via &#8220;file->new project&#8221; or by clicking on the &#8220;new map&#8221; icon, start a new, well, map. you should be faced with the following dialog box:</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-01.jpg' alt='l3dt-01.jpg' /></p>

<p>select &#8220;design/inflate&#8221; and then click on <em>next</em>. on the <em>design map size</em> dialog box which should now be facing enter the desired grid size you want to cover &#8212; highlighted below in red &#8212; and make sure that the <em>horizontal scale</em> is <strong>1.00 m</strong>. note, too, that the one OpenSim region translates to a 4&#215;4 L3DT area; in the screen shot below, i&#8217;m aiming for a 4&#215;4 OpenSim grid area, thus, i need to have a 16&#215;16 L3DT area:</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-02.jpg' alt='l3dt-02.jpg' /></p>

<p>once you have entered your value, click <em>next</em> and you should get to the <em>design map parameters</em> dialog, which is a bit of a misnomer, i think, it really should be called <em>slartibartfast parameters</em> as this is where we get to be slartibartfast:</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-03.jpg' alt='l3dt-03.jpg' /></p>

<p>here, you can muck around and tune your future grid terrain to your hearts content. just pick and choose (you can always restart). once you are done and want to give it a go, click <em>next</em> again &#8212; leading you to the <em>calculation queue</em> dialog, where you tell L3DT what maps you are interested in. you absolutely do need the <em>heightfield</em> map (this is going to be what we load into opensim later), i always turn on everything <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-04.jpg' alt='l3dt-04.jpg' /></p>

<p>again, click on <em>next</em> and you will get to the <em>water flooding</em> dialog:</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-05.jpg' alt='l3dt-05.jpg' /></p>

<p>i like my water levels at 20m and am a huge fan of the sea, thus the entries in the highlighted area. <em>next</em> and we arrive at the <em>texture settings</em> dialog:</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-06.jpg' alt='l3dt-06.jpg' /></p>

<p>if you want to, click on the <em>make high-resolution texture</em> check box (i usually do). click through the next dialogs and then watch L3DT do its job.</p>

<p>sooner or later<sup id="fnref:4e1fe62ab3304646f3385c036609feb93"><a href="#fn:4e1fe62ab3304646f3385c036609feb93" rel="footnote">3</a></sup> your terrain will be ready! my terrain looked like this:</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-07.jpg' alt='l3dt-07.jpg' /></p>

<h3>exporting our terrain</h3>

<p>next, we need to export our newly created terrain. to do so, first save your projects via &#8220;file->save->save project&#8221; or via the &#8220;save project&#8221; icon. then, select the heightfield map via the map selection icon&#8230;</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/sel-map.jpg' alt='sel-map.jpg' /></p>

<p>&#8230;and select the <em>heightfield</em> entry&#8230;</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-08.jpg' alt='l3dt-08.jpg' /></p>

<p>&#8230;which should update the display area to show the heightfield map &#8212; which looks a bit like an x-ray of our terrain:</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-09.jpg' alt='l3dt-09.jpg' /></p>

<p>next, we need to export the map using the RAW format. click on the &#8220;export this map&#8221; icon&#8230;</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/export-map.jpg' alt='export-map.jpg' /></p>

<p>&#8230;and in the <em>export map</em> dialog click on <em>split map into tiles (mosaic map)</em> (highlighted in red below) and enter a name for the terrain map in the  <em>file name</em> field (highlighted in yellow, i used <code>slartibartfast</code>).</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-9-5.jpg' alt='l3dt-9-5.jpg' /></p>

<p>click <em>next</em> and select the <strong>RAW</strong> file format (highlighted in red) and adjust the tile size to <strong>256</strong> and click on <em>options</em>&#8230;</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-11.jpg' alt='l3dt-11.jpg' /></p>

<p>select the <em>Mode (ComboSelector)</em> entry by double clicking and change it to <strong>32-bit floating-point (metres)</strong>&#8230;</p>

<p><img src='http://xyzzyxyzzy.net/wp-content/uploads/2008/03/l3dt-12.jpg' alt='l3dt-12.jpg' /></p>

<p>and then click on <em>OK</em> and finish the rest of the dialog by clicking on <em>OK</em> again.</p>

<p>you should end up with a set of files named <code>slartibartfast_x0y0.raw</code>, <code>slartibartfast_x0y1.raw</code>, and so forth.</p>

<h3>importing the works into opensim</h3>

<p>finally, we are about to import our <em>opus magnus</em> into opensim. to do that we need to</p>

<ul>
<li>rename all <code>*.raw</code> files to <code>*.r32</code> so that opensim does not mistake them for LindenLab raw files</li>
<li>create a command script to load the terrain into each region separately.</li>
</ul>

<p>first, though, copy the <code>*.raw</code> files to the <code>bin</code> directory of your OpenSim installation:<sup id="fnref:4e1fe62ab3304646f3385c036609feb94"><a href="#fn:4e1fe62ab3304646f3385c036609feb94" rel="footnote">4</a></sup></p>

<pre><code># cp *.raw /opt/opensim/bin
</code></pre>

<p>next, rename:</p>

<pre><code># for i in *.raw ; do  r=$(basename $i .raw); mv $i $r.r32; done
</code></pre>

<p>now, create a command script for opensim which looks roughly like this:<sup id="fnref:4e1fe62ab3304646f3385c036609feb95"><a href="#fn:4e1fe62ab3304646f3385c036609feb95" rel="footnote">5</a></sup></p>

<pre><code>change-region Xanadu Blue
script terrain load slartibartfast_x0y0.r32
change-region Shangri-La
script terrain load slartibartfast_x0y1.r32
change-region Torchwood
script terrain load slartibartfast_x1y0.r32
change-region 13th Floor
script terrain load slartibartfast_x1y1.r32
change-region Skybreaker
script terrain load slartibartfast_x2y0.r32
change-region Hyperion
script terrain load slartibartfast_x2y1.r32
change-region Aurora
script terrain load slartibartfast_x3y0.r32
change-region Flotsam
script terrain load slartibartfast_x3y1.r32
change-region Shutdown
script terrain load slartibartfast_x0y2.r32
change-region User Error
script terrain load slartibartfast_x0y3.r32
change-region Core Dump
script terrain load slartibartfast_x1y2.r32
change-region Division by Zero
script terrain load slartibartfast_x1y3.r32
change-region Gondor
script terrain load slartibartfast_x2y2.r32
change-region Misty Mountains
script terrain load slartibartfast_x2y3.r32
change-region Rivendell
script terrain load slartibartfast_x3y2.r32
change-region The Shire
script terrain load slartibartfast_x3y3.r32
</code></pre>

<p>save.</p>

<p>start up OpenSim, and once you have the console prompt, issue</p>

<pre><code>Region# :
command-script slartibartfast.cmd
</code></pre>

<p>this should result in quite a bit of output by opensim telling you that it&#8217;s doing the terraforming!</p>

<h3>a new landscape!</h3>

<p>login to your opensim grid and explore your new terrain!</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:4e1fe62ab3304646f3385c036609feb92">
<p>the standard, free, version is perfectly fine for generating terrain maps for a single region. to cover larger grid areas, you either need to wait for OpenSim to support it again, or get the professional edition which supports mosaic tiling &#8212; that is, you generate the terrain map for the intended grid area and then let L3DT split it into region sized terrain maps.&#160;<a href="#fnref:4e1fe62ab3304646f3385c036609feb92" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:4e1fe62ab3304646f3385c036609feb91">
<p>in case you are using the standard, free, version, that would be <code>L3DT_SE_dev-2.5.3.1.exe</code> instead.&#160;<a href="#fnref:4e1fe62ab3304646f3385c036609feb91" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:4e1fe62ab3304646f3385c036609feb93">
<p>that, i&#8217;m afraid, depends on the horse-power of your system, but even on a dual-core CPU it will take a couple of minutes.&#160;<a href="#fnref:4e1fe62ab3304646f3385c036609feb93" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:4e1fe62ab3304646f3385c036609feb94">
<p>on my box, opensim lives in <code>/opt/opensim</code>.&#160;<a href="#fnref:4e1fe62ab3304646f3385c036609feb94" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:4e1fe62ab3304646f3385c036609feb95">
<p>adapt the region names to your region names, otherwise this will be a frustrating exercise&#8230;&#160;<a href="#fnref:4e1fe62ab3304646f3385c036609feb95" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/03/10/being-slartibartfast/feed/</wfw:commentRss>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>installing OpenSim on PowerPC&#8230;or: of eggs and virtual worlds</title>
		<link>http://xyzzyxyzzy.net/2008/02/12/installing-opensim-on-powerpcor-of-eggs-and-virtual-worlds/</link>
		<comments>http://xyzzyxyzzy.net/2008/02/12/installing-opensim-on-powerpcor-of-eggs-and-virtual-worlds/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 19:36:53 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[research]]></category>

		<category><![CDATA[big endian]]></category>

		<category><![CDATA[eggs]]></category>

		<category><![CDATA[intel x86]]></category>

		<category><![CDATA[jonathan swift]]></category>

		<category><![CDATA[libsecondlife]]></category>

		<category><![CDATA[lilliput]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[powerpc]]></category>

		<category><![CDATA[ppc]]></category>

		<category><![CDATA[virtual worlds]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/2008/02/12/installing-opensim-on-powerpcor-of-eggs-and-virtual-worlds/</guid>
		<description><![CDATA[we noticed last week (well, actually a bit longer than that) that OpenSim would not really care to run on PowerPC platforms. the symptoms were that (a) it would die with an array index exception on restart, and (b) the SL client would crash horribly when connecting to the region before the restart  with [...]]]></description>
			<content:encoded><![CDATA[<p>we noticed last week (well, actually a bit longer than that) that OpenSim would not really care to run on PowerPC platforms. the symptoms were that (a) it would die with an array index exception on restart, and (b) the SL client would crash horribly when connecting to the region before the restart <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> with most of the development going on on intel boxes, suspecting endian issues was not really rocket-science.</p>

<p><strong>short detour:</strong> when we talk of &#8220;endian issues&#8221; we refer to the way a CPU organizes data internally. to quote <a href="http://en.wikipedia.org/wiki/Endianness">wikipedia:</a></p>

<blockquote>
  <p><em>endianness is the byte (and sometimes bit) ordering used to represent some kind of data. Typical cases are the order in which integer values are stored as bytes in computer memory (relative to a given memory addressing scheme) and the transmission order over a network or other medium. When specifically talking about bytes, endianness is also referred to simply as byte order.</em></p>
</blockquote>

<p>the terms <em>big endian</em> and <em>little endian</em> are much older than computers, much older. they <a href="http://en.wikipedia.org/wiki/Endianness#Discussion.2C_background.2C_etymology">originate with the inhabitants of jonathan swift&#8217;s Lilliput and Blefuscu</a> and refer to the way they would crack an egg open: big endians started at the big end.</p>

<p>for reasons shrouded in the fogs of history, intel x86 CPUs are little endian, motorola CPU generally are big endian as are PowerPC CPUs.[^1]</p>

<p>anyhow, <strong>to return to our story</strong>, we were suspecting endianess issues with OpenSim &#8212; and the underlying libsecondlife. following up on clues provided by <a href="https://wiki.secondlife.com/wiki/User:Neas_Bade">Neas Bade</a> i started looking at openjpeg-libsl (the native code library responsible for doing most of the JPEG2000 coding). that turned out to be a dead end more or less.</p>

<p>turning my attention to the terrain handling, it transpired that the terrain when generated was looking fine (you can save a generated terrain via OpenSim&#8217;s region console &#8212; which i did and then examined it using [the gimp][]). loading it back in from the data stores (OpenSim supports a number of data storage adapters) however, returned a corrupted terrain image. that lead to fix #1: serialization of the terrain in the SQLite and MySQL data storage adapters was fine, but reification was borked.[^2]</p>

<p>unfortunately, while OpenSim would now restart fine, we still could not connect as the client would barf violently on the terrain data OpenSim was handing out <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> looking at the code in OpenSim that supplied the client with the ill-digested terrain dope it transpired that this time it was libsecondlife that was cracking the eggs open from the little end only. actually, it was doing so in two places: LLUUIDs were not properly serialized and packed bits were completely oblivious of the fact that one could start cracking the eggs open at the big end. bug fixes #2 and #3 (this time to libsecondlife).[^3][^4]</p>

<p>so, what steps do you need to take to get OpenSim running on PPC? here are the instructions:</p>

<ol>
<li>check out opensim itself: 

<ul>
<li><code>svn co http://opensimulator.org/svn/opensim/trunk opensim</code></li>
<li>build according to instructions

<ul>
<li><code>./runprebuild.sh; nant</code></li>
</ul></li>
</ul></li>
<li>check out opensim-libs: 

<ul>
<li><code>svn co http://opensimulator.org/svn/opensim-libs/libsl1550 opensim-libs</code></li>
<li>build: <code>cd opensim-libs; nant</code></li>
<li>you should end up with a sparkling new libsecondlife.dll in <code>bin</code></li>
<li>copy that one over into the <code>opensim/bin</code> directory.</li>
</ul></li>
<li>enter <code>opensim-libs/openjpeg-libsl</code> and do

<ul>
<li>a <code>make</code>, and then</li>
<li>copy the newly built <code>libopenjpeg-libsl-2.1.2.0.so</code> into <code>opensim/bin</code> as well</li>
</ul></li>
<li>almost there! enter <code>opensim/bin</code> and edit libsecondlife.dll.config and remove the <code>cpu="x86"</code> tag in the last dllmap line, so that it looks like this:</li>
</ol>

<textarea name="code" class="xml:showcolumns" cols="60" rows="10">
<configuration>
    <dllmap os="osx" dll="openjpeg-libsl.dll" target="libopenjpeg-libsl-2.1.2.0.dylib" />
    <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-libsl.dll"  
               target="libopenjpeg-libsl-2.1.2.0-x86_64" />
    <dllmap os="!windows,osx" dll="openjpeg-libsl.dll" target="libopenjpeg-libsl-2.1.2.0" />
</configuration>
</textarea>

<p>start OpenSim.exe and enjoy.</p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/02/12/installing-opensim-on-powerpcor-of-eggs-and-virtual-worlds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OpenSim&#8230;or: your very own secondlife grid in 3 easy steps&#8230;</title>
		<link>http://xyzzyxyzzy.net/2008/01/25/opensimor-your-very-own-secondlife-grid-in-3-easy-steps/</link>
		<comments>http://xyzzyxyzzy.net/2008/01/25/opensimor-your-very-own-secondlife-grid-in-3-easy-steps/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 14:45:05 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[railway tycoon]]></category>

		<category><![CDATA[red light district]]></category>

		<category><![CDATA[regattas]]></category>

		<category><![CDATA[secondlife]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/2008/01/25/opensimor-your-very-own-secondlife-grid-in-3-easy-steps/</guid>
		<description><![CDATA[want to run your own secondlife grid? not satisfied with that lousy 512m² plot in the middle of that sleazy, red-light district sim somewhere on a remote secondlife island on the LindenLab grid? ever dreamed of becoming a railway tycoon and running a railway company in secondlife &#8212; but couldn&#8217;t effort those 16 islands because [...]]]></description>
			<content:encoded><![CDATA[<p>want to run your own secondlife grid? not satisfied with that lousy 512m² plot in the middle of that sleazy, red-light district sim somewhere on a remote secondlife island on the LindenLab grid? ever dreamed of becoming a railway tycoon and running a railway company in secondlife &#8212; but couldn&#8217;t effort those 16 islands because you weren&#8217;t a wealthy railway tycoon in RL to begin with? how about that 4&#215;4 sim grid with a couple islands and lots and lots and lots of sea to stage those regattas?</p>

<p>well, here&#8217;s your chance to become a grid master, a grid superlord &#8212; just 3 easy steps to start your own grid:</p>

<ul>
<li>install mono &amp; subversion (a simple <code>apt-get install mono subversion</code> on ubuntu boxes)</li>
<li>check out OpenSim: </li>
</ul>

<pre>
        % svn co http://opensimulator.org/svn/opensim/trunk opensim
        % cd opensim
        % ./runprebuild.sh
        % nant
        % cd bin
        % mono ./OpenSim.exe
</pre>

<ul>
<li>connect to your now running OpenGrid like so:</li>
</ul>

<pre>
        % secondlife -loginuri http://127.0.0.1:9000
</pre>

<p>voila! your very own &#8220;grid&#8221; &#8212; admittedly not yet that 16 region grid i mention in the beginnig, but!, we are getting there <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>coming up next: <em>i want more regions!</em></p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/01/25/opensimor-your-very-own-secondlife-grid-in-3-easy-steps/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 2.069 seconds -->
