Freitag, 12. Januar 2024

Terraria Game Server auf Raspberry Pi

Wie baut man sich seinen eigenen Terraria-Server auf einem Raspberry Pi auf?

Hier will ich es euch kurz erklären, wie das Ganze bei mir funktioniert. Viele Anleitungen im Internet beziehen sich auf ältere Versionen des Spiels und somit auch des Servers. Da ich erst seit Kurzem auf den Geschmack des Games gekommen bin, ist diese Anleitung im Jahr 2024 gültig und bezieht sich auf die Terraria Version 1.4.4.9 (derzeit aktuell).

Geholfen hat mir das englische Wiki und einige andere Anleitungen im Netz. Ich betreibe den Server auf meinem Raspi 3 Modell B mit aktuellem Raspberry Pi OS (64 Bit) auf Basis von Debian 12 - Bookworm. Für genauere Infos verweise ich mal auf diesen Blogeintrag bei mir. Dies stellt sozusagen das Gerüst mit der Grundkonfiguration dar. Ist der Raspi entsprechend eingerichtet kann es hier weitergehen.

Terraria ist ein Spiel, ähnlich wie Minecraft, nur halt in 2D. So ungefähr kann man sich das vorstellen. Mit Schwert, Spitzhacke und Axt erkundet man die bunte Welt und formt / farmt  diese auch nach seinen Wünschen. Das Game kann man allein, aber auch mit seinen Freunden gemeinsam erleben. Selbstverständlich gibt es auch ein PvP Modus, wenn einem die Gefahren der Spielumgebung nicht ausreichen. Sowohl unter Windows, MacOS & Linux steht einem Klötzchenabenteuer nichts im Weg. Sogar auf den meisten Konsolen ist Terraria verfügbar, wobei ein Crosplay gegen PC nicht funktioniert (meine ich zumindest gelesen zu haben). 

Jedenfalls wollte ich mit meinem Raspberry diesen Spiele-Server ausprobieren. Funktioniert das denn eigentlich gescheit auf dem kleinen Rechner? Ist das praxistauglich? Wie hoch sind die Hürden bis zum fertigen Server? Diese Fragen haben mich beschäftigt und ich kann sie nun beantworten. Ja, ja und "klein" sind die Antworten auf die Schnelle. Es ist also relativ einfach, diesen Server auf dem Raspi zu installieren. Klein deshalb in Anführungszeichen, da ich davon ausgehe, das jemand, der einen Raspberry besitzt, schon etwas Ahnung von Linux und der Kommandozeile hat. Für Neulinge kann sich dies schon etwas aufregender und schwerer anfühlen, wenn man die nachfolgenden Befehle ins Terminal einhämmert. Nochmals sei das Wiki hier erwähnt, in dem man gute Hilfe findet.

Jetzt soll es aber losgehen und dazu meldet man sich am Raspi entweder per SSH (bei einem Headless System, wie in meinem Fall) oder normal über Tastatur und Bildschirm mit seinem Benutzernamen an. Im Terminal bzw. der Konsole bringt man das System erstmal auf den neusten Stand:

sudo apt update

sudo apt upgrade

Für den Terraria-Server benötigen wir Mono auf dem Raspi. Mono ist sozusagen eine Implementierung des Microsoft NET Framework. Also Mono so installieren:

sudo apt install mono-complete

Jetzt legen wir ein Verzeichnis an, in dieses wir das aktuelle Terraria-Server-Paket herunterladen und anschließend entpacken.

mkdir terrariaserver

cd  terrariaserver

Legte den Ordner an und mit cd sind wir in den neuen Ordner hinein gewechselt. Nun laden wir mit wget das Paket mit dem folgenden Befehl herunter:

wget https://terraria.org/api/download/pc-dedicated-server/terraria-server-1449.zip

Entpackt wird das Ganze so:

unzip terraria-server-1449.zip

Ab in den richtigen Ordner geht es mit den folgenden Kommandos:

cd 1449

cd Linux

Auf einem normalen Linux PC würde man nun die entsprechende Datei mittels diesem Befehl chmod +x TerrariaServer.bin.x86* ausführbar machen. Das ist hier überflüssig, da wir die *.exe Datei mit Mono starten wollen. Doch zuvor laden wir noch zwei Pakete ins System, falls nicht schon vorhanden. Einmal sqlite3 und einmal screen
sudo apt install sqlite3

sudo apt install screen

Zum Test kann man den Server nun einmal mit diesem Befehl starten:

mono --server --gc=sgen -O=all ./TerrariaServer.exe

Bei mir hat dies genau einmal funktioniert. Danach bekam ich merkwürdige Fehlermeldungen beim Serverstart. Dagegen hilft es einige Dateien mittels der folgenden Befehle zu entfernen. Vorsicht, unbedingt schauen das man im richtigen Verzeichnis ist (/home/USERNAME/terrariaserver/1449/Linux).

rm System*

rm Mono*

rm monoconfig

rm mscorlib.dll

Es sollten dann in etwa, wie bei mir auf dem Bild, nur noch diese Dateien und nur noch die FNA.dll & WindowsBase.dll als einzige DLL's vorhanden sein. Ebenfalls fehlt noch die serverconfig, zu dieser Konfigurationsdatei komme ich gleich. Übrigens, das Bild zeigt einen Ausschnitt des Midnight-Commander (mc). Der Dateimanager läuft in der Konsole und erinnert stark an den früheren Norton-Commander (nc). Durch die zwei Fensteransicht lassen sich Dateien praktisch hin- und her-kopieren. Gerade auf dem Raspi, ohne grafische Oberfläche, bieten sich solche Tools an. Über ein sudo apt get install mc bringt man das Paket auf den Rechner. 

Nun benötigen wir noch eine Konfigurationsdatei (in diesem Fall nenne ich diese serverconfig), in der ein paar Werte für den Serverstart hinterlegt werden. Hatte man den obigen Befehl zum Start des Servers erfolgreich ausgeführt, so müsste man jetzt bereits eine "Terraria-Welt" haben, wenn nicht, dann diesen Befehl hier einmal ausführen:

mono  TerrariaServer.exe

Jetzt bekommt man ein paar Fragen gestellt, die das Server-Setup betreffen. Z.B. wie groß soll die Welt werden (klein und mittel empfohlen, ab neueren Raspi mit mehr Ram auch mal groß), wie soll die Welt heißen? Danach wird die "Terraria-Welt" generiert. Das kann schon mal eine Weile dauern (halbe Stunde?), zumindest bei Auswahl small dauert es nicht ganz so lange. Nachdem die Welt erstellt wurde, wird man gefragt, mit welcher Welt man starten möchte. In diesem Falle 1 für die eben generierte Welt. Die Anzahl der maximalen Spieler kann man angeben (Standard müssten es 16 sein). Den Serverport ggf. anpassen (Standard 7777) und ein paar andere Fragen (die man getrost unbeantwortet lassen kann = also Standard) beantworten. Danach startet auch schon der Server und man steht am Serverprompt, quasi die Eingabezeile vom Server. Hier empfiehlt es sich den Befehl help einzugeben, so erfährt man ein paar Kommandos, die der Serer versteht. Mit exit wird der Server schließlich beendet.

Jetzt können wir die serverconfig Datei anlegen.

nano serverconfig

In diese Datei schreibt man die folgenden Zeilen hinein. BENUTZERNAME und natürlich der WELTNAME sind entsprechend zu ersetzen und ebenfalls die anderen Parameter müsst ihr an euer System anpassen.

maxplayers=8
port=7777
worldpath=/home/
BENUTZERNAME/.local/share/Terraria/Worlds
world=/home/
BENUTZERNAME/.local/share/Terraria/Worlds/WELTNAME.wld
upnp=1

Mit Strg+X schließt man die Datei und wird gefragt, ob man die Änderungen abspeichern möchte, was man mit J bejaht. Ab jetzt kommt noch das Programm Screen ins Spiel. Mit diesem kann man mehrere Terminalfenster öffnen und zwischen diesen hin- und her-springen. So ist es möglich den Terraria-Server zu starten und dennoch weiter auf dem Raspi zu arbeiten. Mittels dem folgenden Befehl startet man eine neue Screen-Sitzung:

screen -S terarria

Jetzt ist man sozusagen auf einem neuen Terminalfenster und startet den Terraria-Server mit dem folgenden Befehl:

mono TerrariaServer.exe -config serverconfig

Automatisch lädt der Server nun mit unserer voreingestellten Welt, ohne weiteres Zutun. Jetzt wechselt man mit der Tastenkombination Strg+A und danach D zurück zum ursprünglichen Eingabefenster, somit läuft der Server im Hintergrund. Mit der Eingabe von screen -r terraria kommt man, falls gewünscht, auf den laufenden Terraria-Server zurück, um z.B. diesen herunterzufahren oder neu zu starten. Strg + D würde die aktuelle Screen-Sitzung beenden, deshalb lieber Strg+A und D, um den Server im Hintergrund laufen zu lassen. 

Da jetzt der Terraria-Server auf dem Raspberry Pi seinen Dienst tut, darf man sich vom System abmelden, indem man die SSH-Sitzung beendet. Ein erster Test läuft wie folgt: Man startet Terraria normal auf seinem "Gaming"-PC. Im Menü zu Mehrspieler wechseln und dann Über IP beitreten wählen. Es wird die IP Adresse des Raspberry Pi benötigt, oder der Hostname des Raspi. Die Port-Nummer sollte, wenn sie auf Standard belassen wurde, 7777 sein. Danach sollte sich die Verbindung zum Server aufbauen und man landet in der Spielwelt. (Vorher muss man natürlich noch einen Charakter erstellen bzw. auswählen.)

Der Test war also erfolgreich und man könnte nun schon mit dem Spiel beginnen. Doch will man ja mit seinen Freunden zocken, gibt es noch weitere Schritte, die man unternehmen muss. Der Server soll für alle erreichbar sein. Um dies zu bewerkstelligen muss man einerseits eine Portweiterleitung im Router freigeben und zweitens noch einen Dyn-DNS Dienst einrichten. Dyn-DNS oder besser Dynamic-DNS ist eine Funktion, damit der eigene Router aus dem Internet immer über die gleiche Internetadresse angesprochen werden kann. Ich benutze diesen hier und bin bisher sehr zufrieden, kann ihn demnach nur weiterempfehlen. Wie man den Dienst im Router einrichtet steht dort sehr ausführlich in der Hilfe. Im Endeffekt erhält man eine Internetadresse wie z.B. meineadresse.goip.de und diese wird dann auch im Mehrspieler Modus, wie oben genannt, Über IP beitreten eingesetzt. Die benötigte Portfreigebe für den Port 7777 richtet man ebenfalls sehr einfach im Router ein. Auf dem Bild sieht man die Einstellungen in meiner Fritzbox.

Über Internet / Freigaben klickt man auf Gerät für Freigaben hinzufügen und kann dort seinen Raspberry aus dem Netzwerk auswählen. Sollte man den Raspberry Pi schon als freigegebenes Gerät drinstehen haben, so wählt man natürlich neben dem Gerät den Stift zum Bearbeiten. Im nächsten Fenster klickt man unten rechts auf Neue Freigabe. In der Abfragemaske dazu aktiviert man Portfreigabe, trägt 7777 von/bis ein, wählt einmal Andere Anwendung, wählt Protokoll TCP und klickt zum Anlegen auf OK. Nun nochmal eine neue Freigabe anlegen mit den selbigen Einstellungen nur bei Protokoll wählt man UDP. Auch diese mit OK anlegen und das Ganze speichern. Die Namen der beiden Freigaben sind frei wählbar, ich gebe diesen aber immer einen eindeutigen Bezug, damit ich weiß für was die sind. Wer aufgepasst hat der sieht im Bild zur Fritzbox auf dem dritten Reiter Dyn-DNS, dort werden die Daten des Dynamic-DNS Dienstanbieters eingetragen.
Das wars auch schon. Der eigene Terraria-Server ist von nun an von überall auf der Welt erreichbar. Jetzt können die Mitspieler einfach auf den Server joinen, indem sie die meineadresse.goip.de und den Port 7777 im Mehrspielermodus eintragen. 

Puh, das war gar nicht so kurz diese Anleitung zu schreiben. Ich hoffe es war einigermaßen verständlich und alle Schritte nachvollziehbar. Jedenfalls wünsche ich euch viel Erfolg mit diesem Projekt beim Nachmachen. Was ich noch vergessen habe, ist eine automatische Startfunktion des Servers, wenn mal der Raspi neu gestartet werden muss. Oder wenn der Raspi mal abstürzt, dass sich der Server automatisch wieder aktiviert. Dies baue ich eventuell später noch hier ein. Bin mir nämlich noch nicht sicher, wie ich das Problem löse. Wahrscheinlich über ein Script, welches mit einem Systemd-Dienst gestartet wird.

 

Jetzt erstmal fix aufs ...



 

Keine Kommentare:

Kommentar veröffentlichen

Vielen Dank für Ihren Kommentar. Die Veröffentlichung erfolgt umgehend nach meiner Prüfung. Ich bitte um etwas Geduld. MfG Mintnix