UT Server unter Linux

Du willst einen eigenen Server für Unreal Tournament betreiben? Kein Problem! Dieses Tutorial beschreibt, wie man einen UT4 Dedicated Server unter Linux auf die Beine stellt. Es enthältalle wichtigen Schritte, die man durchführen muss, um in die Serverliste zu kommen! Zum Betreiben eines UT Linux-Server sollte man außerdem über grundlegende Kentnisse über die Linux-Shell verfügen. Ich empfehle dringendst, den Server nicht als Root-User auszuführen. Legt euch am besten einen eigenen User dafür an, der die alleinigen Besitz- und Schreibrechte für die Serverdateien hat.

UT4 Dedicated Linux Server

Dieses Tutorial ist auf Linux-Server ausgerichtet und kann nicht ohne weiteres auf Windows-Server übertragen werden. Je nach Bedarf kann ich aber noch einen Guide für Windows verfassen.

1. Serverdateien herunterladen

Dazu geht ihr in diesen Forenbeitrag und kopiert euch den Link an der Stelle „YES to get the Linux server.“

Das Zip Archiv muss nun auf euren Server. Ich lege das Archiv direkt in das Home-Verzeichnis, wohin ihr es speichert ist natürlich egal.

wget https://s3.amazonaws.com/unrealtournament/UnrealTournament-Server-**********-Linux.zip

Den Link ersetzt ihr natürlich mit dem, den ihr aus dem Forenbeitrag kopiert habt.

2. Archiv entpacken

Nach dem erfolgreichen Download muss das Archiv entpackt werden. Dazu braucht ihr einen zip Extrahierer, wie z.B. unzip, den ihr ggf. vorher noch installieren müsst. Dann führt ihr folgenden Befehl aus:

unzip UnrealTournament-Server-**********-Linux.zip

Dieses Command entpackt die Serverdaten in ein Verzeichnis mit dem Namen „LinuxServer“. Die Binary des Servers liegt unter „LinuxServer/Engine/Binaries/Linux/UE4Server-Linux-Shipping„. Damit ihr sie ausführen dürft, müsst ihr eventuell noch mit…

chmod +x UE4Server-Linux-Shipping

…die Binary ausführbar machen.

3. Erster Serverstart & EULA-Fehler

Nun startet einfach mal den Server und schaut was passiert:

./UE4Server-Linux-Shipping UnrealTournament DM-Spacer?Game=DM?MaxPlayers=16 -multihome=127.0.0.1 -port=7777 -log

Die IP ist erstmal egal, wir wollen zunächst nur durch das initiale Setup kommen. Feintuning erfolgt später. Nachdem also eine Menge Text an uns vorbeiscrollt bricht der Server irgendwann ab. Das ist normal, also keine Panik! Die Ausgabe wird etwa so aussehen:

ut server linux eula

Wie auch beim normalen Spiel müssen wir erst die EULA akzeptieren. Und da es in der Konsole kein Interface gibt, sehen wir den Dialog schlicht und ergreifend nicht. Wir setzen also das „Akzeptiert“-Fläggchen per Hand in der „LinuxServer/UnrealTournament/Saved/Config/LinuxServer/Engine.ini„, indem wir folgendes in die leere Datei einfügen:

[/Script/UnrealTournament.UTGameEngine]

bFirstRun = False

4. Einstellungen in der game.ini

Nun widmen wir uns der Game.ini, die im selben Verzeichnis liegt. In dieser Datei werden die wichtigsten Einstellungen festgelegt. Sie sagen dem Server wie er heißt, was er zu tun hat, welcher Spielmodus laufen soll usw.

[/Script/UnrealTournament.UTGameState]

ServerName=* [GGMJ] TDM Teamdeathmatch Server

ServerMOTD=Wilkommen beim {GGMJ} TDM Server! Enjoy your stay!



[/Script/Engine.GameSession]

MaxPlayers=8

MaxSpectators=4



[/Script/UnrealTournament.UTDMGameMode]

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-ASDF

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-DeckTest

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-Focus

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-NickTest1

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-Circuit

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-SidCastle

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-Spacer

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-Overlord

MapRotation=/Game/RestrictedAssets/Maps/WIP/DM-Deadfall

Die Einträge sollten relativ selbsterklärend sein. Die ersten zwei Einträge geben Servernamen und Wilkommensnachricht an, der zweite Block legt die maximale Spieler- und Zuschaueranzahl fest, der dritte große Block bestimmt die Maprotation, die nach Belieben umgeordnet und erweitert werden kann.

Custom-Maps:

Wenn ihr eigene Maps zur Rotation hinzufügen wollt, die nicht im Standardumfang von Unreal Tournament erhalten sind, dann müsst ihr zusätzlich noch einen Downloadpfad angeben, wo sich Spieler, die diese Map nicht haben, sie automatisch herunterladen können. Ein solcher Eintrag sieht so aus:

+RedirectReferences=(MapName="/Game/Maps/DM-Lea_Alpha04h",MapURL="http://s3.amazonaws.com/unrealtournament/DM-Lea_Alpha04h.pak")

und kommt an das Ende des Blocks [/Script/UnrealTournament.UTDMGameMode] hin, der auch die Maprotation beinhaltet.

Das deckt die Konfiguration der Datei ab. Hier nochmal ein Bild wie unsere Game.ini nun aussieht:

ut server linux game.ini

5. Startzeile & Serverstart

Nun müssen wir nur noch eine passende Startzeile finden und den Server starten. Wir nehmen dabei die oben angegebene Startzeile, die wir nun mit der richtigen Server IP ersetzen. Als Beispiel nehme ich die IP 88.88.88.88, die müsst ihr selbstverständlich durch eure individuelle Server IP ersetzen. Falls ihr euch nicht sicher seid, welche das ist: Der Befehl „sudo ifconfig eth0“ müsste euch die aktuelle Server IP anzeigen.
Vergesst nicht wieder in das Verzeichnis „LinuxServer/Engine/Binaries/Linux“ zu wechseln, wo ihr nun die neue Startzeile ausführt:

./UE4Server-Linux-Shipping UnrealTournament DM-Spacer?Game=DM?botfill=2?MaxPlayers=8?TimeLimit=10?GoalScore=30 -multihome=88.88.88.88 -port=7777 -log

Achtet darauf, dass der Port, den der UT Server benutzen soll – hier standardmäßig Port 7777 – nicht bereits benutzt wird. Vor allem wenn ihr bereits andere Unreal Tournament Server laufen habt, ist die Wahrscheinlichkeit groß, dass der Port bereits belegt ist. Rausfinden könnt ihr das mit dem Befehl „sudo netstat –listen -A inet | grep 7777„:

ut server linux port netstat

Wenn es zu keiner Ausgabe kommt, dann ist der Port noch frei.

Die „MaxPlayers„-Direktive in der Startzeile überschreibt übrigens den Ini-Wert, also vor dem Start hier ebenfalls anpassen.

Botfill“ legt fest, wieviele Spielerslots durch Bots aufgefüllt werden sollen, falls mal zu wenige Spieler auf dem Server sind. Der Standardwert ist „2“, bei Bedarf kann der Wert auf „0“ oder einen höheren Wert gesetzt werden.

Timelimit“ und „GoalScore“ legen für die Spielmodi fest, wieviele Minuten ein Match (maximal) andauert und wieviele Abschüsse notwendig sind, um das Match zu beenden. Setzt man „0“ als Wert für eine der Direktiven, schaltet man sie ab. So würde ein Match mit den Einstellungen ?TimeLimit=0?GoalScore=10 so lange laufen, bis jemand 10 Kills hat.

Wenn ihr ein Passwort auf dem Server haben wollt, müsst ihr die folgenden zwei Direktiven noch an die Startzeile anhängen: „?RequirePassword=1?ServerPassword=einpasswort“

6. Spielmodi auswählen

Als Gametype könnt ihr DM, TDM und CTF auswählen. Wenn ihr den Mutator Instagib dazunehmen wollt, muss dieser Part nach der MaxPlayers Direktive und vor -multihome ohne Leerzeichen eingesetzt werden:
?Mutator=/Game/RestrictedAssets/BluePrints/Mutator_Instagib.Mutator_Instagib_c„.

Wollt ihr also bspw. einen Instagib-TDM Server, sieht die Zeile so aus:

./UE4Server-Linux-Shipping UnrealTournament DM-Spacer?Game=TDM?botfill=2?MaxPlayers=8?TimeLimit=10?GoalScore=30?Mutator=/Game/RestrictedAssets/BluePrints/Mutator_Instagib.Mutator_Instagib_c -multihome=88.88.88.88 -port=7777 -log

Fertig! Das reicht um den Server zu starten!

7. Startscript

Was ist wenn der Server mal abstürzt? Jedes mal die Zeile neu eingeben? Das muss nicht sein. Dabei hilft ein Startscript. Dazu legt man im selben Verzeichnis, in dem die Verzeichnisse mit den Serverdateien liegen, eine start.sh Scriptdatei an, in der man die Startzeile zusammenbaut und mit der man den Server starten kann. Das Serververzeichnis kann man übrigens umbenennen, von LinuxServer auf etwas Beschreibenderes, wie bspw. UT2k14-Server-TDM. Hier ist das Startscript:

#!/bin/bash

NAME=UT2k14-Server-TDM PORT=7777 STARTMAP=DM-Spacer GAMEMODE=TDM BOTFILL=2 MAXPLAYERS=8
ps -eaf | grep $NAME | grep $PORT if [ $? -eq 1 ] then CMD="./${NAME}/Engine/Binaries/Linux/UE4Server-Linux-Shipping UnrealTournament ${STARTMAP}?Game=${GAMEMODE}?botfill=${BOTFILL}?MaxPlayers=${MAXPLAYERS} -multihome=88.88.88.88 -port=${PORT} -log" echo $CMD screen -dm -S $NAME $CMD else echo "$NAME is Already running on port $PORT" fi

Es gibt natürlich viele verschiedene Möglichkeiten so ein Startscript zu bauen. Meine Methode benutzt Variablen, damit man später auch mal mehrere Server ohne große Mühe aufsetzen und das Startscript einfach kopieren und anpassen kann. Der erste Block legt die Variablen fest, die dann in der Command Line Variable $CMD zusammengesetzt werden. Der Reihe nach:

NAME = Der Verzeichnisname des Servers. Ich benenne sie nach dem Schema "UT2k14-Server-{Gametyp}". Ohne Leerzeichen, das Verzeichnis des Servers hat den selben Namen.

PORT = Selbsterklärend: Der Port, auf dem der Server laufen soll. Kommt in die Kommandozeile und danach wird auch gegreppt.

STARTMAP = Die erste Map, die nach dem Hochfahren des Servers geladen wird.

GAMEMODE = Der Spielmodus. Im Moment möglich: DM, TDM, CTF.

BOTFILL = Wie viele Bots den Server auffüllen sollen, falls nicht genügend Spieler anwesend sind. Zum Deaktivieren den Wert "0" wählen.

MAXPLAYERS = Die maximale Anzahl an Spielern auf dem Server.

das „ps“ überprüft, ob der Server läuft. Dabei wird nach dem Namen und Port gegreppt, da wir über das screen command ja dem Server auch ein Laben geben, um ihn so besser identifizieren zu können.

das „if .. then“ sorgt dafür, dass die CMD Variable aus den Variablen zusammengesetzt wird, falls der Prozess nicht gefunden wurde. Zum Testen wird sie vom Script per echo ausgegeben, damit wir sehen, dass das auch das Startscript ist, das wir wollen. Mit dem screen command wird dies anschließend gestartet.

Wenn ihr einen Instagib Server betreiben wollt, vergesst nicht noch die ?Mutator=… Zeile von oben dazuzunehmen!

Falls der Prozess schon läuft, bekommt ihr lediglich eine Ausgabe, dass der Server bereits auf seinem Port läuft. Dadurch könnt ihr das Script problemlos auch in einen Cronjob setzen, der bspw. jede Minute dafür sorgt, dass der Server läuft. Geht mit crontab -e in den Cronjob Manager, dort tragt ihr jeden eurer Server ein:

ut server linux crontab cronjob

Nachdem das alles geschafft ist, hier nochmal eine Ansicht meines Home-Verzeichnisses auf dem Server:

ut server linux homedir

Dieser Artikel wurde geschrieben von {GGMJ}Radon. Zum Diskussionsthread geht es hier entlang: http://ut.ingame.de/forum/threads/165-Sammelthread-zum-UT4-Linux-Server-Tutorial

Quelle für die Informationen aus diesem Tutorial war die „Servers“ Wiki-Seite und Forenbeiträge des offiziellen Unreal Tournament Forums.