Einen Online-Minetest-Server hosten

Aktualisierte Fassung einer Anleitung, die ich 2016 hier erstellt habe: https://thomas-ebinger.de/2016/10/wie-richtet-man-einen-online-minetest-server-ein/. Zuletzt überarbeitet: 13.5.2021

In einem Webinar zum Corona-Minetest-Server wurde das ausführlich erläutert und kann es weiterhin ansehen. Danke an Stogromi fürs Aufzeichnen und Bearbeiten!

Server im lokalen Netzwerk

Ein Server in einem lokalen Netzwerk lässt sich mit Minetest sehr leicht einrichten. Einfach im Tab “Spiel starten” das Feld “Server hosten”, Name und Passwort für den admin-Spieler vergeben und fertig. Dann muss man nur noch die IP-Adresse des eigenen Rechners herausfinden und den anderen Spielern bekannt machen. Das geht am einfachsten über die Windows-Taste, dann cmd eintippen, Enter, dann in die Konsole ipconfig schreiben und die passende IP-Adresse auslesen.

Online-Server

Natürlich kann man seinen privaten Rechner auch ins Netz hängen und den Server dort bekannt machen (Häkchen setzen). Dann muss man aber per Dyn-DNS dafür sorgen, dass sich die IP von außen nicht ändert. Aber das kostet nicht nur viel Strom, jedenfalls dann, wenn der Rechner die notwendige Leistung für einen größeren Server hat. Die Netzanbindung eines echten  Online-Servers ist auch deutlich schneller und belastbarer.

Server mieten

Es gibt viele Anbieter von günstigen vServern (virtuelle Server), die nicht teuer sind. Die besten Erfahrungen für Einsteiger habe ich mit einem vServer bei netcup gemacht, siehe https://www.netcup.de/vserver/vps.php#features. Die einfachste Lösung reicht für 30-35 Personen völlig aus, wenn man nicht zu viele Mods installiert, und ist jederzeit kündbar. In der Voreinstellung hat man einen Debian-Server, leichter ist es, wenn man einen Ubuntu-Server konfiguriert. Wenn man mehr Leistung braucht, etwa um eine ganze Schule zu versorgen, wo mehrer Klassen gleichzeitig spielen, lohnt es sich bei Hetzner zu schauen. Vermutlich reicht schon ein Server aus der Auktion gebrauchter Server: https://www.hetzner.com/de/sb?country=de, natürlich kann man sich auch einen Server komplett nach Wunsch konfigurieren. Wichtig ist hier vor allem viel Arbeitsspeicher und eine SSD-Festplatte.

Linux-Grundkenntnisse sind dafür unerlässlich.

Minetest auf den Server bekommen

minetestserverEs gibt mehrere Möglichkeiten zu einem lauffähigen Minetest zu kommen.

Am einfachsten ist es, wenn man minetest aus den üblichen Paketquellen installiert. Leider ist die Minetest-Version dort veraltet. Aktueller wird es, wenn man die PPA-Version wählt. Wie das geht, steht hier: https://wiki.ubuntuusers.de/Spiele/Minetest/

Erst einmal muss man sich einloggen. Das geht per ssh. Unter Linux: ssh root@zugewiesene-IP, dann Passwort eingeben. Unter Windows wird meist PuTTY als
ssh-Client empfohlen (http://www.putty.org/). Man kann aber auch unter Windows 10 eine Linux Kommandozeile installieren und hat es dann bequemer (https://docs.microsoft.com/de-de/windows/wsl/install-win10).

Und dann hat man die volle Kontrolle – aber oh Schreck: nur auf einer Kommandozeile. Wie man sich da zurechtfindet, kann ich hier nicht ausführlich erklären. Ein paar Befehle sollte man schon beherrschen (cd, ls, top, ps -A) sind die wichtigsten. Eine Einführung findet man z. B. hier: https://wiki.ubuntuusers.de/Shell/Einführung/

Nun aktualisiert man mit apt-get update die Paketquellen und installiert den minetest mit apt-get install minetest

Wer immer die neueste Version nutzen will, muss aus den Quellen selbst kompilieren. sfan5 hat dafür ein schönes Skript erstellt, das in der Regel problemlos durchläuft, siehe https://forum.minetest.net/viewtopic.php?p=311160&sid=c61c82acd2e6d0f45992130739ed43f7#p311160 Aber Achtung, nicht alle Mods laufen auch sofort mit der neuesten Version von Minetest. Manchmal gibt es Bugs, die erst im Lauf der Zeit behoben werden. Dann sollte man möglichst eine Fehlermeldung auf github machen, damit der/die Mod-Verantwortliche darauf aufmerksam wird und den Fehler beheben kann.

Zwei Möglichkeiten der Konfiguration

Grundsätzlich gibt es zwei Möglichkeiten, Minetest auf einem Online-Server laufen zu lassen:

  1. Als Dienst, der mit systemctl gestartet und gestoppt wird. Der Vorteil ist, dass auch bei einem kompletten Serverneustart minetest als Dienst wieder mitgestartet wird.
  2. Als Programm, das manuell gestartet wird, in der Regel mit Hilfe eines einfachen Bash-Skripts, das im Falle eines Absturzes für den Neustart sorgt. Da ich nur mit dieser Konfiguration praktische Erfahrungen habe, wird sie hier genauer vorgestellt. Unser Minetestbildungsnetzwerk Server ist so eingerichtet.

Einen eigenen Benutzer anlegen

Es ist nicht empfehlenswert, Minetest als Root-Benutzer laufen zu lassen. Mit “adduser minetest” legt man einen Benutzer minetest an und loggt sich dann ein mit “su minetest”.

Den Server starten

Nun kann man einen Server starten, indem man dem Programm zwei wichtige Informationen mitgibt: Welche Welt soll gestartet werden mit welcher Konfiguration (= Aufruf der Datei minetest.conf).

Damit der Server auch weiterläuft, wenn man sich wieder ausloggt, muss man sich etwas überlegen. Am besten ist es, man installiert “screen” (sudo apt-get install screen), startet es einmal (es läuft dann im Hintergrund). Dann kann man mit Strg-A und anschließend “d” das aktuelle Fenster in den Hintergrund schieben. Will man den Server mit seinen Meldungen wieder sehen, gibt man einfach “screen -r” ein. Mit Strg-C wird der Server wieder beendet. Die Datei “debug.txt” enthält alle Meldungen, was auf dem Server passiert und wo es evtl. Fehler gibt.

Die Konfigurationsdatei minetest.conf

Nicht jeder wird mit der Standard-Ausgangswelt glücklich. Im Unterverzeichnis worlds kann man andere Welten hochladen, die bereits erstellt wurden. Am besten geht das per FTP (Filezilla, Port 22, u. U. muss vorher noch mit apt-get install vsftpd ein sicherer ftp-Server installiert werden). Oder man benutzt unter Linux scp (secure copy).

Die wichtigsten Einstellungen nimmt man in der Datei minetest.conf vor, die man neu anlegen muss im Verzeichnis .minetest/ (der Punkt vor minetest bedeutet, dass dies ein versteckter Ordner ist, auf der Kommandozeile macht das aber keinen Unterschied).

Um Dateien bearbeiten zu können, braucht man noch einen Editor. Ich empfehle nano, den man mit apt-get install nano installiert. Dann einfach im richtigen Verzeichnis nano minetest.conf eingeben, dann wird eine leere Datei angelegt, in die man die gewünschten Einstellungen hineinschreiben kann.

Leider scheint der Server die config-Datei nicht automatisch zu erkennen, deshalb muss man sie beim Starten ausdrücklich mit angeben. Ebenso die gewünschte Spielwelt mit vollem Dateipfad (da bin ich mehrfach daran gescheitert, weil er dann einfach eine gleichnamige Spielwelt im aktuellen Verzeichnis anlegt.

Hier die wichtigsten Einstellungen der minetest.conf mit Empfehlungen, ausführlich erläutert werden alle möglichen Einstellungen hier: https://wiki.minetest.net/Minetest.conf.

creative_mode = true //startet die Welt im Kreativ-Modus bzw. bei false im anspruchsvolleren Überlebensmodus
enable_damage = false //startet eine friedliche Welt, in der man niemand wehtun kann
server_announce = false // wenn man hier true eingibt, kann jeder Client die Welt über die öffentliche Serverliste (http://servers.minetest.net) finden und spielen
port = 30000 // wenn man mehrere Welten gleichzeitig laufen lassen will, kann man einfach höhere Ports verwenden
static_spawnpoint = -9,1,-172 // das führt dazu, dass jeder, der neu in de Welt kommt, an diesem Startpunkt herauskommt
disallow_empty_password = true // ein Passwort wird zur Pflicht
name = thomas //der Spielername der hier steht hat im Spiel Administratorrechte
language = de //deutsche Sprache als Voreinstellung für Texte
enable_rollback_recording = true //es wird zusätzlich zum Logfile eine Datenbank angelegt, mit deren Hilfe man Aktionen von Spieler rückgängig machen kann. Das kostet etwas Speicherplatz und Leistung, ist aber unglaublich hilfreich, wenn Spieler Dinge zerstören oder sinnlos in die Gegend bauen.
bind_address = 136.243.82.83 (eigene IP-Adresse des Servers eintragen) //manche Linux Server brauchen diese Angabe, damit sie die Spielanfragen korrekt weiterleiten. Es schadet nicht das anzugeben, kann aber der Grund sein, dass es nicht funktioniert, wenn diese Angabe fehlt.

 

Der Befehl zum Starten des Servers sieht dann in etwa so aus:

minetest --config ~/.minetest/minetest.conf --world ~/.minetest/worlds/WUNSCHSPIELWELT

~ steht für das Benutzerverzeichnis. Man kann auf dem Server auch /root/ dafür angeben.

Automatischer Neustart

Manche Mods bringen den Server zum Absturz, da ist es praktisch, wenn er von allen wieder startet.

Dafür kann man eine Datei serverstart.sh anlegen, muss Ausführungsrechte vergeben (mit chmod), und dann mit einem Editor (ich nehme immer nano, s.z.) etwas wie das hier eintragen (Skript der Corona-Bildungswelt):

#!/bin/bash
while true; do
/home/minetest/minetest-5.2.0-dev-linux/bin/minetestserver –world   /home/minetest/minetest-5.2.0-dev-linux/worlds/4coronawelt/ –config   /home/minetest/minetest-5.2.0-dev-linux/worlds/4coronawelt/minetest.conf
done

Mods installieren

Auf einem Server werden Mods (Modifikationen), die verschiedene Welten verwenden, in den Ordner von .minetest/mods/ installiert. Am einfachsten geht das mit git clone und dann den Pfad eines Online Repositorys angeben. Mit einem git pull kann man die Mods dann sehr einfach aktualisieren. Wenn man die Welt startet, werden alle verfügbaren Mods automatisch in der Datei world.mt eingetragen und mit “= false” versehen. Wenn man sie aktiv haben will, muss man daraus einfach ein “= true” machen. Beim Serverstart wird gemeldet, welche Mods fehlende Abhängigkeiten haben und deshalb nicht geladen wurden. Diese muss man dann ggf. nachinstallieren.

Vorsicht: Zu viele Mods machen einen Server träge, weil alle Bausteine zum Spieler heruntergeladen werden müssen und alle Tiere und Monster, die herumrennen, Serverleistung kosten. Auch Flugrechte für alle kosten Serverleistung, weil deutlich mehr Blöcke in kürzerer Zeit geladen werden müssen. Hier sollte man nicht zu großzügig sein und Flugrechte nur gewähren, wenn es wirklich nötig ist oder wenige Spieler online sind.

Wie schwer muss mein Server arbeiten?

Das sieht man am besten mit htop, einer verbesserten Variante von top (sudo apt-get install htop).

Man sieht schön, wie belastet die einzelnen Kerne sind. Bei 8 Kernen kann “Load Average” bis zur vollen Auslastung hochgehen bis 8.0″ Wenn man “t” drückt, sieht man schön die Threads, welches Programm durch welches aufgerufen wurde.

Wie stark der Server belastet ist, sieht man auch im Spiel, wenn man /status eingibt. Hier ist der Wert für max_lag interessant. Dabei ist zu beachten, dass ein schwacher Rechner und eine langsame Internetverbindung ebenfalls zu Lag führen können. Trotzdem steigt der Server-Lag spürbar, wenn viele Spieler gleichzeitig online sind.

Online Map einrichten

Wer einen leistungsfähigen Server hat, kann noch einen draufsetzen, indem er eine Online Map einrichtet, die per Browser abrufbar ist und eine schöne Übersicht bietet. Wie das geht, steht hier: Online-Karte einrichten

Serverpflege per App von unterwegs

Wenn einen unterwegs die Nachricht erreicht, der Server ist abgestürzt, sollte man handlungsfähig sein. Dafür nutze ich unter Android die App JuiceSSH (https://play.google.com/store/apps/details?id=com.sonelli.juicessh), die auch in der Kostenlos-Version einen ausreichenden Funktionsumfang bietet. Hier kann man sich dann z. B. die Datei debug.txt ausgeben lassen mit dem Befehl “tail -f debug.txt” und sieht dann in Echtzeit, was gerade auf dem Server gebaut wird.

Spielgeschehen nachvollziehen mit Hilfe der Logdatei debug.txt

Leider gibt es immer wieder Spieler, die Dinge machen, die nicht in Ordnung sind. Um als Administrator im Nachhinein nachvollziehen zu können, wer was gemacht hat, ist es hilfreich, wenn man diese Datei gezielt durchsuchen kann.

cat debug.txt | grep CHAT // gibt alle Zeilen aus, in denen etwas in den Chat geschrieben wurde

cat debug.txt | grep CHAT | grep Spielername //gibt alles aus, was Spielername gesagt hat

cat debug.txt | grep default:gold //gibt alle Aktionen aus, die mit Gold zu tun haben, egal ob Goldblöcke abgebaut oder hingesetzt wurden. Alle Blöcke haben englische technische Namen. Vor dem Doppelpunkt steht die Mod, zu der der Block gehört, dahinter der Name. Wenn man im Spiel herausfinden will, wie ein Block heißt, kann man mit F5 eine Ansicht einschalten, bei der dieser Name angezeigt wird, wenn man darauf zeigt (steht hinter pointed: … in der zweiten Zeile).

Mithilfe der Koordinaten lässt sich meist relativ leicht herausfinden, wer was wann abgebaut oder hingebaut hat.

Links