Education sur opensim avec Moodle et Sloodle

I – Introduction

Moodle est un environnement d’apprentissage libre et gratuit (Learning Management System ou LMS). Il est possible de l’utiliser comme plateforme pour proposer des cours totalement en ligne aussi bien que comme complément à l’enseignement présentiel. Ses modules d’activités (tels que forums, glossaires ou wikis) permettent de construire des communautés d’apprentissage collaboratif aussi bien que de simplement fournir des contenus (tels que des paquets SCORM standards) aux étudiants et évaluer l’apprentissage au moyen de devoirs et de tests.

En savoir plus……

SLOODLE (Simulation lié objet axée sur l’apprentissage environnement dynamique) est un projet Open Source qui intègre l’environnement virtuel multi-utilisateurs de Second Life ou d’opensim avec le système Moodle .

En savoir plus…..

L’installation de l’ensemble Moodle et Sloodle n’est pas très complexe mais il y a néanmoins quelques points auxquels prêter attention.

Test réalisé sur serveur Ubuntu 10.04 32bits et grille opensim 0.6.9 post-fixes . Connexion réalisée sur le même serveur.

On suppose que l’ensemble Lamp (apache, mysql, php) est déjà fonctionnel sur le serveur. Dans le cas contraire vous trouverez une procédure d’installation ici.

II – Installation du serveur Moodle

Source : site Moodle installation

Attention : le site propose aussi ici une installation Ubuntu par apt-get avec laquelle j’ai eu de grosses difficultés et qui de plus ne permet pas de sélectionner la version adaptée. En effet au moment ou j’écris ces lignes, Sloodle ne supporte pas la version 2.0 de Moodle et il faut installer une version 1.9. Ne pas utiliser.

L’explication de l’installation étant très bien faite sur le site et traduite en français, je n’ajouterai que quelques commentaires.

Ceux qui souhaitent mettre en place un serveur virtuel, ce qui est moins à la portée du débutant, sauront l’adapter.

Partie Télécharger le logiciel

Télécharger ici la version 1.9.10+ au format zip sur votre ordinateur.

Transférez la sur votre serveur dans le répertoire de travail d’apache /var/www/ et dézippez

unzip moodle-latest-19.zip

Vous avez désormais un répertoire moodle dans /var/ww/ et vous accèderez à moddle par http://ipdemonserveur/moodle/

Partie créer une base de donnée vide

Bien respecter les instructions. Le jeu de caractères utilisé doit impérativement être utf8 faute de quoi le site moodle ne fonctionnera pas.

Partie Créer le dossier de donnée moodledata

Ler permissions pour apache sont importantes. Pour ma version d’ubuntu, les privilèges à donner sont :

chown –R www-data:www-data moodledata

Partie lancer le script d’installation

La configuration du site  va s’effectuer automatiquement.

Se connecter au site moodle par http://ipdemonserveur/moodle/install.php et fournir les renseignements demandés. A la fin du script le contenu du fichier config.php va être généré à l’écran, comme vous ne possédez pas les droits en écriture.  Créez dans /var/www/moodle un fichier config.php vide et copiez y les instructions générées.

Partie visiter la page d’administration

Se connecter au site par http://ipdemonserveur/moodle/admin et vous verrez la base de donnée mysql se générer automatiquement. Auparavant une séance de contrôle va vérifier que vous avez bien installé tous les paquets nécessaires et que vos paramétrages sont corrects. Sinon corrigez les erreurs signalées et recommencez.

Notez soigneusement le nom d’utilisateur et le mot de passe du compte administrateur : ils sont cryptés dans la base de donnée et vous ne pouvez y accéder.

Alors que croyez-vous qu’il m’est arrivé ? Allez, je vais vous aider, voici le script a lancer dans /var/www/moodle pour regénérer un mot de passe (écrit pas Shane Elliott) :

<?php
include(‘config.php’);
////////////////////////////////////////////////////////////////////
$username = ‘username’;
$newpassword = ‘newpassword’;
////////////////////////////////////////////////////////////////////
if ($userobj = get_record_select(‘user’, "username=’$username’", ‘id, password’)) {
    $userobj->password = md5($newpassword);
    update_record(‘user’, $userobj);
    echo ‘Password changed’;
} else {
    echo ‘Invalid username’;
}
?>

N’oubliez pas de l’effacer après.

Et voilà : vous êtes prêts à créer votre premier cours .

La documentation française est malheureusement encore incomplète alors n’oubliez pas de consulter la documentation en anglais.

N.B. Moodle est écrit en PHP, language qui ne supporte pas les espaces intempestifs, en particulier avant et après les marqueurs <?php’ et ‘?>.

En cas de problèmes, du genre les images ne s’affichent pas, vérifiez tout particulièrement votre config.php.

Voici une instruction, qui exécutée dans votre dossier moodle, vous permettra d’identifier les coupables :

find . -type f –exec perl -e ‘$/ = undef; $_ = <>; print $ARGV . "\n" if ((m#^([ t\n]+)<\?php#si) or (m#\?>\n([ \t\n]+)$#s) or (m#\?>([ \t]+)$#s))’ {} ";"

Merci à Iñaki Arenaza .

III – Installation des plugins Sloodle

Source : installation Sloodle

La documentation de Sloodle n’étant pas encore traduite en français, voici le processus d’installation pour ceux qui seraient fâchés avec Shakespeare.

1) Télécharger sloodle sur votre PC ici ( ou lien direct fichier zip) et dezipper. Vous obtenez un répertoire sloodle_all_latest_stable avec 3 sous-répertoires : sloodle, sloodle_menu et sloodleobject.

2) Transférer le répertoire sloodle dans /var/www/moodle/mod/

Se connecter à la page d’administration http://ipdemonserveur/moodle/admin et la base de donnée sera automatiquement mise à jour.

3) Transférer sloodle_menu dans le répertoire /var/www/moodle/blocks/

Se connecter à la page d’administration http://ipdemonserveur/moodle/admin et la base de donnée sera automatiquement mise à jour.

4) Transférer sloodleobject dans /var/www/moodle/mod/assignment/type/

5) Configurer sloodle

Connectez-vous au site et dans le menu de gauche sélectionnez plugins, activités, gestion des activités (langue anglaise Modules, Activities, Sloodle module). Vous pouvez choisir :

    Auto enregistrement (permet aux avatars de se créer un compte sloodle eux-mêmes) – vous pouvez activer ou désactiver l’enregistrement automatique pour l’ensemble du site (si désactivé, bien sûr,les paramètres individuels d’enregistrement automatique sont ignorés)

    Auto inscription (permet d’inscrire automatiquement les utilisateurs dans les cours)- vous pouvez activer ou désactiver l’inscription automatique pour l’ensemble du site (si désactivé, bien sûr, les paramètres individuels pour l’inscription automatique sont ignorés)

    Durée de vie des objets Sloodle – vous pouvez spécifier combien de jours un objet autorisé peut être inactif avant qu’il ne soit désactivé (pour la sécurité). Mettre à 0 si vous souhaitez que les objets ne soient jamais désactivés.

    Durée de vie des objets utilisateurs – vous pouvez spécifier combien de jours un objet utilisateur autorisé (par exemple, la barre d’outils Sloodle) peut être inactif avant qu’il ne soit désactivée (pour la sécurité). Mettre à 0 si vous souhaitez que les objets ne soient jamais désactivés.

IV – Récupérer les objets de travail Sloodle

Le set Sloodle comprend 16 objets :

  • Sloodle Set : l’élément le plus important. Il automatise le rezzing et la configuration de la plupart des autres objets Sloodle,
  • Sloodle Presenter : présentation de médias type web  mêlant images, vidéo et web-pages, sans avoir besoin de télécharger les images dans opensim,
  • Sloodle WebIntercomm :  relie le chat opensim au chat Moodle. Le chat partagé entre opensim et moodle peut être utile si certaines personnes n’ont pas accès à opensim,
  • Sloodle Toolbar :  HUD à 3 fonctions principales: le blog, les gestes et AviLister.
  • Sloodle quizz chair : bureau qui affiche aux éléves les quizz Moodle.
  • Sloodle Pile on Quizz : quizz multi utilisateurs pour faire participer l’ensemble de la classe,
  • Sloodle Prim Drop : permet aux étudiants de sauvegarder des objets dans la base de données Moodle,
  • Sloodle Meta Gloss : permet l’accès au glossaire Moodle
  • Sloodle Choice : permet d’exécuter des sondages, des élections ou la collecte d’informations générales auprès des participants à un cours. Représentation graphique des résultats
  • Sloodle Vending machine : permet de distribuer des objets aux étudiants,
  • Sloodle Award System : permet d’accorder des points aux étudiants. Se connecte avec le carnet de notes,
  • Sloodle Picture Gloss : fournit un glossaire où les utilisateurs peuvent effectuer des recherches par chat . Quand une entrée du glossaire est trouvé, l’image enregistrés pour cette entrée du glossaire est affiché sur un prim.
  • Sloodle Registration : vérifie si les avatars sont enregistrés dans votre site Moodle, les aide à s’inscrire si ils ne sont pas. Aide également à s’inscrire sur le cours correspondant si ce n’est déjà fait.
  • Sloodle Access Checker : vérifie si les avatars sont censés être dans la classe.
  • Sloodle Access Door : idem précédent par le biais d’une porte d’entrée,
  • Sloodle Login Zone : autre outil pour l’enregistrement des avatars. Crée une zone 3D dans opensim. En cliquant sur le lien correspondant dans Moodle  l’utilisateur obtient un lien SLurl et peut se téléporter sur opensim. Lorsque l’ avatar apparaît dans la zone, il sera enregistré dans leur compte d’utilisateur Moodle.

Comment se le procurer ?

Solution 1 : vous possédez votre serveur de région. Téléchargez l’iar ici

Solution 2 : rendez vous sur un endroit de dépôt

Francogrid : région whispertest  lien hypergrid 178.63.103.67:9011:WhisperTest

Jokaidia : région pathlandia lien hypergrid 66.240.241.42:9004:Pathlandia

Consultez également le forum Sloodle.

Vous pouvez regarder un certain nombre de videos d’apprentissage sur le site.

N.B. Pour le bon fonctionnement de l’ensemble :

  • RPC-XML doit être activé sur votre région. Vérifiez que vous avez bien dans votre opensim.ini quelque chose du genre :

[XMLRPC]
; ##
; ## Scripting XMLRPC mapper
; ## ; If enabled, this will post an event, "xmlrpc_uri(string)" to the
; script concurrently with the first remote_data event.
; This will contain the fully qualified URI an external site needs
; to use to send XMLRPC requests to that script
XmlRpcRouterModule = "XmlRpcRouterModule"
XmlRpcPort = 20800 ; specify open port

  • certains éléments de sloodle utilisent les emails. Si vous n’avez pas de serveur SMTP sur votre serveur, désactivez les scripts email_login_details

// llGetNextEmail("", EMAIL_SUBJECT_LOGIN);

ou par exemple installez postfix (vous trouverez un tutorial très bien fait ici ) et modifiez votre fichier opensim.ini

[SMTP]
enabled=true
internal_object_host=lsl.opensim.local
host_domain_header_from=127.0.0.1
SMTP_SERVER_HOSTNAME=127.0.0.1
SMTP_SERVER_PORT=25
SMTP_SERVER_LOGIN="postfix username"
SMTP_SERVER_PASSWORD="postfix password"

V – Pour les enseignants de Francogrid

Si vous n’avez pas la possibilité de monter votre propre site moodle et que vous souhaitiez utiliser l’ensemble Moodle/Sloodle, je peux vous ouvrir un accès de créateur de cours et d’enseignant sur mon propre serveur. Contactez moi sur Francogrid.

Installation et test de Mumble : Murmur/Whisper sur opensim

Mumble est un logiciel libre de voix sur réseau IP d’excellente qualité . Une solution opensim a été développée par VCOMM à partir de Mumble et offre une alternative intéressante à freeswitch.

Sources :

Test réalisé sur serveur Ubuntu 10.04 32bits et grille opensim 0.6.9 post-fixes . Connexion réalisée sur le même serveur.

I Installation du serveur Murmur

Installer Ice :

# sudo apt-get install ice33-services

Téléchargez et extrayez murmur.

#cd /usr/local/src/
# wget http://downloads.sourceforge.net/mumble/murmur-static_x86-1.2.1.tar.lzma&modtime=1203797046&big_mirror=0
# lzma -d murmur-static_x86-1.2.1.tar.lzma
# tar -xvf murmur-static_x86-1.2.1.tar
# mv murmur-static_x86-1.2.1 murmur
# cp -r murmur/ /usr/sbin
# cd /usr/sbin/murmur/

Editez le fichier murmur.ini et apportez les modification suivantes (en commentant ou décommentant suivant le cas):

database=/var/murmur.sqlite
#dbus=session
ice="tcp -h 127.0.0.1 -p 6502"
logfile=/var/murmur.log
pidfile=/tmp/murmur.pid
port=64738

Lancer le démon :

# ./murmur.x86 -ini ./murmur.ini

Vérifiez le bon fonctionnement des ports 6502 et 64738 :

netstat -laptn | grep 6502
netstat -laptn | grep 64738

Si rien n’est envoyé alors vous devrez ouvrir le port 6502 et/ou 64738 en TCP dans votre pare feu et/ou routeur.

Consulter le fichier log /var/murmur.log pour voir s’il n’indique pas d’erreur :

Initializing settings from /usr/sbin/murmur/murmur.ini (basepath /usr/sbin/murmur)
SSL: Added CA certificates from ‘/etc/ssl/certs/ca-certificates.crt’
WARNING: You are running murmurd as root, without setting a uname in the ini file. This might be a security risk.
ServerDB: Openend SQLite database /var/murmur.sqlite
Generating new tables…
Resource limits were 0 0
Successfully dropped capabilities
MurmurIce: Endpoint "tcp -h 127.0.0.1 -p 6502" running
Murmur 1.2.1 (Compiled Jan 7 2010 23:39:28) running on X11: Ubuntu 10.04.1 LTS: Booting servers
Server listening on [::]:64738
Generating new server certificate.
Announcing server via bonjour
Not registering server as public

N.B. Pour arrêter le démon, il est nécessaire d’utiliser la commande kill, de préférence avec son pid :

kill `cat /tmp/murmur.pid`

II – Installation du module opensim

Télécharger le module opensim ici.  Le fichier zip contient 3 dll (MurmurVoice.dll, Ice.dll et Glacier2.dll) à copier dans votre répertoire …/OpenSim/bin/

Ceci fait, éditez votre fichier OpenSim.ini et rajoutez les lignes suivantes (en les modifiant avec l’IP de votre serveur et le nom de votre région (il s’agit bien du nom de la région et non de son canal) :

[MurmurVoice]
; New voice daemon which will do speaker indication,
; positional voice, and high quality audio codec. Host voice on the
; same server, or use Glacier2 to proxy the insecure ICE protocol.
enabled = true
; Hostname to send the user
murmur_host = 71.6.217.130
; Server identifier (normally 1)
murmur_sid = 1
; Endpoint to system running mumble
murmur_ice = tcp -h 127.0.0.1 -p 6502
; Endpoint to this system (not needed for glacier2)
murmur_ice_cb= tcp -h 127.0.0.1 -p 6503
; Parent channel name to use
channel_name = MaRegion
; Enable use of glacier2 (ignore murmur_ice_cb if false)
glacier = false
; Glacier proxy
glacier_ice = Glacier2/router:tcp -p 4063 -h <murmur-ip>
; Glacier session user
glacier_user = <glacier2-user-name>
; Glacier session password
glacier_pass = <glacier2-password>

Comme dans cette installation Murmur fonctionne sur le même serveur qu’opensim, les informations concernant Glacier (proxy utilisé dans le cas ou Murmur est sur un serveur différent de celui d’opensim) seront ignorées.

Pour utiliser glacier2 avec deux serveurs, consultez les exemples donnés ici .

Relancez votre région.

Autorisez la voix sur votre région (menu world, region/estate, onglet estate, cochez allow voice chat) et sur votre parcelle (menu world, about land, onglet media, cochez enable voice).

III Installation du client

Téléchargez le programme (Windows XP, Vista, ou 7) ici .

Solution 1

Installez le dans le répertoire de votre viewer (par exemple C:\Program Files\Imprudence).

Le fichier SLVoice.exe va être remplacé par celui de Whisper et sauvegardé dans un répertoire SLVoice_orig.

Pour basculer d’un système à l’autre, vous trouverez dans le répertoire d’installation deux fichiers bat, use_whisper_voice.bat et user_SL_voice.bat pour lesquels vous pourrez faire un raccourci sur votre bureau.

Si vous êtes sous vista ou windows 7, n’oubliez pas de les exécuter en tant qu’administrateur (option avec clic bouton droit).

Pour effectuer la bascule, coupez la voix dans le menu préférences, exécutez le fichier batch nécessaire et remettez la voix.

Solution 2

Faites une copie intégrale du répertoire de votre viewer et renommez le nouveau répertoire (MonViewer)whisper.

Installez le client whisper dans ce nouveau répertoire.

Faites un raccourci sur votre bureau du programme .exe et renommez le comme vous l’entendez.

Utilisez la version standard ou la version whisper de votre viewer selon les occasions.

Conclusion :

Pour que tout soit parfait, il nous reste à espérer que cette option soit vite intégrée d’une part dans une prochaine version d’opensim, d’autre part dans les viewers alternatifs comme hippo ou imprudence afin d’éviter toutes ces manipulations.

J’ai installé sur francogrid une région test (cherchez WhisperTest sur la carte) ou vous pourrez essayer ce client.

Lien hypergrid : 178.63.103.67:9011:WhisperTest

Tous mes remerciements à Volker Gaessler de VCOMM pour son travail et son aide.

Serveur de streaming : installer darwin pour opensim

Installation sur Ubuntu 10.04 32bits

Sources :

Darwin streaming server : http://dss.macosforge.org/

Streaming dans opensim : http://opensimulator.org/wiki/Streaming_Media_in_OpenSim

I – Installer les pré-requis

sudo apt-get install libstdc++6
sudo apt-get install gpac

II – Télécharger et installer darwin

cd /usr/local/src/
wget http://dss.macosforge.org/downloads/DarwinStreamingSrvr5.5.5-Linux.tar.gz
tar xvzf DarwinStreamingSrvr5.5.5-Linux.tar.gz
cd DarwinStreamingSrvrlinux-Linux
sudo addgroup –system qtss
sudo adduser –system –no-create-home –ingroup qtss qtss
./Install

Vous allez obtenir en cours d’installation :

In order to administer the Darwin Streaming Server you must create …..
Please enter a new administrator user name: opensim

Entrez vos noms et mot de passe d’administrateur.

Vous pouvez maintenant vous connecter à l’écran d’administration du serveur : http://adresse_ip_du_serveur:1220/

image

N.B. : attention à l’option d’utilisation du port 80 qui peut entrainer des dysfonctionnements d’autres produits sur votre serveur.

III – Tests

Vous pouvez voir dans l’onglet General Settings que le répertoire de stockage par défaut est /usr/local/movies/

image

Cliquez playlist, puis new media playlist

image

Vous obtenez la liste des fichiers de test.

Lancer quicktime sur votre pc et entrer en url :

rtsp://ip_de_votre_serveur/sample_100kbit.mp4

La première fois que quicktime se connecte à une adresse IP, il vérifie la bande passante sur le serveur ce qui peut prendre quelque temps.

NB : pour utiliser correctement une video MPEG-4 avec darwin, un indicateur de pistes doit être inséré dans le flux de données. Cet indicateur est nécessaire pour permettre l’avance et le retour rapide de la video.

Si vous n’effectuez pas cette opération, ils seront encore téléchargeables, mais il leur faudra quelques secondes pour commencer à jouer. Vous n’avez pas besoin d’un serveur de streaming pour cela, il suffit d’utiliser Apache. Donc :

cd /usr/local/movies/
MP4Box -hint votre_video.mp4

En cas d’arrêt (une fois connecté comme root en console) :

  • pour relancer le gestionnaire d’administration:
/usr/local/sbin/streamingadminserver.pl
  • pour relancer le serveur :
/usr/local/sbin/DarwinStreamingServer

IV – Utilisation sur opensim

Connectez vous a votre sim et créez vous un cube de la taille que vous souhaitez.

Appliquez une texture blanche et une couleur noire ( ou ce que vous voulez) à l’exception de la face de projection de la video ou vous appliquez une couleur blanche et la texture “default media texture” que vous trouverez dans la librairie de textures de base opensim de votre inventaire.

Dans la fenêtre du menu world/about land, onglet media, selectionnez la même texture.

Vérifiez dans about land onglet général que Allow dead to group est bien coché.

Dans l’onglet media cliquez sur set dans media url et tapez le lien :

rtsp://ip_de_votre_serveur/sample_100kbit.mp4

Vous pouvez également utiliser le script freewiew que vous trouverez sur cette page.

Bonne vidéo……

Exemple d’automatisation de gestion de plusieurs régions sur opensim (1/3)

Instructions pour serveur linux Ubuntu Lucid 10.04 version 32 bits sur grille Francogrid (donc à adapter pour des configurations différentes).

Configuration de départ du serveur minimale.

En grande partie traduction et adaptation des articles de Snoopy Pfeffer sur maxping 

Liste des opérations à effectuer :

I – Installation des paquets nécessaires

II – Installation opensim, création arborescence répertoires

III – Automatisation des mises à jour

IV – Automatisation de la gestion des régions avec monit

V – Automatisation des sauvegardes

Console windows utilisée : putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/)

Client ftp utilisé : filezilla
(http://www.filezilla.fr/)

I – Installation des paquets nécessaires

Sources :

Docs putty : http://www.chiark.greenend.org.uk/~sgtatham/putty/docs.html

Docs filezilla : http://www.filezilla.fr/filezilla-tuto1.php

Commandes de base console : http://doc.ubuntu-fr.org/tutoriel/console_commandes_de_base

apt-get : http://doc.ubuntu-fr.org/apt-get

Mono : http://doc.ubuntu-fr.org/mono

Screen : http://doc.ubuntu-fr.org/screen

Lamp : http://doc.ubuntu-fr.org/lamp

Python : v2.6 installée par defaut sur Unbuntu 10

Monit : http://doc.ubuntu-fr.org/monit

Webmin (facultatif) : http://doc.ubuntu-fr.org/webmin

sudo apt-get updatesudo apt-get upgrade

sudo apt-get install screen

sudo apt-get install lamp-server^

N’oubliez pas le caractère ^ en fin de ligne.

Mysql va vous demander un mot de passe d’administrateur.

sudo apt-get install monit

Nous lancerons le démon plus tard une fois configuré.

L’installation de mono pose quelques problèmes au moment ou je rédige ce billet. Je l’ai donc compilé moi-même. Voyez sur le site les versions disponibles selon votre version ubuntu (si apt-get marche mal, utlisez aptitude).

Installation facultative de webmin pour gérer le serveur :

sudo wget http://www.webmin.com/jcameron-key.ascsudo apt-key add jcameron-key.asc

Puis éditez le fichier /etc/apt/sources.list et ajoutez la ligne :

deb http://download.webmin.com/download/repository sarge contrib

Vous pouvez maintenant utiliser les commandes :

sudo apt-get updatesudo apt-get install webmin

Vérifiez la connexion à webmin : https;//<votre.adresse.ip>:10000

II – Installation opensim, création arborescence répertoires

Sources :

opensim : http://opensimulator.org/wiki/Main_Page

mysql : http://doc.ubuntu-fr.org/mysql

Structure installation : http://maxping.org/technobabble/platforms/open-simulator/opensim-linux-series-–-service-management-processes-and-scripts.aspx

II.1 Création de l’utilisateur opensim

Pour des raisons de sécurité, créez un utilisateur opensim

sudo adduser opensim

II.2 Création des bases mysql

Nous allons nommer nos régions R01, R02, R03………..pour les besoins des scripts d’automatisation (ces noms n’ont rien a voir avec le nom de région qui s’affichera plus tard dans opensim et que vous définirez dans la configuration propre d’opensim).

Vérifier que mysql est en fonction :

sudo service mysql status

Vous devez obtenir : mysql start/running, process xxxxxx Créez autant de bases que de régions et n’oubliez pas de donner a chaque fois les droits a opensim :

mysql -u root –p

Vous obtenez le prompt de mysql : mysql>

Créer l’utilisateur opensim :

CREATE user opensim@localhost;
SET password FOR opensim@localhost = password(“mot_de_passe”);

Créer les bases :

CREATE DATABASE R01;
GRANT ALL ON R01.* TO opensim@localhost;
CREATE DATABASE R02;
GRANT ALL ON R02.* TO opensim@localhost;
.......etc
quit

II.3 Création des répertoires

Connectez vous en tant qu’opensim.

Convention de répertoire :

  • Sous le répertoire home d’opensim, un répertoire principal également appelé opensim,
  • sous répertoire backup pour les sauvegardes
  • sous répertoires opensim_x.x.x (par exemple opensim_0.6.9) qui contiennent les version successives d’opensim,
  • sous répertoire run qui contient lui même autant de sous-répertoires que de régions nommés R01, R02, R03……….
  • sous répertoire ServiceManagement qui contient les scripts utilisés pour la gestion des services,
  • sous répertoire tmp pour le téléchargement et l’installation des nouvelles versions, avant de les transférer dans opensim_x.x.x

Les mises a jour seront faites dans un répertoire run_new pour configuration et contrôle. Pour terminer, le répertoire run sera conservé et renommé

run_old en cas de besoin de restauration rapide. run_new sera renommé en run.

Les sous-répertoires R01, R02,….vont contenir des liens symboliques vers les fichiers contenus dans opensim_x.x.x, à l’exception des fichiers OpenSim.ini

et RegionConfig.ini qui sont des copies réelles générées par les scripts. Les dossiers Regions et et ScriptEngines sont également indépendants dans la mesure ou ils stockent des informations spécifiques à chaque région.

mkdir opensimcd opensimmkdir backup

mkdir run

mkdir ServiceManagement

mkdir tmp

cd run

mkdir R01

cd R01

mkdir Regions

mkdir ScriptEngines

cd..

mkdir R02

cd R02

mkdir Regions

mkdir ScriptEngines

cd..

etc…………….

La création de la structure complète de run est nécessaire lors de la première utilisation. Pas la suite, elle sera générée par les scripts.

Pour l’instant, la structure du disque vue par root se présente comme suit :

image

……….

image

II.4 Installation de opensim

Rappel : vous devez utiliser une version d’opensim compatible avec celle de

la grille à laquelle vous allez vous connecter. Dans mon cas, Francogrid est à ce jour en version 0.6.9. La majorité des grilles fournissent des versions pré-compilées. Pour Francogrid, adressez-vous à un administrateur qui vous indiquera le répertoire de téléchargement.

Si vous souhaitez compiler votre propre version, voir http://opensimulator.org/wiki/Build_Instructions

La bonne version pré-compilée une fois téléchargée dans le répertoire tmp :

cd opensim/tmp/
tar -zxvf francogrid-opensim-0.6.9-post-fixes.aa8e7ae.tar.gz

mv  francogrid-opensim-0.6.9-post-fixes.aa8e7ae opensim_0.6.9

mv opensim_0.6.9 ..

Pour terminer cette partie, mettre dans chacun des répertoires run/Rxx/Regions le fichier RegionConfig.ini adapté.

Attention à bien mentionner un port différent pour chacune d’entre elles. Personnellement, j’utilise 9010 pour R01, 9011 pour R02,………

A suivre……….

Exemple d’automatisation de gestion de plusieurs régions sur opensim (2/3)

III – Automatisation des mises à jour

III.1 Adaptation du fichier OpenSim.ini

Dans le fichier OpenSim.ini générique qui se trouve dans le répertoire ../opensim_x.x.x/bin, nous utiliserons les symboles suivants (le script remplacera ces symboles par les valeurs correctes pour chaque région).

REGION_NAME
HTTP_PORT
DATABASE_NAME
DATABASE_PASSWORD
SERVER_IP
VOICE_IP
AV_CAPSULE (seulement pour les serveurs 64bits)

Ainsi vous ne devez mettre à jour qu’un fichier maître OpenSim.ini et les fichiers individuels seront créés automatiquement par le script.

Modifications à apporter :

[Startup]
…………………………………
; ## STORAGE
…………………………………
; Pour utiliser mysql décommentez et paramétrez içi:
storage_plugin= »OpenSim.Data.MySQL.dll »
storage_connection_string= »Data Source=localhost;Database=DATABASE_NAME;User ID=opensim;Password=DATABASE_PASSWORD; »;
; If you want to use a different database/server for estate data, then
……………………………………..
[Network]
……………………………………..
http_listener_port = HTTP_PORT
…………………………………….
[ODEPhysicsSettings]
……………………………………..
; ## Avatar Control
……………………………………..
av_capsule_standup_tensor_linux = AV_CAPSULE
………………………………………
[FreeSwitchVoice]
………………………………………
freeswitch_service_server = SERVER_IP
;freeswitch_service_port = 80
; this should be the same port the region listens on
freeswitch_service_port = HTTP_PORT
freeswitch_realm = VOICE_IP
freeswitch_sip_proxy = VOICE_IP:5060
freeswitch_attempt_stun = false
freeswitch_stun_server = VOICE_IP
freeswitch_echo_server = VOICE_IP
freeswitch_echo_port = 50505
freeswitch_well_known_ip = VOICE_IP

III.2 Scripts

Dans le répertoire home de l’utilisateur opensim, créer un sous-répertoire
bin où vous placerez les deux scripts suivants, après les avoir adaptés à votre usage (nombre de régions et paramètres en rouge):

  • updateos ( à utiliser avec le paramètre opensim_x.x.x)
#!/bin/sh
# updateos
echo Updating OpenSim…
cd /home/opensim/opensim/
mkdir run_new
cd run_new
mkdir R01 R02 R03 R04
mkdir R01/Regions R02/Regions R03/Regions R04/Regions
mkdir R01/ScriptEngines R02/ScriptEngines R03/ScriptEngines R04/ScriptEngines
cp ../run/R01/Regions/* R01/Regions
cp ../run/R02/Regions/* R02/Regions
cp ../run/R03/Regions/* R03/Regions
cp ../run/R04/Regions/* R04/Regions
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R01/g’ -e ‘s/HTTP_PORT/9010/g’ -e ‘s/DATABASE_NAME/R01/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ ‘s/AV_CAPSULE/1700000/g’ > R01/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R02/g’ -e ‘s/HTTP_PORT/9011/g’ -e ‘s/DATABASE_NAME/R02/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’  ‘s/AV_CAPSULE/1700000/g’ > R02/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R03/g’ -e ‘s/HTTP_PORT/9012/g’ -e ‘s/DATABASE_NAME/R03/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’  ‘s/AV_CAPSULE/1700000/g’ > R03/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R04/g’ -e ‘s/HTTP_PORT/9013/g’ -e ‘s/DATABASE_NAME/R04/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’  ‘s/AV_CAPSULE/1700000/g’ > R04/OpenSim.ini
cd R01
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../R02
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../R03
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../R04
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../..
  • refreshos ( à utiliser avec le paramètre opensim_x.x.x)
#!/bin/sh
# refreshos
echo Refreshing OpenSim INI Files…
cd /home/opensim/opensim/run/
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R01/g’ -e ‘s/HTTP_PORT/9010/g’ -e ‘s/DATABASE_NAME/R01/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ ‘s/AV_CAPSULE/1700000/g’ > R01/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R02/g’ -e ‘s/HTTP_PORT/9011/g’ -e ‘s/DATABASE_NAME/R02/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’  ‘s/AV_CAPSULE/1700000/g’ > R02/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R03/g’ -e ‘s/HTTP_PORT/9012/g’ -e ‘s/DATABASE_NAME/R03/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’  ‘s/AV_CAPSULE/1700000/g’ > R03/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/R04/g’ -e ‘s/HTTP_PORT/9013/g’ -e ‘s/DATABASE_NAME/R04/g’ -e ‘s/DATABASE_PASSWORD/Sn6i367/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’  ‘s/AV_CAPSULE/1700000/g’ > R04/OpenSim.ini
cd ../..

III.3 Test de l’installation

cd opensim/bin/
updateos opensim_0.6.9

Le script a créé un répertoire run_new avec les fichiers de configuration adaptés à chaque région.

Testez le bon fonctionnement de vos régions. Si tout est correct :

cd ..
mv run run_old
mv run_new run

Si vous devez modifier quelque chose dans le fichier OpenSim.ini pour la même version d’opensim, modifiez le fichier maitre dans opensim_x.x.x/bin/ et :

cd opensim/bin/
refreshos opensim_0.6.9

III.4 Récapitulation

Lors de la prochaine installation (dans le répertoire home de l’utilisateur opensim):

  • téléchargement de la nouvelle version pré-compilée dans le répertoire tmp, décompression et transfert vers le répertoire /opensim/opensim_x.x.x
  • transfert du fichier OpenSim.ini de l’ancienne version dans le répertoire bin de la nouvelle version et modifications si nécessaire
  • si nécessaire, modification des fichiers RegionConfig.ini dans les répertoires run/Rxx
  • lancer updateos opensim_x.x.x
  • vérifier le bon fonctionnement des régions run_new/Rxx
  • renommer run en run_old
  • renommer run_new en run

Exemple d’automatisation de gestion de plusieurs régions sur opensim (3/3)

IV – Automatisation de la gestion des régions avec monit

Sources :

Doc Monit : http://mmonit.com/monit/documentation/

Remote admin : http://opensimulator.org/wiki/RemoteAdmin

Article Snoopy Pfeffer : http://maxping.org/technobabble/platforms/open-simulator/opensim-linux-series-–-service-management-with-monit.aspx

Article Coyled : http://coyled.com/2010/07/07/monit-and-opensim/

IV-1 Mise en place des scripts

Copier dans le répertoire ServiceManagement les 8 scripts suivants :

  • broadcastos

Script Python qui envoie des messages aux utilisateurs Opensim. Le numéro de port http doit être fourni en tant que paramètre.

#!/usr/bin/python
# -*- encoding: utf-8 -*-
import ConfigParser
import xmlrpclib
import optparse
import os.path
if __name__ == ‘__main__’:
    parser = optparse.OptionParser()
    parser.add_option(‘-s’, ‘–server’, dest = ‘server’, help = ‘URI of the region server’, metavar = ‘SERVER’)
    parser.add_option(‘-p’, ‘–password’, dest = ‘password’, help = ‘password of the region server’, metavar = ‘PASSWD’)
    parser.add_option(‘-m’, ‘–message’, dest = ‘message’, help = ‘message to broadcast’, metavar = ‘MSG’)
    (options, args) = parser.parse_args()
    server = options.server
    password = options.password
    message = options.message
    gridServer = xmlrpclib.Server(server)
    res = gridServer.admin_broadcast({‘password’: password, ‘message’: message})
    if res [‘success’] == ‘true’:
        print ‘message was sent to %s’ % server
    else:
        print ‘sending message to %s failed’ % server

N.B. Pour les scripts en python attention a bien respecter l’indentation des conditions if else

  • clearos

Script pour nettoyer ScriptEngines . Il peut être utile d’exécuter cette commande après chaque mise à jour.

#!/bin/sh
rm -r /home/opensim/opensim/run/*/ScriptEngines/*
  • rmpidsos

Script pour nettoyer les fichiers pid après l’arrêt de tous les processus serveur OpenSim.

#!/bin/sh
rm -f /tmp/*.pid
  • shutdownos

Script Python qui arrête les processus serveur OpenSim. The Le numéro de port http doit être fourni en tant que paramètre.

#!/usr/bin/python
# -*- encoding: utf-8 -*-
import ConfigParser
import xmlrpclib
import optparse
import os.path
if __name__ == ‘__main__’:
    parser = optparse.OptionParser()
    parser.add_option(‘-s’, ‘–server’, dest = ‘server’, help = ‘URI of the region server’, metavar = ‘SERVER’)
    parser.add_option(‘-p’, ‘–password’, dest = ‘password’, help = ‘password of the region server’, metavar = ‘PASSWD’)
    (options, args) = parser.parse_args()
    server = options.server
    password = options.password
    gridServer = xmlrpclib.Server(server)
    res = gridServer.admin_shutdown({‘password’: password})
    if res[‘success’] == ‘true’:
        print ‘shutdown of %s initiated’ % server
    else:
        print ‘shutdown of %s failed’ % server
  • startbos

Script pour démarrer Opensim dans la console pour les essais (sans Monit et screen).  Le nom de la région doit être fourni en tant que paramètre.

#!/bin/sh
cd /home/opensim/opensim/run/$1/
mono ./OpenSim.exe -gridmode=true -smtag=$1
  • startqos

Script utilisé par Monit pour lancer Opensim (crée un fichier pid). . Le nom de la région doit être fourni en tant que paramètre.

#!/bin/sh
export PATH= »/home/opensim/bin/mono/bin:$PATH »
export PKG_CONFIG_PATH= »/home/opensim/bin/mono/lib/
pkgconfig:$PKG_CONFIG_PATH »
export MANPATH= »/home/opensim/bin/mono/share/man:$MANPATH »
export MONO_THREADS_PER_CPU=80
cd /home/opensim/opensim/run/$1/
screen -S $1 -d -m mono ./OpenSim.exe -gridmode=true -smtag=$1 &
  • stopos

Script qui est utilisé par Monit  pour arrêter un processus Opensim. Le nom de la région et le numéro de port http doivent être fournis en tant que paramètres. Ce script utilise le script « stopsoftos » ci-après.

#!/bin/sh
echo $1: stopping process
[ -e /tmp/$1.pid ] || exit 0
OPID=`cat /tmp/$1.pid`
/home/opensim/opensim/ServiceManagement/stopsoftos $2 &
sleep 90
PID=`cat /tmp/$1.pid`
if [ « $PID » = « $OPID » ]; then
kill -KILL $PID
rm /tmp/$1.pid
fi
  • stopsoftos

Script qui est utilisé par le script « stopos » pour l’arrêt d’un processus Opensim . Le numéro de port http doit être fourni en tant que paramètre.Ce script utilise les scripts  « broadcastos » et « shutdownos » pour envoyer des messages d’avertissement aux utilisateurs puis fermer Opensim.

#!/bin/sh
/home/opensim/opensim/ServiceManagement/broadcastos -s http://localhost:$1 -p votre_mot_de_passe -m « This region will restart in 1 minute! Please leave now! » &
sleep 30
/home/opensim/opensim/ServiceManagement/broadcastos -s http://localhost:$1 -p votre_mot_de_passe  -m « This region will restart in 30 seconds! Please leave now! » &
sleep 30
/home/opensim/opensim/ServiceManagement/shutdownos -s http://localhost:$1 -p votre_mot_de_passe  &

Utilisez votre mot de passe d’utilisateur opensim qui figurera aussi dans OpenSim.ini dans la section remote admin (voir ci-dessous).

IV-2 Modifications d’OpenSim.ini

  • création des fichiers pid (fichiers qui stockent les numéros de processus Linux) et paramétrage spécifique pour utiliser restart dans monit
[Startup]
……………………
; Place to create a PID file
PIDFile = « /tmp/REGION_NAME.pid »
……………………
InworldRestartShutsDown = true
  • activation de remote admin
RemoteAdmin]
    enabled = true
    access_password = votre_mot_de_passe_opensim
    port = HTTP_PORT
  • activation des webstats
[WebStats
………………………………………]
enabled=true

Si vous avez effectué les opération de la partie 2, modifiez le fichier maître dans opensim_x.x.x puis utilisez refreshos pour mettre à jour vos régions.

IV –3 Paramétrage de monit

Monit tourne sur le port 2812 et le fichier de configuration monitrc se trouve dans /etc/monit.

Voici un exemple de mon fichier /etc/monit/monitrc :

####################################################### Monit control file
######################################################
##
## Comments begin with a ‘#’ and extend through the end of the line. Keywords
## are case insensitive. All path’s MUST BE FULLY QUALIFIED, starting with ‘/’.
##
## Bellow is the example of some frequently used statements. For information
## about the control file, a complete list of statements and options please
## have a look in the monit manual.
##
##
######################################################
## Global section
######################################################
##
## Start monit in background (run as daemon) and check the services at 1-minute
## intervals.
#
set daemon 60
#
#
## Set syslog logging with the ‘daemon’ facility. If the FACILITY option is
## omited, monit will use ‘user’ facility by default. You can specify the
## path to the file for monit native logging.
#
# set logfile syslog facility log_daemon
set logfile /var/log/monit.log
#
## Set list of mailservers for alert delivery. Multiple servers may be
## specified using comma separator. By default monit uses port 25 – it is
## possible to override it with the PORT option.
#
# set mailserver mail.bar.baz, # primary mailserver
# backup.bar.baz port 10025, # backup mailserver on port 10025
# localhost # fallback relay
#
#
## By default monit will drop the event alert, in the case that there is no
## mailserver available. In the case that you want to keep the events for
## later delivery retry, you can use the EVENTQUEUE statement. The base
## directory where undelivered events will be stored is specified by the
## BASEDIR option. You can limit the maximal queue size using the SLOTS
## option (if omited then the queue is limited just by the backend filesystem).
#
# set eventqueue
# basedir /var/monit # set the base directory where events will be stored
# slots 100 # optionaly limit the queue size
#
#
## Monit by default uses the following alert mail format:
##
## -8<-
## From: monit@$HOST # sender
## Subject: monit alert – $EVENT $SERVICE # subject
##
## $EVENT Service $SERVICE #
## #
## Date: $DATE #
## Action: $ACTION #
## Host: $HOST # body
## Description: $DESCRIPTION #
## #
## Your faithful employee, #
## monit #
## -8<-
##
## You can override the alert message format or its parts such as subject
## or sender using the MAIL-FORMAT statement. Macros such as $DATE, etc.
## are expanded on runtime. For example to override the sender:
#
# set mail-format { from: monit@foo.bar }
#
#
## You can set the alert recipients here, which will receive the alert for
## each service. The event alerts may be restricted using the list.
#
# set alert sysadm@foo.bar # receive all alerts
# set alert manager@foo.bar only on { timeout } # receive just service-
# # timeout alert
#
#
## Monit has an embedded webserver, which can be used to view the
## configuration, actual services parameters or manage the services using the
## web interface.
#
set httpd port 2812 #and use address localhost
#allow localhost   # Allow localhost to connect
allow admin:monit # require user ‘admin’ with password ‘monit’
#ssl enable
#pemfile /etc/ssl/private/localhost.pem
#
#
####################################################
## Services
####################################################
##
## Check the general system resources such as load average, cpu and memory
## usage. Each rule specifies the tested resource, the limit and the action
## which will be performed in the case that the test failed.
#
check system ip_de_votre_serveur
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert
#
#
## Check a file for existence, checksum, permissions, uid and gid. In addition
## to the recipients in the global section, customized alert will be send to
## the additional recipient. The service may be grouped using the GROUP option.
#
## Check that a process is running, responding on the HTTP and HTTPS request,
## check its resource usage such as cpu and memory, number of childrens.
## In the case that the process is not running, monit will restart it by
## default. In the case that the service was restarted very often and the
## problem remains, it is possible to disable the monitoring using the
## TIMEOUT statement. The service depends on another service (apache_bin) which
## is defined in the monit control file as well.
#
# Monitor MySQL Service
check process mysql with pidfile /var/lib/mysql/votre_processus_mysql.pid
group database
start program « /etc/init.d/mysql start »
stop program « /etc/init.d/mysql stop »
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
#
# Monitor mono opensim Service for R01
check process opensim_R01 with pidfile /tmp/R01.pid
start program = « /home/opensim/opensim/ServiceManagement/startqos R01 »
stop program = « /home/opensim/opensim/ServiceManagement/stopos R01 9010 »
if totalmem > 900 Mb then alert
if totalmem > 1100 Mb then restart
if cpu usage > 20% then alert
if cpu usage > 24% for 3 cycles then restart
if failed host 127.0.0.1 port 9010 send « GET /SStats/ HTTP/1.0\r\nHost: localhost\r\n\r\n » expect « <!DOCTYPE html .* » within 5 cycles then restart
if 5 restarts within 5 cycles then timeout
#
# Monitor mono opensim Service for R02
check process opensim_R02 with pidfile /tmp/R02.pid
start program = « /home/opensim/opensim/ServiceManagement/startqos R02 »
stop program = « /home/opensim/opensim/ServiceManagement/stopos R02 9011 »
if totalmem > 900 Mb then alert
if totalmem > 1100 Mb then restart
if cpu usage > 20% then alert
if cpu usage > 24% for 3 cycles then restart
if failed host localhost port 9011 type TCP send « GET /SStats/ HTTP/1.0\r\nHost: localhost\r\n\r\n » expect « <!DOCTYPE html .* » within 5 cycles then restart
if 5 restarts within 5 cycles then timeout………………….etc

IV-4 Lancement de monit

Le fichier monitrc doit être configuré pour root.

Autorisez l’utilisation de monit en éditant le fichier /etc/default/monit et en mettant la variable sartup à 1.

Testez votre fichier de configuration en exécutant monit –t.

Si tout est bon, vous pouvez (connecté comme root) lancer le démon monit par :

/etc/init.d/monit start

Vous pouvez désormais vous connecter par http://votre_ip:2812/, login:admin mot de masse:monit (à modifier par la suite dans le fichier monitrc).

image

image

Pour arrêter monit :

/etc/init.d/monit stop

Attention : pensez à désactiver monit si vous êtes en test d’opensim ou de vos régions ! Sinon il relancera automatiquement à tout arrêt. Pensez aussi qu’il se lancera automatiquement après un reboot.

V – Automatisation des sauvegardes SQL

Sources :

AutoMySQLBackup : http://sourceforge.net/projects/automysqlbackup/

Cron : http://doc.ubuntu-fr.org/cron

V.1 Installation et paramétrage

Téléchargez ici AutoMySQLBackup dans votre répertoire opensim/bin/

Editez le fichier et créez automysqlbackup.conf dans un répertoire /etc/automysqlbackup/ comme indiqué.

Renseignez username (root) et son mot de passe dans automysqlbackup.conf

Si comme moi vous préférez une sauvegarde par base, renseignez DBNAMES= »R01 R02 R03…………”

Indiquez le répertoire de sauvegarde :

BACKUPDIR= »/home/opensim/opensim/backup/DB/ »

(J’ai créé un sous-répertoire DB pour les sauvegardes mysql)

Enfin renseignez l‘adresse email ou désactivez la fonction email.

Testez le bon fonctionnement du script.

V.2 Programmation des sauvegardes

Créez un fichier crontab pour root

sudo crontab -e

Ajoutez la ligne :

0 0 * * * /home/opensim/bin/automysqlbackup

et vos sauvegardes se lanceront tous les jours à minuit.

V.3 Restauration

En cas de problème pour restaurer une base :

cd /home/opensim/opensim/backup/DB/daily/
cp ma_sauvegarde.sql.gz /home
cd
gunzip ma_sauvegarde.sql.gz
mysql -u root -p maBase < ma_sauvegarde.sql
rm ma_sauvegarde.sql

Et pour vérifier l’intégrité d’une base :

mysqlcheck –databases Rxx –auto-repair –verbose -p

Une paire de bottes en prims

Pas vraiment de tutoriel cette fois ci, plutôt un guide de construction. Le problème face à un objet un peu complexe que l’on a jamais réalisé est que l’on se demande toujours par quel bout le prendre.

Alors parlons chaussures. Bottes, plus précisément.

Tout le monde sur Francogrid a admiré les bobottes de Fabrice qu’il ne quitte jamais (il doit dormir avec). Genre motard néopunk.

Aujourd’hui, la grande majorité des chaussures est réalisée avec des sculpties, ce qui pour un modèle simple réduit l’objet à deux prims : la semelle et le dessus du pied.

Mais les sculpties n’on pas toujours existé, et avant leur intoduction, les créateurs ont rivalisé d’ingéniosité avec nos bon vieux prims de base. De plus vous n’avez sans doute pas tous de quoi réaliser des formes sculptées.

Pour illustrer le sujet, je me suis largement inspiré d’un modèle créé par Bad Bobbysock sur Second Life.

Je rappelle qu’une botte est composée de deux parties, l’une qui sera attachée au pied (attachment foot) et l’autre au bas de la jambe (attachment lower leg).

Pas de difficulté particulière à construire, si ce n’est beaucoup de prims (et j’ai simplifié en regard de l’original).

Pièces importantes : le demi cylindre de la partie pied et le cylindre de la partie jambe qui devront être les parties maîtres (root prim) des liens pour pouvoir ajuster facilement sur l’avatar.

Partie pied

image image 

Vue éclatée du haut

boot1

Vue éclatée du bas

boot2

Partie jambe

image image

En vue éclatée

boot3

Vous trouvez qu’il y a beaucoup de prims ? Attendez que je vous parle des manteaux en fourrure ou des bijoux !

Construisez vos premières formes directement sur votre avatar sur son pose stand. Pour les pieds prenez une forme du genre:

Shoe height 29
Heel height 87
Toe thickness 12
Platform height 95

Sur la partie basse du pied, vous remarquez une forme grise. C’est celle qui va nous servir à dissimuler une partie du pied qui dépasse, ce grâce à ce script qui rend invisible tout ce qui est recouvert par le prim qui le contient :

// Invisibility Prim Public v1.1b
// by Beatfox Xevious

init()
{
    llSetPrimitiveParams([PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_NONE, PRIM_BUMP_BRIGHT]);
    llOffsetTexture(0.468, 0.0, ALL_SIDES);
    llScaleTexture(0.0, 0.0, ALL_SIDES);
    llSetAlpha(1.0, ALL_SIDES);
}

refresh()
{
    llSetTexture(« 38b86f85-2575-52a9-a531-23108d8da837 », ALL_SIDES);
    llSleep(30);
    llSetTexture(« e97cf410-8e61-7005-ec06-629eba4cd1fb », ALL_SIDES);
}

default
{
    state_entry()
    {
        init();
        llSetTimerEvent(5);
    }
    on_rez(integer start_param)
    {
        init();
    }

    timer()
    {
        if ((integer)llGetWallclock() % 60 < 10)
        {
            refresh();
        }
    }
}

//End script

Allez courage, montrez nous vos bottes. Dans d’autres billets, je vous parlerai des chaussures sculptées et des chaussures de femmes (ah, les talons hauts, il y a un truc !).

Mes cheveux 1 : ma première perruque

Vous venez d’arriver sur OpenSim et vous trouvez qu’une perruque ajouterait du charme à votre avatar ? Rien de plus facile…ni de plus fastidieux.

De quoi avez-vous besoin ?

Au choix, vous pouvez la réaliser sur vous même avec un stand de pose, sur une sphère modifiée pour s’approcher au plus près du volume de votre tête ou certains se sont même fait un mannequin en scuplties dédié à cet effet.

Personnellement, j’utilise la première solution.

Pas de stand de pose ? Faites-le vous-même. Créez un cylindre de 1x1x0.2. Téléchargez ce petit fichier bvh : poseT , importez le sur OpenSim (menu import animation, cochez loop et mettez la priorité sur 4) et copiez le dans votre cylindre. Editez votre cylindre, dans l’onglet content, cliquez sur new script, ouvrez le script (clic doit, open), effacez le contenu et recopiez-y le script standard suivant :

////////Pose Stand
string animation = « poseT »;
  // the animation name must be stored globally to be able to stop the animation when standing up
default
{
    state_entry()
    {
        // set sit target, otherwise this will not work
        llSitTarget(<0.0, 0.0, 2.0>, ZERO_ROTATION);
    }
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            key av = llAvatarOnSitTarget();
            if (av) //evaluated as true if not NULL_KEY or invalid
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);
            else // avatar is standing up
            {
                if (animation)
                    llStopAnimation(animation); // stop the started animation
                llResetScript(); // release the avatar animation permissions
            }
        }
    }
    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION)
        {
                llStartAnimation(animation);
        }
    }
}
//////End script

Sauvez et voila votre stand (clic droit sur le cylindre et sit).

image

J’allais oublier ! Ici, il vaut mieux être chauve pour porter une perruque. Si vous n’avez pas déjà de “chevelure chauve”, créez la vôtre :

  • ouvrez votre inventaire, et faites create new body part new hair,
  • nommez la, clic droit et wear
  • dans le menu général, faites edit appearence, sélectionnez hair, et mettez à zéro tous les curseurs des 4 fenêtres.
  • sauvez.

Maintenant préparons nos ingrédients.

Une texture. Si vous avez un programme graphique, vous pouvez vous la
créer vous-même. Voici quelques liens :

Les sites dédiés à Poser, comme renderosity, sont également une vraie mine d’or (dans le fichier zip au format poser, les textures sont dans le répertoire runtime/textures). Vous aurez peut être quelques retouches à faire, les chevelures poser étant beaucoup plus complexes que celles que nous allons réaliser.

Pour notre exemple, téléchargez et importez ces deux textures :

noir1 noir2

Créez un cylindre X:0.03, Y:0.01, Z:0.2 et appliquez la texture.noir2. Dans l’onglet features, rendez ce cylindre flexible avec ces paramètres :

image image

Répartissez en 20 copies autour de la tête comme ceci :

image image

Ne soyez pas trop régulier et modifiez légèrement les tailles et hauteur pour introduire de la diversité.

Ensuite, créez un torus avec ces caractéristiques et appliquez la texture noir1.

image image

image

Répartissez en 25 copies (ah ! les rotations !) autour de la tête (variez un peu les hauteurs).

image image

Modifiez légèrement les paramètres d’au moins la moitié des mèches pour que l’ensemble paraisse vivant.

Enfin pour finir, créez un torus avec ces caractéristiques et appliquez la texture noir1.

image image

image

Placez 5 ou 6 mèches sur le côté droit de la tête et 2 ou 3 à gauche.

image

Vous pouvez descendre de votre piédestal.

Créez une sphère de 0.05 de diamètre et positionnez la au milieu de la perruque. Sélectionnez l’ensemble des prims, puis avec la touche shift enfoncée, cliquez sur la sphère une fois pour la désélectionner, puis une seconde fois pour la re-sélectionner, afin de s’assurer qu’elle sera bien le prim principal du lien. Dans le menu principal, faites tools link pour lier les prims.

image

Nommez la perruque, puis clic droit et take pour la mettre dans votre inventaire.

Remontez sur votre stand, Dans votre inventaire, clic droit sur votre belle chevelure, et choisissez attach to skull. Editez l’objet et modifiez les rotations et positions jusqu’à ce que vous soyez satisfait. Et voilà !

Vous pouvez détacher la perruque, elle se remettra en place correctement.

A bientôt pour plus compliqué.

Animation sur OpenSim (2/2)

Maintenant que vous commencez à maîtriser l’utilisation de bvhacker, nous allons essayer de résoudre ensemble quelques unes des difficultés que vous pourriez rencontrer.

Tout d’abord, deux précisions :

  • les animations, sur Second Life ou OpenSim, ne peuvent pas dépasser 10 secondes. Alors vérifiez bien la durée, elle est indiquée en bas à gauche de l’écran. Si elle est supérieure, l’import ne se fera pas.
  • les fichiers motion capture peuvent être très lourds. Utilisez le bouton resample to 20 fps qui donne un débit largement suffisant.

1)  bvhacker m’indique que l’alignement des bras est fait sur l’axe des Y

En bas à gauche de l’écran  Arms alignment : along Y axis

Traitons le sujet par l’exemple. Téléchargez sur le site d’animazoo le fichier jump_kick.bvh. Il possède ce type de structure non compatible avec Second Life.

Exécutez scrupuleusement les opérations dans l’ordre suivant :

  • reconstituez le squelette au format poser
Hips hip
LeftUpLeg lThigh
LeftLeg lShin
LeftFoot lFoot
LeftFootHeel Supprimé
End  Site OK
RightUpLeg rThigh
RightLeg rShin
RightFoot rFoot
RightFootHeel Supprimé
End Site OK
Spine abdomen
Spine1 chest
LeftShoulder lCollar
LeftArm lShldr
LeftForeArm lForeArm
LeftHand lHand
End Site OK
RightShoulder rCollar
RightArm rShldr
RightForeArm rForeArm
RightHand rHand
End Site OK
Neck neck
Head head
End Site OK

Cliquez successivement :

  • sur le bouton NoOff . Simple précaution : Bvhacker va vérifier que le format n’utilise pas plus d’offsets des joints que Second Life n’en supporte et va si nécessaire supprimer les offsets excédentaires.
  • sur le bouton !Zero. Simple précaution également. Second Life risque ignorer les rotations en dessous d’une certaine valeur. bvhacker va apporter si c’est le cas les corrections nécessaires. ATTENTION : à n’utiliser qu’une fois avant toute manipulation sur le fichier !
  • sur le bouton SLify, et répondez oui au deux questions qui vous sont posées.

Mettez vous en mode translation, en vue Floor, et, le joint hip sélectionné, descendez le personnage avec le curseur Y jusqu’à ce que ses pieds touchent le sol.

Vous pouvez maintenant rajouter votre pose de départ avec SetT et sauver votre animation.

La précaution à prendre : la fonction SLify tente de renommer les joints au format poser mais se révèle très approximative. Commencez toujours par reconstituer le squelette manuellement, sinon elle risque corrompre le fichier définitivement.

2. Le mouvement de l’animation que je souhaite traiter ne se fait pas face à l’écran (translation Z) mais de gauche à droite (translation X)

Surtout n’essayez par de traiter le problème par une rotation de l’animation. Ou plutôt, essayez une fois pour voir le résultat…..désastreux.

Souvenez vous : le sens de l’animation est fourni dans Second Life par la pose T de départ. Il faut donc effectuer une rotation de 90° de cette pose seulement. bvhacker ne permet malheureusement pas cette opération, nous allons devoir utiliser un logiciel d’animation.

Téléchargez et installez QAvimator .

Si vous chargez votre animation telle qu’elle, vous aurez la surprise de voir que vous ne pouvez pas modifier la première image. QAvimator étant un logiciel dédié aux animations Second Life, la première image est pour lui intangible.

Nous allons donc tricher un peu. Dans bvhacker, cliquez une deuxième fois sur SetT et vous allez obtenir deux poses en T successives au début de l’animation. Vous pouvez désormais appliquer dans QAvimator la rotation nécessaire du joint hip pour que la pose T soit dans le même sens que l’animation (positionnez le curseur sur le joint hip de l’image 2 et appliquez une rotation Y de –90 ou 90°) . Sauvegardez, ré-importez dans bvhacker et cliquez sur RemT. La première image est supprimée et vous avez désormais en première image une position en T orientée dans le sens souhaité.

Si votre fichier bvh n’est pas parfaitement compatible Second Life et que vous essayez de le charger dans QAvimator, vous aurez….un beau crash

3. L’animation est trop lente (ou trop rapide)

En bas de l’écran de bvhacker, modifiez le frame time. La vitesse n’est pas exactement conforme à ce que vous allez obtenir sur OpenSim, alors faites des essais. Et surveillez la durée de l’animation (animation time en bas à gauche de l’écran) pour ne pas dépasser les 10 secondes autorisées.

4. Je veux faire plusieurs animations et c’est fastidieux de renommer les joints à chaque fois.

Si les fichiers sont du même format (nom des joints du squelette), vous pouvez automatiser un peu le traitement.

Téléchargez Fart, un petit utilitaire de recherche et remplacement de texte.

Faites-vous un fichier batch. Voici à titre d’exemple celui que j’utilise pour les fichiers de C.M.U.

fart -r monfichier.bvh Hips "hip"
fart -r monfichier.bvh LeftUpLeg "lThigh"
fart -r monfichier.bvh LeftLeg "lShin"
fart -r monfichier.bvh LeftFoot "lFoot"
fart -r monfichier.bvh RightUpLeg "rThigh"
fart -r monfichier.bvh RightLeg "rShin"
fart -r monfichier.bvh RightFoot "rFoot"
fart -r monfichier.bvh Spine "abdomen"
fart -r monfichier.bvh Spine1 "chest"
fart -r monfichier.bvh Neck1 "neck"
fart -r monfichier.bvh LeftShoulder "lCollar" 
fart -r monfichier.bvh LeftArm "lShldr"
fart -r monfichier.bvh LeftForeArm "lForeArm"
fart -r monfichier.bvh LeftHand "lHand"
fart -r monfichier.bvh RightShoulder "rCollar" 
fart -r monfichier.bvh RightArm "rShldr"
fart -r monfichier.bvh RightForeArm "rForeArm"
fart -r monfichier.bvh RightHand "rHand"

A l’aide d’un éditeur de texte, remplacez “monfichier.bvh” par le nom de votre fichier et sauvegardez en fart.bat

Lancez fart.bat qui doit être dans le même répertoire que fart.exe et le fichier à traiter.

Attention à une utilisation avec *.bvh : non seulement tous les fichiers du répertoire seront traités mais aussi ceux des sous-répertoires.

5. Je ne connais pas la correspondance des joints du fichier bvh avec ceux de Second Life.

Désolé, je ne peux pas vous aider. Si les champs de structure des joints et de leurs mouvements sont standards dans les fichiers bvh, il est possible de créer dans les logiciels d’animation autant de types de squelettes qu’on le souhaite. Vous connaissez la structure d’arrivée et je vous ai fourni deux exemples, faites des essais et vous trouverez.

Pour terminer, vous trouverez dans la page lien les sites de fichiers bvh gratuits que je connais. Bonne animation !

Animation sur OpenSim (1/2)

Peut être avez vous envie de nouvelles animations ? Et ni le courage d’apprendre a maitriser les poids-lourds de cette technique, ni les moyens de vous les offrir (Motion Builder 4.400€ H.T.)

Plus sérieusement, le logiciel le plus adapté serait sans doute Poser, ne serait-ce que pour son intégration naturelle avec Second Life (et donc opensim) puisque leurs avatars ne sont que les mannequins d’une ancienne version (la version 2). Mais bon, 200€ quand même.

Il existe une alternative qui s’appelle “motion capture”. Il existe des milliers de fichiers au format normalisé bvh en téléchargement libre dans lesquels vous trouverez probablement votre bonheur. Encore faut il les adapter, ce sera le sujet de cette première leçon, dédiée aux membres de Francogrid .

Notre principal outil de travail sera bvhacker que vous allez télécharger ici .

Prenez connaissance de son fonctionnement sur cette page.

Nous allons prendre notre exemple sur la Carnegie Mellon University Motion Capture Database (environ 2.500 fichiers). Rendez vous sur la page de téléchargement au format bvh Motion Builder qui se trouve ici .

Lancez le téléchargement du fichier zip  BVH directories 01-09 (32 MB) et allez prendre un café.

Dézipper le fichier. Le zip contient un fichier d’index avec la description des motions capture existantes qui pourra vous orienter par la suite dans vos choix.

Dans la série 02, nous allons travailler sur le fichier 02_01 Walk pour créer une courte animation de marche. Ouvrir le fichier avec bvhacker et lancer l’animation . Nous allons devoir apporter plusieurs corrections :

  • le sujet n’est pas centré
  • il se déplace suivant l’axe des Z (alors qui nous voulons une marche “sur place”)
  • le squelette est au format Motion Builder et non au format de Poser/SL
  • nous voulons une marche en boucle

Par contre sa position en rotation Y est correcte, il est face à nous. Une autre position devrait être corrigée, nous verrons comment par la suite.

De même l’alignement des bras (signalé en bas à gauche : arm alignment along X axis) est correct. Un alignement selon les Y devrait être également corrigé.

  1. Modification du squelette

Sauvegarder le fichier (bouton save) dans un répertoire de travail, bvhacker est parfois un peu capricieux pour les manipulations que nous allons effectuer.

Voici le tableau de passage du format des joints de Motion Builder au format Poser :

Hips (ou Hip) hip
LHipJoint Supprimé
Thigh (ou LeftUpLeg) lThigh
LeftLeg lShin
LetfFoot lFoot
LeftToeBase Supprimé
End Site OK
RHipJoint Supprimé
RightUpLeg rThigh
RightLeg rShin
RightFoot rFoot
RightToeBase Supprimé
End Site OK
LowerBack Supprimé
Spine abdomen
Spine1 chest
Neck Supprimé
Neck1 neck
Head head
End Site OK
LeftShoulder lCollar
LeftArm lShldr
LeftForeArm lForeArm
LeftHand lHand
LeftFingerBase Supprimé
LFingers Supprimé
End Site OK
LThumb Supprimé
End Site Supprimé
RightShoulder rCollar
RightArm rShldr
RightForeArm rForeArm
RightHand rHand
RightFingerBase Supprimé
RFingers Supprimé
End Site OK
RThumb Supprimé
End Site Supprimé

Pour modifier le nom d’un joint, sélectionnez le dans le tableau en haut a gauche, clic droit et Rename joint.

Pour le supprimer, clic droit et Delete Joint..

Attention à respecter parfaitement les noms et la casse, sinon le fichier ne fonctionnera pas.

Nous devons aboutir à ceci :

image

Si vous êtes arrivé jusque là sans crash de bvhacker, sauvegardez cette étape. Sinon, recommencez avec des sauvegardes intermédiaires.

2. Correction des positions et translations

image Vérifiez que le joint sélectionné est bien hip et sélectionnez le mode translation. La position en X est à 10.42 . Ramenez la à zéro avec le curseur. Ramenez éventuellement le champ du curseur au minimum (2) pour vous aider

Attention au fonctionnement de bvhacker. Toute modification de la position des curseurs change la totalité des images et pas uniquement celle sur laquelle vous êtes positionné. Cette fonction est très puissante et va nous être très utile, mais bvhacker n’autorise pas la modification d’une image (ce n’est pas un logiciel d’animation).

Ensuite, en haut à droite de l’écran, cliquez sur le bouton Z. Cela va mettre tous les champs de translation sur l’axe Z à zéro. Lancez l’animation. Notre sujet est maintenant centré au milieu de l’écran et marche sur place.

image Dans le champ des vues à droite (View) cliquez sur le bouton Floor pour vérifier que l’avatar ne va pas flotter au dessus du sol. Dans le cas présent nous n’avons pas de modification à apporter. Sinon nous aurions modifié sa position avec le curseur Y. Placez vous maintenant en vue right pour faire la boucle.

Remarque : nous aurions pu utiliser le bouton X pour mettre a zéro les translations en X, mais comme le sujet marche droit, un simple centrage des vues nous permet de conserver le balancement des hanches.

Sauvegardez cette étape.

3. Mise en place de la boucle

Comme il s’agit d’une animation de marche, nous souhaitons mettre en place une boucle infinie. Pour cela faites défiler l’animation pour essayer de trouver aux deux bouts de l’animation des positions les plus similaires possible dans le même mouvement.

Choisissons par exemple les images 9 et 278.

Positionnez vous sur l’image 9 et cliquez en bas à droite de l’écran sur le bouton Mark in. Puis sur l’image 278 et cliquez sur le bouton Mark out.

Ensuite cliquez sur Crop, ce qui va effacer les images hors du champ que vous avez sélectionné. Puis cliquez sur Knit ce qui va adoucir la transition entre la première et la dernière image.

Lancez l’animation. Voilà une belle boucle ! Sauvegardez cette étape.

4. Mise en forme du fichier pour opensim

image Dans Second Life, la première image d’une animation sert uniquement de référence pour définir les parties du corps à animer et la position initiale des hanches. Cette image n’est jamais jouée.Toutes les translations et les rotations sont à  0 sur cette première image (pose en T).

Cliquez sur le bouton Set T qui va la générer.

Cliquez enfin sur le bouton Slify qui va contrôler la compatibilité SL.

Sauvegardez votre projet final prêt pour l’import.

5. Importation de l’animation sur opensim

image Connectez vous à OpenSim et dans le menu, utilisez File, Upload animation pour charger votre fichier bvh.
Cochez la case loop. Vérifiez le bon fonctionnement de votre animation.
Au moment de l’import, une priorité d’exécution est donnée à l’animation. Le niveau de priorité varie entre 0 et 4, 4 étant la priorité la plus haute. Les animations standards ont en général une priorité de 2. Si par exemple votre animation est destinée à un “animation overrider”, mettez la priorité à 4.

Upload ! Félicitations, vous venez d’importer votre première animation sur OpenSim. Dans un billet suivant, nous verrons quelques astuces complémentaires.

Suivre

Recevez les nouvelles publications par mail.