Geschrieben von: Manny Emor
|
22. Juni 2010
Jeder, der sich mit OpenSim beschäftigt und solch eine Simulation auf seinem Server laufen läßt, wird sich früher oder später Gedanken über Recourcennutzung, Monitoring, Updates, Start/Stop usw. machen müßen. Bei meinen Recherchen bin ich auf einen sehr detailierten Artikel (Originalartikel: http://snoopypfeffer.wordpress.com/2009/05/09/opensim-service-management/) von Snoopy Pfeffer (Kontakt: http://snoopypfeffer.wordpress.com/about/) gestoßen. Ich bat Snoopy, diesen Artikel ins deutsche übersetzen zu dürfen.
Hier also der gesamte Artikel:
Vorwort: der folgende Artikel beschreibt, wie Snoopy Pfeffer eigene Regionen laufen läßt, wie der Upgrade Prozess zu OpenSim ist, und wie reguläre Backups erstellt werden.
Verzeichnisstruktur:
Auf dem Server ist ein eigener User 'opensim' eigerichtet. In dem Homeverzeichnis dieses Benutzers werden alle OpenSim Dateien in einem Unterverzeichnis 'opensim' angelegt. Dieses Unterverzeichnis enthält ebenso ein Verzeichnis für jede OpenSim Version, die installiert ist.
Die Verzeichnisnamen sind wie folgt: "opensim_xxxx", wobei "xxxx" gleich der OpenSim SVN Nummer ist. Die gleiche Richtlinie wird für das Verzeichnis mit dem 'Searchmodul' angewendet. Die Software wird direkt in diesen Verzeichnissen compliert und ebenfalls die Standard-Konfigurationsfiles werden dort abgelegt.
Das Unterverzeichnis 'Servicemanagement' enthält alle Scripts und PID's ( process id) die für das OpenSim Management benötigt werden.
Für jede OpenSim Region, die in einem eigenen Serverprozess laufen, werden seperate Unterverzeichnisse namens 'run' benutzt. Das 'run' Verzeichnis enthält die Opensimversion, die zur Zeit benutzt wird. Das Verzeichnis 'run_old' werden die Vorgängerversionen gespeichert, so dass man immer die Möglichkeit eines 'Roll backs' hat.
In den 'run' Unterverzeichnissen befinden sich größten Teils Symbolic-Links zu den Dateien in 'opensim_xxx/bin'. Nur OpenSim.ini und die Regionsdateien sind echte Kopien. Die OpenSim.ini wird gegebenenfalls manuell angepasst. Ebenfalls werden unabhängige Regions und Scriptcache Verzeichnisse für jede Opensim-Server Instanz genutzt, da hier regionsspezifische Dateien gespeichert werden.
Neben den schon genannten Verzeichnissen wird 'tmp' für den Download neuer Releases und das Testen benutzt wird, und danach gemäß den oben genannten Konventionen umbenannt wird. Darüberhinaus gibt es ein Verzeichnis 'doc' für die Dokumentation und ein Verzeichnis 'backup' für backups der OpenSim.ini sowie Regionsdateien und oar Dateien.
.opensim
|-doc
|-backup
|-opensim_xxxx
|—bin
|—–Regions
|-ossearch_xxx
|—trunk
|-run
|—H1
|—–Regions
|—–ScriptEngines
|—H2
|—–Regions
|—–ScriptEngines
|—M3
|—–Regions
|—–ScriptEngines
|—M4
|—–Regions
|—–ScriptEngines
|—M5
|—–Regions
|—–ScriptEngines
|-run_old
|—H1
|—–Regions
|—–ScriptEngines
|—H2
|—–Regions
|—–ScriptEngines
|—M3
|—–Regions
|—–ScriptEngines
|—M4
|—–Regions
|—–ScriptEngines
|—M5
|—–Regions
|—–ScriptEngines
|-ServiceManagement
|-tmp
Interne Regionsnamen
Die folgende Konventionen werden für die Benamung der Verzeichnisse, MySQL Datenbanken und Prozess ID Dateien (pid) verwendet. Diese Namen sind völlig unabhängig der Namensgebung für die jeweiligen Regionen in OSGrid oder einem anderen Grid.
-
zuerst ein Buchstabe: H = high traffic, M = medium traffic, L = low traffic
-
dann die Nummer des Regionsserver Prozesses beginnend mit 1
Beispiel: H1 ist der erste OpenSim Prozess auf dem Server. Auf diesem OpenSim Server läuft eine 'high traffic' Region. M3 ist der dritte OpenSim Server Prozess. Auf diesem läuft eine Region mit mittlerer Frequentierung.
Update von OpenSim - Prozess und Scripte
Snoopy Pfeffer hat einige Scripts sowie einen Prozess entwickelt, mit dem sich viele OpenSim Regionen auf einem Server schnell updaten lassen und zudem immer die Möglichkeit eines 'roll backs' vorhanden ist. Folgende Schritte sind für ein Update nötig:
1. gehe in das Verzeichnis 'tmp' und lade die letzte OpenSim Version herunter
$ svn co http://opensimulator.org/svn/opensim/trunk opensim
oder lade eine spezielle Version von OpenSim herunter
$ svn co -r <version> http://opensimulator.org/svn/opensim/trunk opensim
2. benenne das Verzeichnis um in opensim_xxxx und 'bewege' (nicht kopiere!) es 'hoch'
$ mv opensim opensim_<opensim version>
$ mv opensim_<opensim version> ..
3. lade die letzte Version von OpenSim Search herunter, benenne das Verzeichnis um und bewege es 'aufwärts'
$ svn checkout http://forge.opensimulator.org/svn/ossearch
$ mv ossearch ossearch_<ossearch version>
$ mv ossearch_<ossearch version> ..
4. gehe in das Verzeichnis der neuen OpenSim Installation und reinige es:
$ cd ../opensim_<opensim version>
$ ./runprebuild.sh
$ nant clean
Wenn eine Fehlermeldung angezeigt wird, bitte nochmals nant clean ausführen!
5. Installiere das letzte Opensim Such Modul:
cp -r ../ossearch_<ossearch version>/trunk/* .
6. Compiliere OpenSim:
$ ./runprebuild.sh
$ nant
Wenn eine Fehlermeldung angezeigt wird, bitte nant noch einmal starten.
7. Um OpenSim zu konfigurieren, kann die OpenSim.ini.example im Verzeichnis "bin" benutzt werden um eine völlig neue Konfiguration zu erstellen. Normalerweise wir man aber eine Version benutzen, mit der schon die Vorgängerversionen von OpenSim konfiguriert waren. Um dies zu tun, sollte man einen Vergleich zwischen der alten und der neuen Version durchführen. Danach kann die Kopie des alten OpenSim.ini Files bearbeitet werden. Am Schluß befindet sich dann eine neue angepasste OpenSim.ini im "bin" Verzeichnis.
$ cd bin
$ cp ../../opensim_<opensim old version>/bin/OpenSim.ini .
$ diff ../../opensim_<opensim old version>/bin/OpenSim.ini.example OpenSim.ini.example
$ vi OpenSim.ini
In der normalen OpenSim.ini im 'bin' Verzeichnis werden folgende symbolische Bezeichnungen verwendet, die später mit den richtigen Werten ersetzt werden müßen. Das vereinfacht die Pflege vieler OpenSim Regionen weil nur das 'Master-OpenSim.ini File angepasst werden muss. Alle anderen opensim.ini Dateien werden dann automatisch mit den richtigen Werten mittels eines Scripts (Erklärung folgt später) erstellt.
-
REGION_NAME
-
HTTP_PORT
-
DATABASE_NAME
-
DATABASE_PASSWORD
-
SERVER_IP
-
VOICE_IP
-
AV_CAPSULE (wird nur für 64 bit Server benötigt)
8. Zum Schluss wird überprüft, ob alle Dateien richtig erstellt worden sind. Danach zurück ins Haupt OpenSim Verzeichnis:
$ ls *.ini libode* *Sea*
$ cd ../..
9. Jetzt wird automatisch ein 'run_new' Verzeichnis für die neue Simulation erzeugt. Dieses neue Verzeichnis basiert auf der OpenSim Distribution, welche wir gerade geladen, compiliert und erstellt haben, sowie den Regionen aus dem zur Zeit aktivem 'run' Verzeichnis. Das aller erste mal muss das 'run' Verzeichnis manuell angelegt werden.
$ updateos opensim_<opensim version (ohne slash am Ende!)>
Dieses Script erstellt die OpenSim.ini für jede Region!
10. Alle laufenden OpenSim Prozesse stoppen. PID und MONO Dateien aufräumen (siehe “rmpiddsos” und “clearos” scripts in nächstem Abschnitt) und wechseln zur neu installierten Version mit Hilfe der folgenden Befehle:
$ rm -fr run_old
$ mv run run_old
$ mv run_new run
11. Entweder Neustart der OpenSim Prozesse (siehe auch MONIT im nächsten Abschnitt) oder Neustart des gesamten Servers, um andere Linux Updates zu installieren.
12. Zum Schluss einloggen, und überprüfen, ob tatsächlich alle Regionen in allen Instanzen laufen. INWorld testen, ob alle Scripts laufen, rezzen ok ist, Teleports funktionieren, etc ...
Ab und Zu müßen Scripts resettet werden, damit sie korrekt laufen. Normalerweise sind es immer die selben Scripts, die nach einem Update neu gestartet werden müßen. Eventuell macht es Sinn, sich diese Aufzuschreiben - oder sogar einen Automatismus zum Neustart zu schreiben.
Sollten tatsächlich emense Probleme nach einem Sim Update auftauchen, dann einfach alle OpenSim Prozesse stoppen unddas Verzeichnis 'run' in 'run_broken' und 'run_old' in 'run' umbenennen. Danach Neustart aller OpenSim Prozesse. Damit ist man wieder mit seiner alten Konfiguration live
Wenn OpenSim.ini geändert werden muss, wird diese Änderung in der 'master OpenSim.ini' eingepflegt und dann das folgende Script ausgeführt, um die Änderung in allen Simulationen anzuwenden:
$ refreshos opensim_<opensim version (ohne Slash am Ende!)>
Servise Management Scripts
Der vorhin beschrieben Prozess benötigt 2 Scripts, welche im Verzeichnis ~/bin zu finden sind. Diese beiden Scripts ersetzen die vorhin angesprochen Bezeichner (REGION_NAME, HTTP_PORT, DATABASE_NAME, DATABASE_PASSWORD, SERVER_IP, VOICE_IP and AV_CAPSULE) in OpenSim.ini:
updateos
#!/bin/sh
# updateos
echo Updating OpenSim…
cd /home/opensim/opensim/
mkdir run_new
cd run_new
mkdir M1 M2 M3 M4 M5 M6
mkdir M1/Regions M2/Regions M3/Regions M4/Regions M5/Regions M6/Regions
mkdir M1/ScriptEngines M2/ScriptEngines M3/ScriptEngines M4/ScriptEngines M5/ScriptEngines M6/ScriptEngines
cp ../run/M1/Regions/* M1/Regions
cp ../run/M2/Regions/* M2/Regions
cp ../run/M3/Regions/* M3/Regions
cp ../run/M4/Regions/* M4/Regions
cp ../run/M5/Regions/* M5/Regions
cp ../run/M6/Regions/* M6/Regions
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M1/g’ -e ‘s/HTTP_PORT/9010/g’ -e ‘s/DATABASE_NAME/M1/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M1/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M2/g’ -e ‘s/HTTP_PORT/9011/g’ -e ‘s/DATABASE_NAME/M2/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M2/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M3/g’ -e ‘s/HTTP_PORT/9012/g’ -e ‘s/DATABASE_NAME/M3/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M3/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M4/g’ -e ‘s/HTTP_PORT/9013/g’ -e ‘s/DATABASE_NAME/M4/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M4/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M5/g’ -e ‘s/HTTP_PORT/9014/g’ -e ‘s/DATABASE_NAME/M5/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M5/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M6/g’ -e ‘s/HTTP_PORT/9015/g’ -e ‘s/DATABASE_NAME/M6/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M6/OpenSim.ini
cd M1
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../M2
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../M3
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../M4
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../M5
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../M6
ln -s ../../$1/bin/* .
ln -s ../../$1/bin/.* .
cd ../..
refreshos
#!/bin/sh
# refreshos
echo Refreshing OpenSim INI Files…
cd /home/opensim/opensim/run/
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M1/g’ -e ‘s/HTTP_PORT/9010/g’ -e ‘s/DATABASE_NAME/M1/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M1/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M2/g’ -e ‘s/HTTP_PORT/9011/g’ -e ‘s/DATABASE_NAME/M2/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M2/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M3/g’ -e ‘s/HTTP_PORT/9012/g’ -e ‘s/DATABASE_NAME/M3/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M3/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M4/g’ -e ‘s/HTTP_PORT/9013/g’ -e ‘s/DATABASE_NAME/M4/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M4/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M5/g’ -e ‘s/HTTP_PORT/9014/g’ -e ‘s/DATABASE_NAME/M5/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M5/OpenSim.ini
cat ../$1/bin/OpenSim.ini | sed -e ‘s/REGION_NAME/M6/g’ -e ‘s/HTTP_PORT/9015/g’ -e ‘s/DATABASE_NAME/M6/g’ -e ‘s/DATABASE_PASSWORD/password/g’ -e ‘s/SERVER_IP/71.6.217.139/g’ -e ‘s/VOICE_IP/66.240.232.99/g’ -e ‘s/AV_CAPSULE/1700000/g’ > M6/OpenSim.ini
cd ..
Service Management mit Monit
tbd