Tech Talk

xmir is running on OS X server with mono and the asset server on PostgreSQL. Since this is a somewhat unusual configuration we will collect and share information on this here on the Tech Talk 

The little router that could...

Finding a router that satisfies OpenSim’s requrement for NAT loopbacking the UDP protocol, or hairpinning, is really challenging and is one of the most asked technical questions in OpenSim related forums. 

After a good search we landed on the Ubiquity Network’s EdgeRouter X which is both cheap and capable. It runs Ubiquity’s EdgeOS operating system and is the smalest of a series of routers that can satisfy up to very demanding routing requirments.  Even as the most basic member of the family it can be managed by UNMS™ (Ubiquiti® Network Management System), a comprehensive controller also available on iOS and Android devices.

ubiquiti networks edgerouter x

Setting it up for OpenSim after initial configuration basically means mapping ports to hosts in the Port Forwarding tab of the Firewall/NAT tab of the Edgerouter management screen.  You also need to enable hairpin NAT in the same tab. 

As mentioned above it will loopback UDP ports, while many routers only will loopback TCP. This is even true for otherwise sophisticated and expensive Cisco business routers. 

To make everything work you may also have to do some DNS trickery if you run your own DNS behind the firewall of the router, but that is the topic for another discussion. 

One hint here is for the InternalAddress of Regions.ini to use the internal numeric IP address of the server  the region is running on, while the field ExternalHostName shall use the fully qualified domain name (and not the IP address) of the server as seen from outside the Router / NAT. Seen from the inside this fully qualified domain name must resolve to the official IP address of the Router.  To make that work you can use a record in the hosts file or a record in DNS that points to the external IP address. 

The default configuration of this router will support UDP NAT routing of about 280 Mbits/sec. By enabling hardware offloading for NAT in the router the performance increase to around 930 Mbit/sec. The drawback is that you lose the ability to set up QoS policies.  Most small grids should not have a need for this anyway, but could be required for a larger installation with many active voice users. In that case one of the other models in the Edgerouter series would be a better choice. 

You should be able to find the EdgeRouter X for around $60 or equivalent in a local store or on the net. 


Alias the loopback address for your grid on macOS

For most smaller grids and even standalone installations of OpenSim there is a need to make a loopback of your grid’s IP address for everything to work properly. Many home routers such as Apple’s AirPort Express, Airport Extreme and the TimeMachine models of the same support automatic loopback. In this case there is no need to do anything as it should work “right out of the box”.

However, many home routers don’t support automatic loopback, and business and enterprise routers usually don’t. 

Creating a loopback alias for your grid’s IP address on the servers OpenSim runs on can therefore be a necessity. 

Setting a loopback alias in terminal can be done with the command

sudo ifconfig lo0 alias <your grid IP>

Removing it is done with 

sudo ifconfig lo0 -alias <your grid IP>

The culprit is this command does not survive a reboot. The easiest way to overcome this is to create a plist and place it in /Library/LaunchDaemons

If your domain for the grid is mydomain.org and your IP address is 111.222.1.2 then the plist will look like this saved to the file org.mydomain.loopback.plist

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

  <dict>

    <key>Label</key>

    <string>org.mydomain.loopback</string>

    <key>ProgramArguments</key>

    <array>

        <string>/sbin/ifconfig</string>

        <string>lo0</string>

        <string>alias</string>

        <string>111.222.1.2</string>

    </array>

    <key>RunAtLoad</key>

    <true/>

  </dict>

</plist>

Make sure the plist has the same privileges as other files in  /Library/LaunchDaemons.  You can then load it with

sudo launchctl load /Library/LaunchDaemons/org.mydomain.loopback.plist 

To check the result issue the following command, and you should see your grid IP address listed in the result

sudo ifconfig lo0


Updated LSL language module for BBEdit

For many macOS users BBEdit is the editor of choice, and while there was a language module for the Linden Scripting Language (LSL) available, it had not been updated for a long time.  Download an updated version, where all the additions to LSL through November 2016 have been added. 

In addition all OSSL keywords and constants have been added.

The plist needs to be installed in ~Library/Application Support/BBEdit/Language Modules, and a restart of BBEdit will pick it up. 

BBEdit has been around like “forever” and was first launched April 12, 1992 on Macintosh System Software 6. 

LSL is used for scripting virtual worlds in SecondLife and OpenSim grids. 

The language module can also be used with TextWrangler

Update your browser to keep making L$ payments

Linden Lab recently made an announcement that a web browser supporting TLS v1.2 will be required from June 15, 2016 to access SecondLife’s web cashier to make payments or exchange L$. 

The most recent versions of Chrome, Firefox, Safari or Microsoft Edge all have this support, as does the most recent version of the SecondLife viewer in addition to Kokua 4.0.2 or higher. 

If in doubt, you can check your browser by visiting https://www.howsmyssl.com/ or check the support pages of your favorite viewer for accessing the SecondLife grid. 

Kokua 4.0.2 released

Kokua version 4.0.2 is available for download with support for Linux 32 and 64 bit, OS X and Windows. 

This version brings functionality up to par with the Linden 4.0.2 version of the SecondLife viewer were this is a maintenance release with focus on fixing issues and bugs for mesh uploads, playing sounds at region crossings in addition to a number of smaller issues.  

The release has the following additions for this version:

• RLV version 2.9.16.1 from Marine Kelly

• Added a preference to Enable RLV at Preferences->Kokua

• Added a menu and preference to disable jumping with the keyboard

• Fixed an issue where alt clicking on the avatar an moving the mouse would move or swing the camera a considerable distance. 

• Fixed a crash in the OS X version when receiving a teleport invitation on OpenSim 

• Corrected an issue with placing items of VAR regions on OpenSim

• Set the default hand pose to Relaxed when uploading an animation

Check the Kokua Blog for the full announcement and the change log.

Kokua 4.0.1 released

Kokua version 4.0.1 is available for download with support for Linux 32 and 64 bit, OS X and Windows. 

This version brings functionality up to par with the Linden 4.0.1 version of the SecondLife viewer were the main focus is on replacing the dated QTWebkit framework with SL Chromium Embedded Framework.  For the first time it is also possible to select a mesh item attached to another avatar – handy for finding out who made the creation.  

The release has the following additions for this version:

• RLV version 2.9.16 from Marine Kelly

• Setting the Export permissions flag for items in OpenSim

• Do not let me fly

• Inventory filter for transferrable items only

There are additional bug fixes for areas such as cache issues, media volume, space navigator in addition to a large number of fixes from the Linden version.

The changes included in SecondLife versions 4.0.1.309943 and  4.0.1.310054 are included in this version. 

Check the Kokua Blog for the full announcement.

Mac users beware - your application updater could betray you

Mac users need to be aware of a security issue with the Sparkle open source updater that is used by many Mac applications for providing updates to newer versions. 

The issue can used for a main-in-the-middle attack when downloading and installing new updates. 

Of the commonly used applications using Sparkle are Teamviewer and the VLC Media Player

Along with a flawed Sparkle version, vulnerable apps must also be running an unencrypted HTTP channel to receive software updates from offsite servers. Nefarious users capable of capturing network traffic, perhaps over an unsecured Wi-Fi connection, can leverage the Sparkle exploit to run malicious code remotely on a target computer. The publication cited work from a software engineer called Radek, who confirmed the exploit affects apps running on the latest versions of OS X 10.11 El Capitan and OS X 10.10 Yosemite.



A list has been made on Github where individuals identify applications that are found to be vulnerable. You may want to check the list and look for an update if you use one of the identified applications and versions.

SecondLife kicks off new avatar with project Bento

Linden Lab announced today that SecondLife will get a new avatar skeleton with bones that enables finger, facial and tail animations in addition to the possibility of adding more arms and legs to an avatar. 

"We are introducing extensions to the standard Second Life Avatar Skeleton that give you dozens of new bones to support both rigging and animation, and accompanying new attachment points! This extended skeleton, which is fully backward compatible with existing avatars, rigging and animation, gives creators the power to build more sophisticated avatars than ever before.”

The new skeleton is made available to content creators through sample files and a project viewer and will add the following new bones to it:

  • 11 extra limb bones for wings, additional arms, or extra legs.
  • 6 tail bones
  • 30 bones in the hands (all 10 fingers!)
  • 30 bones for facial expressions
  • 2 other new bones in the head for animating ears or antennae
  • 13 new attachment points associated with the new bones

The new skeleton imported into Cheetah 3D

Full details and download links to the project viewer and demo material in the SecondLife Blog


Fonts for OpenSim dynamic textures

OpenSim has functions to generate dynamic textures, including text, but what fonts can it use?

For OpenSim on OS X (Server) it turns out that all fonts installed in /Library/System/Fonts in addition to fonts installed in ~/Library/Fonts for the user that OpenSim is running under is available to mono and therefore to OpenSim. 

A discussion on how to make fonts available for OpenSim running on Linux and Windows can be found in the Kitely Blog, where they also provide a script for testing the fonts available. 

A modified script that includes some of the Apple installed fonts is below. Place the script in a prim and scale it so the texture with the fonts becomes readable. Fonts existing on the system will show properly formatted, the rest will be set in the same type. 

//fonttest MT


list lFonts = ["Abadi MT","Agency FB","Algerian","Andale Mono","Arial","Arial Rounded MT","Avant-Garde","Baskerville Old Face","Bauhaus 93","Beesknees ITC","Bell MT","Berlin Sans FB","Bernard MT","BernhardMod BT","Bitstream Vera Sans","Bitstream Vera Sans Mono","Bitstream Vera Serif","Blackadder ITC","Blackletter 686 BT","Book Antiqua","Bookman Old Style","Bradley Hand ITC","Braggadocio","Britannic","Broadway","Brush738 BT","Brush Script MT","Brushwood Italic","Californian FB","Calisto MT","CaslonOpenface BT","Castellar","Centaur","Century Gothic","Century Schoolbook","Chiller","Colonna MT","Comic Sans MS","Cooper","Copperplate Gothic","Courier","Courier New","Curlz MT","Desdemona","Edwardian Script ITC","Elephant","Engravers MT","EngraversGothic BT","Eras ITC","Eurostile","Felix Titling","Flexure","Footlight MT","Forte","Franklin Gothic Book","Freestyle Script","French Script MT","Garamond","Georgia","Gigi","Gill Sans MT","Gloucester MT","Goudy Old Style","Goudy Stout","Gradl","Haettenschweiler","Harlow Solid Italic","Harrington","Helvetia","High Tower Text","Hippo","Humanist521 Bold Cn BT","Impact","Imprint MT Shadow","Informal Roman","Jokerman","Juice ITC","Kino MT","Kristen ITC","Kunstler Script","LcdD","Lucida Blackletter","Lucida Calligraphy","Lucida Fax","Lucida Handwriting","Lucida Sans","Lucida Sans Typewriter","Magneto","Maiandra GD","Matisse ITC","Matura MT Script Capitals","Mead","Mercurius Script MT","Mistral","Modern No. 20","Monotype Corsiva","MS Sans Serif","News Gothic MT","Niagara Engraved","Niagara Solid","

OCR A","Old English Text MT","Onyx","Onyx BT","Oz Handicraft BT","Palace Script MT","Palatino Linotype","Papyrus","Parchment","Perpetua Titling MT","Placard Condensed","Playbill","Poor Richard","Pristina","QuickType","Rage","Ransom","Ravie","Ribbon131 Bd BT","Rockwell","Script MT","ShelleyVolante","Showcard Gothic","Snap ITC","Stencil","Swiss721 BlkEx BT","Tahoma","Tempus Sans ITC","Terminal","Times New Roman","T-Roman","Transam","Trebuchet MS","Tw Cen MT","Utopia","Verdana","Viner Hand ITC","Vivaldi","Vladimir Script","Westminster","Wide Latin","Xerox Sans Serif","Xerox Serif","Utopia","Zapf Chancery",


// Microsoft fonts

"Andale Mono", "Arial", "Arial Black", "Calibri", "Cambria", "Comic Sans MS", "Candara", "Consolas", "Constantia", "Corbel", "Courier New", "Georgia",  "Impact", "Times New Roman", "Webdings",


// urw-fonts

"Bookman", "Zapf Chancery", "URW Gothic L", "Palatino", "New Century Schoolbook",


// Apple fonts

"Helvetica","Palatino","Markerfelt","LucidaGrande","Avenir"

];


string sContentType = "vector";

string sData = "";                               

string sExtraParams = "width:1024,height:1024";

integer i;

integer j;

integer k;


draw_fonts(list fonts)

{

    sData += "PenSize 5; ";

    sData += "PenColour Red; "; 

    sData += "FontSize 14; ";    

    for (i = 0; i <= llGetListLength(fonts); ++i)

    {

        j=i;

        k=1;

        if (i>=40)

        {

            j= i-40;

            k= 250;

        }

        if (i>=80)

        {

            j= i-80;

            k= 500;

        }

        if (i>=120)

        {

            j= i-120;

            k= 750;

        }                 

        //llOwnerSay((string)i+","+(string)j+","+(string)k+llList2String(fonts,i));

        sData += "MoveTo "+(string)k+","+(string)(20*j)+"; ";

        string name = llList2String(fonts,i);

        sData += "FontName "+name+"; Text "+name+";";

    }

    osSetDynamicTextureData("", sContentType, sData, sExtraParams, 0);

}


default

{

    state_entry()

    {

        draw_fonts(lFonts);

    }

}


How to prevent OS X Server from sleeping

When running OpenSim on OS X Server – at least in grid mode, the thing you don’t want to happen is for the server to go to sleep or spin down the disks. For some reason this happened on one of my servers where the disk kept spinning down regardless of how the System Settings control panel was configured. 

To override the control panel, you can open a terminal session and type the following (with an administrator password):

sudo pmset -a disablesleep 1



hypergrid address: hop://grid.xmir.org:8002                                             xmir © 2014-2017