Server mit OpenSuse anlegen

Wie öfters notiere ich mir alles, was ich mir erst arbeiten musste, damit ich es nicht vergesse und andere davon profitieren können.

Alles fängt damit an, dass man sich einen vServer (von „virtueller Server“) mietet. Ich habe das bei Hetzner gemacht und den einfachsten ausgewählt. Es gibt natürlich andere Anbieter, aber bei der einfachen Ausstattung war Hetzner der billigste Anbieter. Bei einer besseren Ausstattung gibt es billigere Anbieter.

Warum OpenSuse?

Nun ja, der Grund ist einfach der, dass wir bei uns daheim auf allen unseren Rechnern seit vielen Jahren OpenSuse als Betriebssystem verwenden. Daher kennen wir uns mit dem üblichen Befehlen und Problemen einigermaßen gut aus. Auch Windows-Nutzer können sich einen OpenSuse-Server mieten. Einfacher oder komplizierter wird es mit den anderen Linux-Betriebssytemen auch nicht.

Per ssh sicher auf den Server

Der übliche „Weg“, um auf dem Server etwas zu machen, ist über die Konsole mit ssh. Die Konsole öffnet man bei sich auf dem Heimrechner (gibt es bei unter OpenSuse natürlich!) und nimmt die vom Server-Betreiber und -Vermieter gelieferten Zugangsdaten. Das sind im wesentlichen die IP-Adresse des Server (im IP4-Format) und das Passwort für den root-Zugriff

Übersetzung: Die Konsole ist das Gegenteil zu einer grafischen Benutzeroberfläche. Statt etwas anzuklicken muss man einen Textbefehl eintippen. Die Übertragung von Textbefehlen ist einfacher als eine grafische Oberfläche zu übertragen. Daher ist die Konsolen-Bedienung schnell und effektiv.

Übersetzung: Der Benutzer „root“ ist auf Linux sozusagen der Ober-Boss des Systems. Man meldet sich als root nur an, wenn man etwas im System erledigen will und nutzt für dei alltägliche Arbeit einen anderen Account.

Windows-Nutzer müssen sich ein Konsolenprogramm installieren, wie zum Beispiel Putty.

Übersetzung: Secure Shell oder SSH bezeichnet sowohl ein Netzwerkprotokoll als auch entsprechende Programme, mit deren Hilfe man auf eine sichere Art und Weise eine verschlüsselte Netzwerkverbindung mit einem entfernten Gerät herstellen kann. 

Man kommt auf den Server mit diesem Befehl drauf, wo statt IP_ADRESSE natürlich die vier Gruppen von Zahlen stehen müssen, die man vom Server-Vermieter erhalten hat.

ssh root@IP_ADRESSE

Übersetzung: „ssh“ ist der Befehl, mit dem man die Verbindung startet. „root“ ist der Benutzername, als den man sich „auf“ (@ = at) dem Rechner im Internet mit der genannten „IP_ADRESSE“ anmeldet.

Nach der Eingabe muss man das Passwort angeben, um nachzuweisen, dass man auf den Server drauf darf.

Da die zufällig erzeugten Passwörter meist schön sicher aber dementsprechend kompliziert sind, sollte man möglichst bald ein eigenes Passwort einstellen, dass natürlich sicher sein sollte, damit es nicht per Zufall herausgefunden wird. Dazu gibt man in der Konsole, nach der Anmeldung auf dem Server folgendes ein:

passwd

… und anschließend wird man nach dem neuen Passwort gefragt.

Minetest installieren

Das installierte OpenSuse-System enthält nur die wichtigsten Programme. Minetest ist noch nicht enthalten und auch die Installation ist nicht direkt möglich. Grund dafür ist, dass üblicherweise (erst Recht für einen Server) das Repository nicht eingebunden ist, das Minetest enthält.

Übersetzung: Bei Linux ist die Installation über Pakete geregelt, die auch Informationen enthalten, von welchen anderen Programmen eine Software abhängig ist. Dabei bindet man das Betriebssystem meist an Softwareverzeichnisse an (die Repositorys), in denen die Software auch regelmäßig erneuert wird. Über das Repository bekommt man auch Software angeboten, die nicht direkt zum Betriebssystem gehört. Es gibt einige Quellen, die solche Software-Verzeichnisse anbieten und damit eine Art Service leisten, immer die aktuellste Version einer Auswahl von Programmen zu erstellen. Dazu gehört das Übersetzen (Kompilieren) der Programm-Quelldateien (die die Entwickler erstellen) passend zu dem jeweiligen Betriebssystem. Und dank der klar festgelegten Abhängigkeiten bekommt man meist auch alle notwendigen Programme mitinstalliert. Organisiert wird das alles über einen Paketmanager, der bei OpenSuse Zypper heißt.

Um Minetest zu installieren muss man also erst einmal das Repository in den Paketmanager einbinden, dass Minetest für das aktuelle Betriebssystem anbietet.

zypper addrepo ???

Wenn man nicht sicher, wie das zu installierende Programmpaket heißt, kann man in den eingebundenen Repositorys nachschauen, indem man nach einem bekannte Teil des Begriffes suchen lässt.

zypper search minetest

Zum Test, ob es generell läuft, könnte man mal Minetest starten. Indem man einfach eingibt:

minetest

Es folgt eine Ausgabe von einigen Informationen, aber „natürlich“ wird nicht die Oberfläche von Minetest gestartet, denn man ist ja nur per ssh auf dem Server-Rechner und dabei wird keine grafische Oberfläche übertragen.

Server einrichten

Zu Minetest gehören auf jeden Fall auch Mods und eine Spielewelt. Ich würde raten, eine Welt auf dem eigenen Rechner (mit den gewünschten Mapgen-Mods aktiviert) zu erzeugen, und dann diese Welt auf den Server zu kopieren. Folgendes muss man dann machen:

  • Welt mit allen Dateien auf den Server kopieren.
  • Die Mods auf den Server kopieren.

Anmerkung: Wenn man eine Welt kopiert, bei der man die Mods bereits aktiviert hat, muss man sich nicht darum kümmern, die Mods für diese Welt auf dem Server zu aktivieren. So einfach die Mods kopieren und dann nichts machen funktioniert aber nicht.

  • Die Einstellungen in der Datei „minetest.conf“ vornehmen.

Ich würde eine Welt, die ich online nutzen möchte, auf jeden Fall vorher lokal testen. Das muss man nicht als Server machen sondern kann es auch als „Singleplayer“ machen. Man erstellt sich also ein neues Spiel mit dem gewünschten Kartengenerator, sucht die Mods aus und startet die Welt. Dabei sollten die Mods, die die Karte direkt beeinflussen (wie Ethereal-Mod und ähnliche Mapgen-Mods) auf jeden Fall beim ersten Start schon aktiviert sein. Andere Mods können auch nachträglich noch aktiviert werden.

Nun kann man testen ob einem die Welt gefällt. Dazu würde ich mir das „schnelle Fliegen“ erlauben durch …

/grantme all

und die Gegend erkunden, ob mir die Welt gefällt. Notfalls halt noch einmal neu generieren und wiederum testen. Ich würde auf jeden Fall mir auch einen Startpunkt merken, entweder indem ich die Koordinaten notiere oder doch die Welt als Server starte, denn dann bleiben meine Koordinaten bei der Verwendung als Online-Server erhalten.

Bevor man alles hochlädt sollte man die restlichen Mods aktivieren und testen, ob alles ohne Fehler startet, ggf. die fehlenden Mods, die für die ausgewählten als Voraussetzung gelten, nachinstallieren. Auf dem eigenen Rechner lässt sich das alles einfacher machen als auf dem Server. Wenn amn auf dem eigenen Rechner eine ältere Mod-Version hat, sollte man sie eventuell erneuern. Das ist vor allem notwendig, wenn erst vor kurzem erst eine neue Minetest-Version herausgekommen ist und die Mods noch angepasst werden müssen.

Wenn alles wie gewünscht läuft, geht es darum umzuziehen … sozusagen. Man kann zwar auch ganze Verzeichnisse kopieren, aber einfacher geht es, wenn man alles zusammen in ein Paket packt, also komprimiert und dann erst auf dem Server wieder auspackt.

Also sollte man …

  1. den Mods-Ordner mit allen gewünschten Mods zusammen komprimieren
  2. den Welt-Ordner komprimieren

Unter OpenSuseLinux auf meinem Heim-System kann ich das einfach machen, indem ich einen Ordner im Datei-Manager rechts anklicke und als ZIP komprimiere.

Fehlt noch die Datei „minetest.conf“. Mehr Infos dazu auf einer Seite auf dem Minetest-Wiki.

Als nächsten müssen die zwei ZIP-Dateien und die Datei minetest.conf auf den Server kopiert werden. Kopieren geht unter Linux im allgemeinen so:

cp DATEINAME ZIELORDNER

Hier allerdings muss

scp DATEINAME root@IPADRESSE:ZIELORDNER

verwendet werden, wobei das „s“ von secure kommt, weil man ja per ssh kopieren will.

Für die Angabe von DATEINAME  hat man zwei Möglichkeiten:

  1. man wechselt in das Verzeichnis, wo die Datei liegt und muss dann nur den Namen nennen
  2. man nennt die genaue Position der Datei auf dem eigenen Rechner und kann dann von jeder Stelle aus kopieren

Nehmen wir mal an, ich haben alle meine Mods im Minetest-Verzeichnis komprimiert, dann würde die Adresse etwas so aussehen:

/home/birgit/.Minetest/mods.zip

Diese Adressen sind recht lang und man muss genau die Groß- und Kleinschreibung beachten, was leicht zu Fehlern führt. Dabei hilft einem die TAB-Taste, denn wenn man einen Ordner/Datei-Namen angefangen hat zu tippen und wenn dadurch klar ist, um welchen Ordner/welche Datei es geht, dann wird mit der TAB-Taste der Rest automatisch vervollständigt. Notfalls muss man weitere Buchstaben ergänzen, bis es eindeutig ist. Dieses Pronzip ist leider nicht auf dem entfernten Ordner möglich, denn mein Heim-Rechner hat ja noch keinen Zugriff auf den entfernten Rechner.

Einen Wechsel des aktuellen Verzeichnissen nimmt man mit dem folgenden Befehl vor.

cd VERZEICHNISNAME/

Dabei wird in das Unterverzeichnis VERZEICHNISNAME des aktuellen Verzeichnisses gewechselt. Ein Verzeichnis „nach oben“ kommt man mit

cd ..

Es geht aber natürlich auch …

cd UNTERVERZEICHNISNAME/VERZEICHNISNAME/

oder

cd ../..

Wenn man sich nicht sicher ist, wie ein Verzeichnis heißt, kann man auch mit

ls

nachschauen.

Die Ziel-Adresse könnte dann so aussehen

root@IPADRESSE:/root/.minetest/

wobei natürlich IPADRESSE durch die Zahlen-Kombination ersetzt werden muss. Zu beachten ist, dass ein Ordner, in den man kopieren will, natürlich existieren muss. Einen ordern kann man anlegen, wenn man als root per ssh eingeloggt ist und sich im richtigen Verzeichnis befindet, durch den folgenden Befehl:

mkdir VERZEICHNISNAME

Nach Abschicken des scp-Befehls wird man nach dem Passwort gefragt. Und zwar bei jedem Kopier-Befehl.

Zum Entpacken muss man den UNZIP-Befehl verwenden:

unzip DATIENAME.zip

Nach dem Entpacken könnte man „aufräumen“ mit

rm DATIENAME.zip

Server starten … und laufen lassen

Gehen wir davon aus, dass wir eine Welt namens MEINE_WELT haben und die Einstellungsdatei minetest.con im Hauptverzeichnis liegt, dann starten wir den Server mit diesem Befehl:

minetest --server ~/.minetest/minetest.conf --world ~/.minetest/worlds/MEINE_WELT

Problem ist, dass der Server beendet wird, sobald man die Konsole schließt. Man beendet dabei die Konsole, die den Befehl ausführt und wenn die Konsole beendet wird wird auch der ausgeführte Befehl beendet. Abhilfe schafft ihr der Befehl „nohup“.

nohup minetest --server ~/.minetest/minetest.conf --world ~/.minetest/worlds/MEINE_WELT &

Übersetzung: Bei nohup handelt es sich um einen POSIX-Befehl, um das Unix-Signal „HUP“ (hangup) zu ignorieren. Dieses Signal wird von der Konsole verwendet, um abhängige Prozesse (also den gestarteten Minetest-Server) über das Schließen der Konsole zu benachrichtigen. In der Regel würden abhängige Prozesse der Konsole als Folge des Signalempfangs beendet.

Man bekommt dabei den Hinweis, dass die Nachrichten, die normaleweise nach dem Abschicken des Start-Befehls zu sehen sind, in der Datei „nohub.out“ gespeichert werden. Da beim Start des Server hin und wieder auch Fehlermeldungen zu sehen sind oder man bei einem Absturz den Grund erfährt, macht es Sinn, hin und wieder diese Datei anzuschauen. Das kann man machen, nachdem man in das Minetest-Verzeichnis gewechselt ist, indem man dann eingibt:

cat nohub.out

Dann bekommt man eine Ansicht der Ausgaben, die sonst über die Konsole angezeigt werden. Hier kann man Text übrigens nicht bearbeiten.

Anpassungen vornehmen

Nach einigen „Spielereien“ stellte ich zwei Sachen fest:

  • Der „kleine“ Speicher von 1 GB geht bei einigen Mods recht schnell in die Knie. Ob das wegen Fehlern in den Mods ist oder ein anderes Problem ist, lässt sich schwer feststellen.
  • Neue Welten mit besonderen Mods lade ich erst mit wenig aktivierten Mods hoch und aktiviere erst nach und nach weitere Mods und schaue mir mit „top“ (siehe nächster Abschnitt) an, wie sehr der Arbeitsspeicher genutzt wird.

Daraus ergab sich das Problem, dass das Kopieren von Dateien auf den Server recht umständlich ist. Also biss ich in den sauren Apfel und beschäftigte mich mit Text-Editoren auf der Konsole. Inzwischen habe ich mich an das angeblich eher unbeliebte „vi“ gewöhnt. Sehr viel mehr als Mods aktivieren oder ein paar Zeilen in Skripte einzufügen muss ich eh nicht. Und so schlimm ist die Benutzung von „vi“ auch nicht. Folgendes muss man wissen.

Man öffnet eine Datei mit folgendem Befehl

vi DATEINAME

… wobei man natürlich auch statt „nur“ den Dateinamen anzugeben auch die genaue Adresse angeben kann, wenn die zu bearbeitende Datei an einer anderen Stelle auf dem Server liegt.

Öffnet man so die Textdatei kann man den Text anschauen und hin und her scrollen. Ansonsten macht man folgendes:

i

bringt „vi“ in den Editor-Modus. Nun kann man den Cursor in dem Text herumbewegen und Änderungen vornehmen. Interessant finde ich, dass man per Klick auf die mittlere Maustaste, wie ich es von Linux kenne, woanders markierten Text einfügen kann. Das erspart viel tippen.

ESC-Taste + : x + RETURN-Taste

Nach dem Drücken der Escape-Taste verändert sich die unterste sichtbare Zeile (eine Art Eingabe-Bereich). Nach Doppelpunkt, x und Drücken der Return-Taste wird gespeichert und „vi“ verlassen.

 Mehr muss man, wie ich finde, zu „vi“ nicht wissen.

Per Konsole (auch mit Smartphone) den Server kontrollieren

Indem man sich per ssh auf dem Server-Rechner anmeldet, kann man zum Beispiel kontrollieren, ob der Server noch läuft. Natürlich könnte man das auch machen, wenn man sich mit dem „Spiel“ versucht auf den Server einzuloggen. Folgende Befehl sind dann das praktisch:

pstree

zeigt strukturiert an, welche Programme am laufen sind. So sieht man, ob der Minetestserver überhaupt läuft.

free

liefert eine kurze Übersicht des freien Speichers.

top

liefert eine ausführliche Tabelle der laufenden Prozesse mit genutztem Speicher und genutztem Prozessor. Mit „Shift + M“ wird die Tabelle sortiert.

Falls ich den Server mal anhalten will könnte man das recht unelegant machen per

killall minetest

Neben der Konsole auf dem Desktop-Rechner ginge aber auch ein ssh-Client auf dem Smartphone. Für Android nutze ich derzeit …

Server veröffentlichen

 

Backups einrichten

 

 

Sahnehäubchen 1: Verschiedene Welten verwalten, starten, backupen

Ist der vServer nicht nur für einen Welt gedacht sondern eventuell für verschiedene Welten, die aber nicht parallel laufen sollen, dann kann man sich das Eintippen von langen Befehle ersparen, indem man sich ein paar Skripte einrichtet. Auch wenn man per Smartphone reinschaut, ist das Wechseln einer Welt mit komplizierten Befehlen unpraktisch. Wichtiger aber noch, war der Aspekt des Backups, dass mit dem vorliegenden Backup-Skript nach dem Sichern immer die gleiche Welt gestartet wurde, egal welche vorher am Laufen war. Bei all diesen Problemen hat mir mein privater Linux-Berater (= GöGa) geholfen.

Für das Starten der verschiedenen Welten habe ich Startskripte gebastelt. Das sind einfache Dateien, die Befehle aufrufen, im Grunde genommen so, als ob ich in der Konsole einen Befehl eingebe. Damit ich diesen dann kürzeren Befehl nutzen kann stehen drei Möglichkeiten zur Wahl:

  1. Ich kann das Skript an einer beliebigen Stelel ablegen, müsste dann aber zur Ausführung immer in den Ordner wechseln, wo das Skript liegt.
  2. Ich müsste einen Ort definieren, bei dem quasi (auch) gesucht wird, wenn ich an beliebiger Stelle einen Befehl ausführe.
  3. Ich lege das Skript an der Stelle ab, wo sowieso die Befehle liegen, die man dann überall ausführen kann.

Auch wenn Punkt 3. nicht ganz praktisch ist, so war es für mich doch am einfachsten. Bei OpenSuse Linux habe ich deshalb die Skripte in dieses Verzeichnis abgelegt:

/usr/bin/

Ein Skript zum Starten der „NeuenBauwelt“ habe ich das Skript „startbauwelt“ genannt und es sieht dann so aus:

#!/bin/bash 
stopserver 
cp /root/.minetest/worlds/NeueBauwelt/minetest.conf /root/.minetest/ 
nohup minetest --server /root/.minetest/minetest.conf --world "/root/.minetest/worlds/NeueBauwelt" & 
# Link um zuletzt gestartete Konfiguration zu starten setzen 
rm /usr/bin/startlast 
ln -s /usr/bin/startbauwelt /usr/bin/startlast

So, das war zum Kopieren, nun noch mal Zeile für Zeile mit Erklärungen. Die zeilen mit dem Doppelkreuz # sind übrigens Kommentare.

#!/bin/bash

Übersetzung: Diese erste Zeile ist wichtig im Skript, denn man sagt damit dem COmputer, wie er die folgenden Zeilen behandeln soll. Hier sage ich ihm, dass die folgenden Zeilen wie Konsolen-Eingaben behandelt werden sollen. Ich könnte auch darauf verweisen, dass es sich um Python-Code handelt, dann müsste aber was anderes stehen. Diese erste Zeile ist wesentlich. Der Dateiname hat eigentlich keine Bedeutung.

stopserver

Übersetzung: Hier ist der Aufruf eines anderen selbst erstelltes Skriptes, im Prinzip einfach der „killall minetest“-Befehl. Ich habe dieses Skript erstellt, weil er kürzer ist. So wird verhindert, dass Minetest doppelt gestartet wird.

cp /root/.minetest/worlds/NeueBauwelt/minetest.conf /root/.minetest/

Übersetzung: Für eine bestimmte Welt brauche ich eventuell eine andere Einstellung bezüglich Creative- oder Überlebensmodus. Voreinstellungen für neue Besucher, welches Passwort am Anfang verwendet werden muss usw. Da man beim Start des Minetest-Server zwar die Position der Datei „minetest.conf“ angeben kann, dies aber keine Wirkung hat, lege ich die passenden  „minetest.conf“ im Weltverzeichnis ab und kopiere sie bei Bedarf eben an die Stelle, wo sie für die Nutzung liegen muss. Das Kopieren alleine bringt aber nichts, wenn die Welt nicht neu gestartet wird.

nohup minetest --server /root/.minetest/minetest.conf --world "/root/.minetest/worlds/NeueBauwelt" &

Übersetzung: Das ist im Prinzip der schon bekannte Befehl zum Starten des Minetest-Servers. Die Ausgaben werden in der Datei „nohup.out“ im Verzeichnis „/usr/bin“ gespeichert.icher keine optimal Ablage. Mal schauen, ob ich da noch eine Lösung finde. Zum Lesen derAusgabe müsste man als wie vorher erwähnt mit „cat“ diese Datei aufrufen, indem man in das Verzeichnis wechselt oder den Verzeichnis-Pfad zur Datei angibt, also „cat /usr/bin/nohup.out“

# Link um zuletzt gestartete Konfiguration zu starten setzen 
rm /usr/bin/startlast

Übersetzung: Nun wird es etwas komplizierter. Mit „rm“ wird die „startlast“ gelöscht. „startlast“ ist keine Datei sondern ein Verweis, nämlich auf den zuletzt verwendeten Startbefehl. Egal was passiert und gemacht wird, mit „startlast“ wird immer der letzte Skript-Befehl zum Starten eines Servers  erneut ausgeführt. Das ist wichtig, damit zum Beispiel beim Backup-Skript, nach dem Herunterfahren des Servers und Sichern der Welten, wieder die vorher laufende Welt gestartet werden kann. So muss nicht das Backup-Skript jedes Mal angepasst werden sondern es steht da der Befehl „startlast“. Woher weiß aber „startlast“, welches Welt es starten soll? … das kommt in der nächsten Zeile!

ln -s /usr/bin/startbauwelt /usr/bin/startlast

Übersetzung: Hier wird ein neuer Verweis (ln) angelegt und zwar bekommt so „startlast“ den Verweis auf das hier beschriebene „startbauwelt“-Skript.

Damit das hier funktioniert muss das Skript „stopserver“ existieren – auch in „/usr/bin“ oder man ersetzt diese Zeile durch „killall minetest“.

Wie schon erwähnt ist der Namen und auch die Endung egal. Wichtig ist aber, dass die abgespeicherte Datei ausführbar gemacht wird, denn sonst ist es nur eine einfache Textdatei. Das geschieht durch:

chmod a+x startbauwelt

Übersetzung: chmod kommt von „change modus“ mit „+x“ wird die Datei ausführbar.

Für weitere Welten habe ich diese Datei dann einfach kopiert und dabei gleich einen neuen Namen gegeben, etwa so

cp startbauwelt startAndereWelt

Und immer daran denken, dass diese Skripte im Verzeichnis „/usr/bin“ liegen müssen! Anschließend bearbeite ich mit „vi“ diese Datei und passe die Namen der Welten und ihre Positionen auf dem Server an. „chmod“ muss ich nicht noch einmal anwenden, denn beim Kopieren bleibt das erhalten.

Sahnehäubchen 2: Überwachung des Servers und Neustart nach Bedarf