trash-art.at Blog

26Okt/1211:01 PM

Terraria Server auf Debian Linux

Terraria Terraria! Das Minenbuddel-, u. Craftingfieber ist ausgebrochen!
Wer dem Spaß zusammen mit Freunden nachgehn will kann das unter Windows Out of the Box auch tun.

Für alle die eine Welt unter Linux(hier Debian Squeeze) bereitstellen möchten geht dass nun dank Mono und TShock.
Mono ermöglicht es .exe Dateien unter Linux auszuführen, in den neuesten Versionen wird dabei auch eine Notwendigkeit für Terraria bedient: XLNA(.net Framework 4.0)

Zu allererst installieren bzw. updaten wir Mono. Für Terraria benötigen wir eine Version höher 2.6.x. Da uns Debian Stable(Squeeze) nur 2.6.x per aptitude oder apt-get anbietet, kompilieren wir, in diesem erprobten Fall, Mono 2.10.2 selbst(Auf diesem Weg bleibt unser Debian Stable und wird kein "Mischsystem").
Bevor es richtig losgeht und um Mono kompilieren zu können tun wir folgendes:
1.: aptitude update
2.: aptitude install gcc libtool bison pkg-config libglib2.0-dev gettext make bzip2 g++

Nun wechseln wir per cd nach /opt
In /opt führen wir folgende Kommandos aus(wir sind nach wie vor root):
1.: wget http://origin-download.mono-project.com/sources/mono/mono-2.10.2.tar.bz2
(Sollte dieser Spiegel nicht verfügbar sein kann direkt von hier geladen werden: wget http://trash-art.at/downloads/mono-2.10.2.tar.bz2)
2.: tar xvjf mono-2.10.2.tar.bz2
3.: cd mono-2.10.2
4.: ./configure --prefix=/opt/mono-2.10
(Die Ausführung der beiden folgenden Kommandos kann je nach System zwischen 30 und 60 Minuten dauern)
5.: make
6.: make install

Um Mono ausführbar zu machen und etwaige alte Versionen durch die eben kompilierte zu ersetzen tun wir folgendes:
1.: cd /usr/bin
2.: mv mono mono.old (nur nötig wenn zuvor bereits eine ältere Version installiert war und nicht entfernt wurde)
3.: mv gmcs gmcs.old (nur nötig wenn zuvor bereits eine ältere Version installiert war und nicht entfernt wurde)
4.: ln -s /opt/mono-2.10/bin/mono /usr/bin/mono
5.: ln -s /opt/mono-2.10/bin/gmcs /usr/bin/gmcs

Die Eingabe von mono -V sollte uns nun die verwendete Version von Mono anzeigen, in unserem Fall also Version 2.10.2.

Nun zum eigentlichen Teil, die Installation des Servers:
Wir betreiben TShock, ein Opensource-Projekt das speziell zum hosten von Terraria Servern ins Leben gerufen wurde. Dank Mono können wir es nun auch in Debian Linux nutzen :-)

Da wir den Terraria Server nicht als root laufen lassen, erstellen wir einen neuen User inkl. eigenem Home-Verzeichnis in den die Server Daten abgelegt werden.
1. : useradd -m terraria (legt den User terraria inkl. /home/terraria an)
2.: passwd terraria (Fordert zur Eingabe eines Passwortes für den User terraria auf)

Wir sind jetzt soweit um die eigentlichen Serverdaten an Ort und Stelle zu bringen:
1.: su terraria (wir wechseln zum User terraria)
2.: cd /home/terraria
3.: wget http://trash-art.at/downloads/terrariaserver.tar
(Die Daten entsprechen jenen von tshock.co in der Version 4.0. Der Unterschied: Das Directory serverplugins wurde in ServerPlugins umbenannt da TShock auf Linux Systemen auf diese Namensgebung besteht. Unter Windows muss der Verzeichnisname nicht geändert werden)
4.: tar xvf terrariaserver.tar

Fertig :-)

Nun starten wir den Server(Port 7777 muss offen sein um sich verbinden zu können), erstellen eine Welt und legen einen Terraria Superadmin, um den Server bequem per Client verwalten zu können, an.

Um den Server zu starten tippen wir unter Verwendung des Users terraria in /home/terraria:
mono TerrariaServer.exe

Der Server sollte nun starten und eine Welt kann erstellt werden. Zur Info: Eine "Small World" benötigt ca. 310MB RAM, eine "Medium World" an die 420MB RAM, eine "Big World" etwas weniger als doppelt so viel. Die CPU Auslastung hält sich auf einem 3Ghz P4(Single Core) mit ca. 20-50% in Grenzen. Auch beim Joinen mehrerer Mitspieler bleibt die Auslastung relativ gleich. Spitzen von 90-100% in Punkto CPU Auslastung werden lediglich beim Starten des Servers, bei der Generierung sowie der Speicherung der Spielwelt erreicht.

Den Rest erledigen wir vom Client, also dem Spiel, aus:
1.: Wir legen im Spiel einen beliebigen neuen Char an oder wählen einen bestehenden aus, den wir zum Superadmin machen wollen.
2.: /auth [authcode] (An Stelle von [authcode] schreiben wir die Zahl die uns der Server als sog. Authcode anzeigt)
3.: /user add [username]:[password] superadmin (Beispiel: /user add John:qwerty superadmin)
4.: /login [username] [password] (Beispiel: /login John qwerty)
5.: /auth-verify

Dieser Account ist nun Superadmin und der Server kann damit uneingeschränkt verwaltet werden.
Wer so weit gekommen ist wird folgendes bemerken: Startet man den Server via SSH Terminal, so fordert dieser erstens dazu auf eine Welt auszuwählen, und auch eine Eingabe bzgl. des zu verwendenden Ports. Im Anschluss läuft der Server, aber nur so lange das SSH Terminal offen ist. Schließt man beispielsweise Putty, also den SSH Client in dem die Serverinstanz gestartet wurde, so wird auch der Terraria Server gestoppt - sehr unpraktisch wenn man ihn beispielsweise auf einem VPS laufen hat. Lösung: Ein Terminal-Multiplexer names screen. Kurz gesagt kann screen Kommandos in einem virtuellen Terminal welches dann als eigenständiger Prozess weiterläuft, ausführen. screen besitzt die wunderbare Eigenschaft, dass es seinen eigenen Prozess killt sobald der darin ausgeführte Prozess beendet wurde. Als Lösung bauen wir zum starten des Servers also auf screen, zum beenden des Servers auf den Superadmin Ingame-Befehl /off. Erhält der Server also ein /off vom Spielclient, so fährt der Server ordnungsgemäß herunter und auch screen wird beendet :-)
Um die zuvor erwähnte händische Auswahl einer Welt zu automatisieren und auch um den screen, sowie mono Befehl auszuführen, bauen wir ein kleines Startscript. Und so gehts:
1.: aptitude update (als root)
2.: aptitude install screen (als root)
3.: su terraria (wir wechseln wieder zum User terraria)
4.: cd /home/terraria
5.: nano tshock-start (wir erstellen nun mit dem Editor nano ein Startscript namens tschock-start)
In tshock-start fügen wir nun alle auszuführenden Kommandos ein. Ein Teil davon ist der Pfad bzw. Name der zu startenden Welt. Daher muss der Server einmalig wie oben beschrieben gestartet werden. TShock legt daraufhin einige neue Dateien und Ordner in /home/terraria an, unter anderem /home/terraria/Terraria/Worlds. In /Worlds findet sich nun die angelegte Welt als einzelne Datei, diesen Namen brauchen wir für das Script um ihm zu sagen welche Welt automatisch gestartet werden soll. Außerdem befindet sich im Script der vorangestelle screen-Befehl screen -S tshock.
Das bedeuted dass die Instanz von screen unter dem namen tshock läuft und zu finden ist. Wurde der Server erst einmal via Script gestartet, so kann man ein weiteres Putty Terminal öffnen und screen -list eingeben(unter Verwendung des Users terraria). So lässt sich einfach prüfen ob die Instanz noch offen oder bereits geschlossen ist. Wurde der Server via Spielclient mittels /off beendet, so sollte auch per screen -list keine Instanz mehr zu sehen sein.

Hier nun die Daten die ins Script tshock-start kommen:
#!/bin/sh
screen -S tshock /usr/bin/mono /home/terraria/TerrariaServer.exe -world /home/terraria/Terraria/Worlds/world1.wld


Speichern, Editor beenden und folgendes eingeben:
chmod 755 tshock-start (Damit wird das Script ausführbar)

Soweit fertig :-) Möchte man den Server nun starten loggd man sich via SSH Client(z.B. Putty) am Debian Server unter Verwendung des Users terraria ein(Das ist wichtig! Wenn man sich z.B. per User root einloggd, und dann per su zum User terraria wechselt, funktioniert screen nicht. Man muss sich also direkt mit dem User terraria via SSH einloggen um das Startscript ausführen zu können.). Im Anschluss, sollte man nicht bereits automatisch darin laden, wechselt man per cd nach /home/terraria. Hier geben wir nun folgendes um das Script, und damit den Terraria-Server zu starten ein:
./tshock-start (inkl. ./)
Das SSH Terminalfenster kann nun einfach geschlossen werden und der Server läuft, dank screen, weiter.

Um den Server zu beenden einfach via Spiel und Superadmin verbinden und im Chat /off eingeben, der Server speichert und fährt ordnungsgemäß herunter.

Übrigens, eine JSON Konfigurationsdatei namens config.json befindet sich im Ordner /home/terraria/tshock/.
Hier kann alles vom Standardport über Max. Spieleranzahl, diverse Gimmicks und auch ein Serverpasswort angegeben werden. Zur Info: Der Befehl /serverpassword existiert im Spiel und kann als Superadmin ausgeführt werden, jedoch hält es nur bis zum Neustart des Servers. Um es permanent zu vergeben muss die config.json mit z.B. nano bearbeitet werden, im Falle des Passworts wäre folgendes zu ändern(Standard ist kein Passwort):
"ServerPassword": "", wird in z.B. "ServerPassword": "qwerty", geändert. Nun benötigt jeder User der sich nicht via /register ingame registriert hat dieses Passwort.

Ein weiterer Hinweis bzgl. Administration: Um andere User mit Admin-Rechten auszustatten muss sich dieser User zuerst per /register registrieren. Wenn er das getan hat kann der Superadmin Rechte an diesen User vergeben. Das geschieht indem man vorhandene User der gewünschten Gruppe hinzufügt.
Die vordefinierten Usergruppen sind: vip, newadmin, admin, trustedadmin und superadmin. Angenommen man will einen User Hans zum trustedadmin machen: Per Superadmin einloggen und folgendes Kommando in den Chat posten:
/user group Hans trustedadmin
User Hans ist nun Mitglied der Gruppe trustedadmin.

Für weitere Infos besucht man die TShock Seite oder gibt im Spiel /help ein.
Die offizielle TShock Dokumentation inkl. Basiskommandos findet man hier.

Viel Spaß beim Zocken :-)