installare mono 2.4.3 per opensim

Mono e’ il motore che permette al simulatore opensim di funzionare.

La configurazione suggerita per cyberlandia ha come sistema operativo Ubuntu e la maggior parte delle isole sono installate su macchine a basso costo di diversi provvider (ovh, linode) solitamente macchine virtuali (vengono simulate da un server fisico, e’ tutto un giro di simulatori questo metamondo :)

Mono attualmente e’ alla versione 2.4.3 – su cyberlandia siamo alla versione 2.2. Con questo post vi insegnero ad aggiornarlo.

La versione 2.4.3 e’ piu performante e diminuisce di molto i crash. Per le versioni recenti di OpenSim e’ praticamente obbligatorio utilizzarlo.

Al solito vi elenco i comandi per ottenere mono funzionante.

ci posizioniamo come utente root nella cartella opensim

cd /home/opensim

creiamo una cartella e ci entriamo

mkdir mono-2.4

cd mono-2.4

effettuaiamo il download di libgdiplus e di mono dai sorgenti

wget http://mono.ximian.com/monobuild/snapshot/snapshot_sources/libgdiplus/libgdiplus-140293.tar.bz2

wget http://mono.ximian.com/monobuild/snapshot/snapshot_sources/mono/mono-142439.tar.bz2

scompattiamo

tar -xjf libgdiplus-140293.tar.bz2

tar -xjf  mono-142439.tar.bz2


vengono create due cartelle: libgdiplus-140293 e mono-142439

dove dobbiamo procedere con la compilazione:

cd libgdiplus-140293

./configure

make

make install

i comandi make e make install durano diversi minuti … aspettare che finisca

passiamo ora a compilare mono, purtroppo un bug non ancora corretto da dei problemi durante i teleport, nel caso si utilizzino delle macchine con piu schede di rete, bisogna prima della compilazione di mono correggere un file:

cd ..

cd mono-142439/mcs/class/System/System.Net.NetworkInformation/

editare il file NetworkInterface.cs usare vi o nano oppure scaricarlo in locale con filezilla,

individuare le righe:

————————

if (((int)sockaddrll.sll_halen) > sockaddrll.sll_addr.Length){
Console.Error.WriteLine (”Got a bad hardware address length for an AF_PACKET {0} {1}”,
sockaddrll.sll_halen, sockaddrll.sll_addr.Length);
continue;

——————

e sostituirle con

if (((int)sockaddrll.sll_halen) > sockaddrll.sll_addr.Length){
Console.Error.WriteLine (”Got a bad hardware address length for an AF_PACKET {0} {1}”,
sockaddrll.sll_halen, sockaddrll.sll_addr.Length);
next = addr.ifa_next;
continue;

salvare il file o sostituirlo quindi si puo procedere con la compilazione di mono:

./configure

make

make install

a questo punto il vostro mono e’ aggiornato alla 2.4.3

e si possono riavviare le isole con la nuova versione.

accesso con un web browser primo prototipo funzionante

Ho installato il plugin per firefox e internet explorer 7 , sviluppato da 3di che permette l’accesso ad una grid opensim (in questo caso Cyberlandia) utilizzando esclusivamente il browser.

E’ ancora in una fase embrionale, non visualizza le textures e non memorizza gli oggetti in locale. Pero e’ molto interessante per le applicazioni che si potranno sviluppare intorno.

per provarlo clicca qui: http://www.cyberlandia.net/viewer/

per installare il plugin, nel caso non venga fatto in automatico scarica e installa

versione per Firefox
versione per Internet explorer

si il japonese non e’ facile, lo so, ma basta premere quello che sembra essere un ‘avanti e spuntare le caselline con cui si da l’assenso affinche la nostra anima sia preda di draghi colorati.

alla fine riavvia il browser

Devi naturalmente essere prima registrato su cyberlandia e interpretare il japonese per ora non esiste in italiano e se lo si vuole attivare in inglese bisogna effetturare un accesso ed impostare dopo la lingua decrittando i vari menu.

Buon divertimento.

OpenSim 10060 in download

Nella sezione downloads trovate il file di aggiornamento preconfigurato per le regioni di Cyberlandia. il link diretto per i piu pigri è: http://www.cyberlandia.net/comunity/downloads/opensim.zip

La release precedente (9818), si era dimostrata particolarmente stabile, e non ho rilasciato sinora volutamente una revisione affidabile, anche se molti hanno migrato per gradi a revisioni successive. La 9818, aveva dei problemi di apparence (serviva spesso un rebake) e non permetteva il terraforming manuale a causa di un baco. Pero si e’ rivelata una roccia dal punto di vista della stabilita’, crash pochissimi e funzionalita tutto sommato piu che accettabili. Pero il mondo va avanti ed e’ giusto seguire i progressi di Opensim.

Opensim attualmente e’ alla versione 0.6.6 (10114) sino alla versione 10104 si puo aggiornare compilandosi il trunk svn, oltre e’ incompatibile con la versione della grid di Cyberlandia (10060). Ho provato un aggiornamento della grid, ma ci sono delle instabilita che lo sconsigliano, aggiornando non funziona piu il voice e ho notato dei crash sospetti ed un instabilita generale per quanto riguarda l’inventory. Versioni precedenti alla 10060 davano problemi quando un avatar entrava od usciva dalla regione. Questa pare invece ’stabile’. Ci sono dei problemi con gli oggetti fisici (solo Allah e’ perfetto) per i quali apriro una segnalazione sul bug tracker di opensimulator.

Per aggiornare, basta migrare i file xml dentro la cartella regions, e modificare il file OpenSim.ini
sostituendo al posto dei +++ la password del database MySql.

Se il comando mono –version riporta una una release diversa dalla 2.2 bisogna aggiornare Mono, cosa praticamente obbligatoria pena instabilta della regione.

Per quanto riguarda l’Hyperblog aggiornero anche questo alla 10060 i prossimi giorni.

Vi invito come sempre a segnalare sul Forum eventuali problemi riscontrati.

Tutto a zero Roundel

Il money module e’ stato levato dalle ultime release di OpenSimulator, dopo diverse discussioni sull opportunita di implementare o meno una economia reale magari legata a paypal.

Attualmente il modulo money e’ spiegato qui: http://opensimulator.org/wiki/Money

in Soldoni :) dato che un economia fatta con una moneta finta non ha alcun senso, tanto vale levare via il supporto e abilitare la vendita a zero.

Come mi e’ stato giustamente segnalato, con l’ultima update alla 9818 non e’ piu possibile vendere alcunche’, mi era sfuggito nella configurazione, e lo inseriro nel prossimo update che spero di mettere online a breve.

Per chi vuole abilitare la possibilità di vendere oggetti a zero bisogna modificare il file OpenSim.ini ed inserire nella sezione:

[Economy]
SellEnabled = “true”

riavviando poi la regione, ripristina la vendita di oggetti a costo zero, cosa indispensabile per regalare oggetti, freebies ed altro.

Coordinate nuove – un primo utilizzo pratico

Vi segnalo un sito: http://www.gridhop.net/ serve a segnalare ed utilizzare degli hyperlink.
Aprendolo dal browser interno ad hippo si ottiene una maschera di questo tipo:

gridhop

Scegliendo la grid e la regione di destinazione, con un clic su hypergrid jump si ottiene la landmark ed il relativo teleport attivo.

Ho inserito la regione cyberlandia, ma tutte le quasi 200 regioni della nostra grid sono abilitate all Hypegrid e facilmente inseribili, in modo da avere dei teleport diretti dall esterno. Invito tutti gli owner a farlo, potete mettere come slurl, l’indirizzo dns o l’ip esterno del server. Tutte le regioni di Cyberlandia sono raggiungiungibili con una slurl secondlife:nome_o_ip:9000:nomeregione/

Cyberlandia – cambio di coordinate …

Cyberlandia come grid e’ centrata 1000.1000.  Osgrid e’ centrata 10000.10000 (uno zero in piu).

Questo non permette a causa di un bug del client di teleportarsi direttamente tra cyberlandia e ed osgrid.

Non solo non potendosi fare salti maggiori di 4096 caselline, per andare in hypergrid da Cyberlandia ad Osgrid sono necessarie due isole posizionate rispettivamente a coordinate 3000.3000 e a 7000.7000.

Osgrid e’ attualmente la maggiore grid opensim come dimensioni (2000 isole) e come residenti (18.000 iscritti).  Credo che sia importante avere piu scambi possibile, in un ottica di internazionalizzazione.

Quindi, cambiamo le coordinate delle regioni di cyberlandia.  Spostandoci a 7000.7000

istruzioni su come fare:

il file di definizione delle regioni sono contenuti nella cartella ../bin/Regions

per ogni isola é presente un file con estensione xml (ad esempio ho una regione che si chiama pippo, dentro region trovero pippo.xml). il contenuto e’ simile a questo:

<Root>
<Config sim_UUID=”bae269e0-5273-11dd-ae16-0800200c9a66″ sim_name=”Pippo” sim_location_x=”1006″ sim_location_y=”1005″ internal_ip_address=”0.0.0.0″ internal_ip_port=”9102″ allow_alternate_ports=”false” external_host_name=”nome.miodns.org” master_avatar_uuid=”d2c2b645-35aa-4c7e-a236-dfce55ed74ef” estate_covanant_uuid=”d2c2b645-35aa-4c7e-a236-dfce55ed74ef” master_avatar_first=”NomeOwner” master_avatar_last=”CognomeOwner” master_avatar_pass=”Password” lastmap_uuid=”4ed7f375-2c52-4256-96ad-150b5491cb01″ lastmap_refresh=”1232163167″ />
</Root>

in particolare i parametri:
sim_location_x=”1006″ sim_location_y=”1005″

per centrarci su 7000.7000 andra editato e trasformato in:
sim_location_x=”7006″ sim_location_y=”7005″

Bisogna quindi modificare il file OpenSim.ini

alla sezione:

[Network]

default_location_x = 1000
default_location_y = 1000

va modificato in

default_location_x = 7000
default_location_y = 7000

La via piu semplice e’ spostare fuori dal server con filezilla i file, modificarli,  reinserirli e riavviare le sim.

Qualora emergessero problematiche segnaliamole sul forum.

Cyberlandia – grid aggiornata rev 9818

La grid e’ aggiornata alla rev. 9818

L’aggiornamento riguarda tutte le regioni di Cyberlandia in grid mode (hyperblog escusi)  ed e’ obbligatorio. Nel caso vengano riavviate regioni ‘vecchie’ la partenza si blocca quando contatta la grid.

Istruzioni su come procedere.

- collegarsi al server con putty, chiudere la sim attiva (screen: shutdown)

- effettuare il download dell’aggiornamento:
wget http://www.cyberlandia.net/comunity/downloads/opensim.zip

- scompattare: unzip opensim.zip (crea la cartella 9818)

- cd 9818/bin/

- editare il file OpenSim.ini (usando filezilla per portarlo in locale, qualora non si voglia utilizzare vi)
individuare la riga:
storage_connection_string=”Data Source=localhost;Database=opensim;User ID=opensim;Password=+++;”;

e sostituire a +++ la password del database mysql

nella sezione:

[Network]
http_listener_port = 9000
remoting_listener_port = 8895

se diversi  da 9000 e 8895 nel file OpenSim.ini vecchio, aggiornarla (da fare nel caso si abbiano istanze multiple).

qualora si intendano abilitare i gruppi, nella sezione

[Groups]
Enabled = false

trasformarlo in true

richiedere per mail a carlosroundel@gmail.com la configurazione da inserire alle righe:

XmlRpcServiceReadKey = ****
XmlRpcServiceWriteKey = ****

- copiare i file con estensione xml dalla cartella regions della vecchia sim alla cartella 9818/bin/Regions

- se l’isola e’ stata abilitata al voice inserire l’intera sezione [Freeswitch]
dall OpenSim.ini vecchio

- avviare screen e riavviare la sim nella nuova cartella 9818/bin

mono OpenSim.exe

al il primo avvio compare il messaggio:

17:02:33 – [MIGRATIONS] Upgrading RegionStore to latest revision.
17:02:33 – [MIGRATIONS] NOTE: this may take a while, don’t interupt this process!

attendere anche diversi minuti che venga completato l’aggiornamento.

Testiamo le porte?

May 26, 2009 da @vincenzo@

Scrivo questa miniguida che spero potrá  essere utile a tutti coloro che vorranno testare in modo semplice e veloce, che  le  porte udp e tcp siano effettivamente aperte.
Nel nostro caso testeremo la porta 9000.

Se abbiamo il nostro router gia configurato per consentire il traffico nelle due direzioni non ci resta che farci aiutare dunque da HFS (Http File Server) di soli 600kb eseguibile e senza bisogno di installazione.
Un server a codice aperto (GPL) italianissimo!

Lo scarichiamo dal sito http://www.rejetto.com/hfs/?f=dl e lo lanciamo.

vincio

Vedremo una piccola finestra come questa sopra con in alto un menu, una sezione porte e un pulsante per passare ad expert mode.
A questo punto, cambiamo in Expert mode e cambiamo Port:8080 (default) in Port:9000
In Menu non ci resta che cercare IP address > Custom… e scrivere in quella finestra il nostro ip esterno  ( per scoprirlo basta andare in www.ilmioip.it ) e diamo ok
(funziona anche il dns)

Adesso di nuovo in Menu/ IP address ci sará il nostro ip scritto prima e cliccandoci questo comparirá scritto completo di porta 9000 accanto al pulsante Open in browser.
Ora non ci resta che trascinare un qualsiasi file dentro lo spazio Virtual File System ed é fatta!
Copiamo l’indirizzo completo sopra e mandiamolo ad un amico/a .Se questi riceverá dal browser il nostro file la porta 9000 allora é  aperta!!!

So che funziona anche con ubuntu sotto wine ma io l’ho provato con xp.

Per quanto riguarda la tcp 9000 ( dopo aver fatto partire opensim ) invece basterá  digitare http://ip:porta se il browser risponde OOPS é aperta e funzionante.

Ninjam su Cyberlandia

May 9, 2009 da maox

maoxning1

Finalmente sono riuscito a configurare in maniera usabile ninjam.

Ninjam è un sistema studiato per creare JAM session “live” con musicisti che suonano da ogni parte del pianeta.

il sistema permette di suonare strumenti, cantare o fare il dj, semplicemente connettendo all’input della scheda audio del pc lo strumento.

Il problema più grande riguarda certamente il sync dei vari strumenti, che subiscono rallentamenti o accellerazioni in modo randomico, per questo ninjam possiede un metronomo interno per poter andare a tempo insieme.

Il software è composto da un’applicazione che gira su un server, che ho installato sul server dove gira opensim e un client da installare sul pc del musicista, supporta windows, linux e mac.

Il sito dove scaricarlo è http://ninjam.com/download.php

la versione linux gira in shell, esiste un progetto chiamato gninjam con un’interfaccia grafica.

qui i repository per ubuntu e le istruzioni per linux http://www.gehrignet.de/cms/programming/ninjam.shtml consiglio a chi usa linux di usare jack come uscita audio.

una volta installato va configurato settando la sorgente audio di input e di output del pc.

Per chi volesse provare ci trovate sul palco nell’isola mambo, contattatemi per le coordinate di connessione al server, sia su secondlife che cyberlandia il mio nome è maox may.

maoxning2

Primi test

Per ovviare al problema del delay, dobbiamo rimandare con ninjam l’audio del primo musicista che suona insieme all’audio che riceviamo  dal nostro strumento, in questo modo quello che stiamo ascoltando verrà strimmato con lo stesso delay.

Jack

Con linux e Jack sono riuscito a fare delle session di karaoke dove riuscivo a mandare la musica con un PC riprenderla con un altro applicando su effetti per rimandarla  a un paio di PC da cui cantavano e riprenderla su un altro che faceva da mixersteam. Tutto con ninjam e Jack.

Fortunatamente la comunità open ci viene incontro con il porting di JACK per windows e mac.

http://jackaudio.org/download

Jack ti permette di collegare il primo canale in ingresso di ninjam al primo canale in uscita di ninjam e il canale dell’input della scheda audio al secondo canale in uscita di ninjam.

Per Linux consiglio di usare il kernel realtime

Su Windows bisogna installare i driver ASIO “asio4all”

http://www.asio4all.com/

abilitare nell’audio configuration di ninjam i seguenti parametri

Input/output system: ASIO

ASIO Driver JackRouter

avviare Jack Portaudio

e poi Jack Control

Configurare Jack

avviare jack con start da Jack Control, avviare ninjam

su Jack andare su Connect e collegare nella sezione ninjam “out1″ con “in1″ e nella sezione system “capture_1″ con  “in2″

in ninjam nei local channels aggiungere un canale con Add Local Channel

nel primo canale spuntare Trasmit e selezionare In0

nel secondo canale spuntare Trasmit e selezionare In1

Adesso stiamo strimmando su ninjam i due canali, quello che riceviamo e il nostro, la stessa cosa la farà il terzo musicista  e cos’ via.

Il Primo che suona sunerà da solo, il secondo in due, il terzo in tre, ecc. solamente l’ultimo riuscirà ad ascoltare il brano senza delay.

Chi sta al mixer generale controlla i livelli audio e strimma solo il canale dell’ultimo.

Buon divertimento!!

Strillone per OpenSim

May 2, 2009 da salahzar

Fatto uno “strillone” per dare notecard con notizie importanti su una sim.

Utilizza un database su opensimita. Per utilizzarlo basta cambiare la descrizione con un nome non utilizzato esempio: nomesim.notizia. Più strilloni anche su sim diverse non distribuiranno MAI la stessa notizia alla stessa persona perchè i dati vengono caricati su un db centrale

Programma lsl

list requests;
list avatars; // lista degli avatars complessivi
list newavatars; // only new avatars
list newavatarkeys;

string URL="http://opensimita.org/lsl/server-key.php?";

default
{
    state_entry()
    {
        llSetText("Distribuisco "+llGetObjectDesc(),<1,1,1>,1);
        llSensorRepeat("",NULL_KEY,AGENT,256,PI,10);
        newavatars=[];
        URL+="cat="+llGetObjectDesc();
    }
    no_sensor()
    {
        //llSetText("Individuato finora "+(string)llGetListLength(avatars),<1,1,1>,1);
    }
    sensor(integer num)
    {
        integer i;
        llSetText("Distribuisco "+llGetObjectDesc()+ " ("+(string)llGetListLength(avatars)+")",<1,1,1>,1);
        requests=[]; newavatars=[]; newavatarkeys=[];
        for(i=0;i
        {
            //llOwnerSay(llDetectedName(i)+" "+(string)llVecDist(llDetectedPos(i),llGetPos()));

            string avatar=llDetectedName(i);
            integer found=llListFindList(avatars,avatar);
            //llOwnerSay("Looking for "+avatar+" Found: "+(string)found);
            if(found<0)
            {
                newavatars+= [ avatar ]; newavatarkeys+= [ llDetectedKey(i) ];
                //llSay(0,"Verifico se ho già dato a "+avatar);
                requests+=[ llHTTPRequest( URL+"&get="+llEscapeURL(avatar),[],"") ] ;
            }
        }

    }
    touch_start(integer count)
    {
        //llSetText("Individuato finora "+(string)llGetListLength(avatars),<1,1,1>,1);
        integer i;

        llSay(0,"========\nDall'ultimo reset ho avvertito i seguenti av:");
        for(i=0;i
        {
            llSay(0,llList2String(avatars,i));

        }
        llGiveInventory(llDetectedKey(0),llGetInventoryName(INVENTORY_NOTECARD,0));
    }
    http_response(key id, integer status, list metadata, string body)
    {
        //llOwnerSay("Receiving body: "+body+" status: "+(string)status);
        integer index=llListFindList(requests, [id]);
        if(index>=0)
        {
            string avatar=llList2String(newavatars,index);
            avatars+=[avatar];
            if(body=="*NOTFOUND*")
            {
                llSay(0,"Do informazioni a "+avatar);
                llGiveInventory(llList2Key(newavatarkeys,index),llGetInventoryName(INVENTORY_NOTECARD,0));
                string cmd=URL+"&add="+llEscapeURL(avatar)+"&val="+llEscapeURL(llGetDate()+" "+llGetTimestamp());
                //llSay(0,cmd);
                llHTTPRequest( cmd,[],"") ;
            }

            //else
            //llOwnerSay("Found avatar "+avatar);
        }
    }
}

Programma php che riceve i comandi

 <?
//
// call with
// ?cat=c&get=key => returns key or *NOTFOUND*
// ?cat=c&add=key&val=value
// ?cat=c&del=key
// ?cat=c&upd=key&val=value
// ?cat=c&list=%
// ?cat=c&count= to get how many entries
// ?cat=c&item=i 0..n to get nth entry (sorted by key)
//
include 'connect-lsl.php';

// cat helps separating various subtables in the main table
$cat=$_GET['cat'];

// gets the specific commands
$get=$_GET['get'];
$add=$_GET['add'];
$del=$_GET['del'];
$upd=$_GET['upd'];
$list=$_GET['list'];
$count=$_GET['count'];
$item=$_GET['item'];
$value=$_GET['val'];

// adding a new key, value key MUST NOT be existent if so we are updating it
if($add!="")
{
  $query="select chiave from chiavi where cat='$cat' and chiave='".addslashes($add)."'";
  $result=mysql_query($query) or die(mysql_error());
  // echo "$query Found ".mysql_num_rows($result)." lines";
  if(mysql_num_rows($result)==0)
  {
    // adding this key                      , val
    // should check key is not existent
    $query="insert into chiavi values('$cat','".addslashes($add)."','".addslashes($value)."')";
    mysql_query($query) or die(mysql_error());
    die("OK $query");
  }
  // if already existent then we are actually updating
  else $upd=$add;

}

// updating the key
if($upd!="")
{
  $query="update chiavi set valore='".addslashes($value)."' where cat='$cat' and chiave='".addslashes($upd)."'";
  mysql_query($query) or die(mysql_error());
  die("OK $query");
}

// deleting the key
if($del!="")
{
  $query="delete from chiavi where cat='$cat' and chiave='".addslashes($del)."'";
  mysql_query($query) or die(mysql_error());
  die("OK $query");
}

// getting a key note stripslashes which were added in insert to solve problems with ' "
if($get!="")
{
  $query= "select * FROM chiavi where cat='$cat' and chiave='".addslashes($get)."'";
  $result = mysql_query($query) or die(mysql_error());
  if($row = mysql_fetch_array($result))
  {
    echo stripslashes($row['valore']);
  }
  else echo "*NOTFOUND*";
  die();
}

// listing all elements having the substring in the key
if($list!="")
{
  $query1="select * from chiavi where cat='$cat' and chiave like '".$list."'";

  $result=mysql_query($query1) or die(mysql_error());
  while($row=mysql_fetch_array($result))
  {
    echo stripslashes($row['chiave'])."\n";
    echo stripslashes($row['valore'])."\n";
  }
  die();
}

// counting how many elements in this table
if($count!="")
{
  $query= "select count(*) as num FROM chiavi where cat='$cat'";

  $result = mysql_query($query) or die(mysql_error());
  if($row = mysql_fetch_array($result))
  {
    echo $row['num'];
  }
  die();
}

// selecting nth element sorted by key name
if($item!="")
{
  $query="SELECT * FROM chiavi where cat='".$cat."' order by chiave limit 1 offset ".$item;

  $result = mysql_query($query) or die(mysql_error());
  if($row = mysql_fetch_array($result))
  {
    echo stripslashes($row['chiave'])."\n".stripslashes($row['valore'])."\n";
  }
  else echo "*NOTFOUND*";

}
?>