TrackMania Nations Forever Dedicated Server auf Linux installieren

Viele Anleitungen im Internet sind leider zu diesem Thema nicht mehr aktuell, daher habe ich mir mal die Aufgabe angenommen, eine neue zu erstellen.
Mit Hilfe dieser Anleitung, schaffst du es, einen TrackMania Nations Forever / United Forever dedicated Server auf einem Linux Server mit aktueller Distribution zu installieren und XAseco(1) zum laufen zu bekommen.

Was werden wir alles in dieser Anleitung machen?
0. Vorbereitung des Servers
1. Einen Webserver installieren [nginx]
2. PHP installieren [php7.X]
3. Einen SQL-Server installieren [mySQL]
4. OPTIONAL: Den Webserver via HTTPS (SSL) absichern [Let‘s Encrypt] (Domain notwendig!)
5. PHPMyAdmin installieren
6. Einen TrackMania Server-Account anlegen
7. Den TrackMania Dedicated Server aufsetzen
8. Xaseco in einer Modifizierten Variante (für php7.X) installieren
9. AdminServ installieren
10. OPTIONAL: Abschotten des TM-Servers mit einer Firewall

Dieses Tutorial ist für Anfänger ausgelegt und für die „Nix denken, code kopieren“-Menschen unter euch 🙂
Ein paar grundlegende Befehle und Funktionen eines Linux-Betriebssystems sollten allerdings vorhanden sein.


Die Anforderungen:

– Einen Linux-Server mit aktuellem System (Debian 9 / Ubuntu 18.X oder neuer)
– 1 Kern CPU mit minimum 1.5GHz + min 512MB RAM oder besser / mehr
– Vollen SSH-Zugang mit Root-Rechten
– Einen TrackMania Nations Forever Account, der für den Server genutzt werden kann ODER einen United Forever mit Player-Page-Login
– OPTIONAL: Für schönere Anpassungsmöglichkeiten ist ein SFTP-Client wie FileZilla oder WinSCP empfehlenswert. Wer Windows nutzt, kann gerne Notepad++ als Editor verwenden.

Hinweis: Es wird empfohlen, das ganze auf einem frisch installierten Server umzusetzen! So treten am Ende weniger Probleme auf.


Die Gegebenheiten:

Dieses Tutorial wurde auf auf den aktuellen Debian-Distributionen getestet und erstellt.
Debian 9 und Ubuntu 18.04 LTS / 18.10 sollten 100% funktionieren.


Los gehts!

Hinweis vorne weg: Es gibt einige Punkte die frei angepasst werden können oder ggf. gar nicht 1:1 übernommen werden müssen. Es gibt viel Spielraum. Wer von der Anleitung abweichen möchte, muss mit den daraus folgenden Konsequenzen umgehen. Ich werde in solchen Fällen nicht helfen.

0. Vorbereitung

Damit wir gut loslegen können und alles auf dem System installiert haben, was wir benötigen, müssen wir ein paar Vorbereitungen treffen.
Sollte dein Server schon einiges an Software installiert haben und du kennst dich mit Linux schon aus, kannst du den Schritt überspringen.

Meldet euch auf eurem Linux-Server (als root) an und aktualisiert ihn, damit alle Pakete auf dem neusten Stand sind.

apt update && apt upgrade -y

Empfehlenswert sind auch noch folgende Programme:

apt install htop iftop nano zip unzip

Wir verwenden als Webserver nginx, da der Webserver weniger Ressourcen benötigt als z.B. Apache2 oder lighttpd und dabei noch schneller ist. Wer ein „kleinen“ Linux-Server (z.B. nur eine vCore CPU) für den TM-Server nutzt, wird davon ggf. profitieren.
Daher gehen wir auf Nummer sicher, das kein anderer Webserver auf dem System läuft:

apt remove apache2*

Einige Distributionen der Serverhoster haben automatisch einen Webserver installiert, der könnte stören 😉

Wir legen für den TM-Server nun ein seperaten User an, denn ein Gameserver mit Root-Rechten zu starten, ist keine gute Idee.
Mit:

adduser NUTZERNAME

Beispiel:

adduser gameserver

können wir ein neuen Nutzer anlegen.
Vergebt ein sicheres Passwort für den Nutzer!

 

Lege dir nun eine Textdatei auf dem Desktop an oder nutze ein analoges Speichermedium (ein Blatt Papier) und notiere schon einmal folgendes, denn das werden wir später befüllen können:

MySQL
Benutzer: root
Passwort:

Benutzer: phpmyadmin
Passwort:

Benutzer: Nutzername deiner Wahl
Passwort:

TM-Server
Serverlogin:
Passwort:

Dedicated Server-Login
Benutzer: SuperAdmin
Passwort:

Adminserv
Passwort:

Diese Zugangsdaten solltest du dir an einem sicheren Ort aufbewahren, da diese für die Administration des Servers notwendig sind.

1. nginx installieren

Wir installieren nginx über die offiziellen Paketquellen

apt install nginx -y

Ist alles installiert, legen wir nun eine Konfigurationsdatei an, welcher auf die IP-Adresse / Domain des Servers hört, den korrekten Pfad zu später AdminServ kennt und auf Wunsch das ganze via HTTPS ausliefert.
Möchtest du deine Server im Internet zur Verfügung stellen und auch Zugang zum Webinterface ermöglichen, sollte es für DEINE Sicherheit per HTTPS abgesichert werden. Eine lokale Installation bei dir Zuhause, kann auch ohne HTTPS auskommen.
Benötigst du kein HTTPS, so entferne die Zeilen für SSL und verschiebe die PHP-Config-Zeilen in den HTTP-Bereich (listen 80).

cd /etc/nginx/sites-enabled/
nano adminserv

Wir erstellen nun eine Config mit dem Namen „adminserv“. Der Name kann frei angepasst werden.
Ich habe hier einmal eine Beispiel-Config, welche du ab kopieren kannst. Du musst eigentlich nur folgende Werte abändern:
(Zeile 4 + 18) server_name: Deine Domain hier Eintragen (für Lokale Installationen reicht die IP-Adresse)
(Zeile 27) fastcgi_pass: Hier die genutzt PHP-Version korrekt angeben (das php7.2 durch z.B. php7.4 ersetzen)
(Zeile 33 + 34) ssl_certificate + ssl_certificate_key: Hier den Pfad noch auf deine Domain anpassen
(Zeile 14) root: Falls ein anderes Homeverzeichnis für die Webseitendaten verwendet werden soll, muss der Pfad noch angepasst werden
Die Config ist so aufgebaut, das eine weiterleitung zu HTTPS gemachtg wird und der Certbot am Ende nur das Zertifikat einbauen muss.

ACHTUNG: Soweit du SSL nutzen möchtest, entferne kurzfristig bei der Erstellung des SSL-Zertifikats das “ssl” hinter der Portangabe 443! Nach der Erstellung kann dies wieder hinzugefügt werden!

server {
listen 80;
listen [::]:80;
server_name deinedomain.de www.deinedomain.de;
# enforce https
return 301 https://$server_name$request_uri;

}

server {
listen 443 ssl;
listen [::]:443 ssl;

root /var/www/html;

index index.php index.html index.htm;

server_name deinedomain.de www.deinedomain.de;
client_max_body_size 100M;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# Hier kannst du später dein SSL-Zertifikat einfügen
# ssl_certificate /etc/letsencrypt/live/deinedomain.de/fullchain.pem; # managed by Certbot
# ssl_certificate_key /etc/letsencrypt/live/deinedomain.de/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

Mit STRG + X und anschließend ein Y mit ENTER, kannst du alles Speichern und nano schließen.
Wir können die Config nun testen, indem wir in das Terminal folgendes eingeben:

nginx -t

Der Test wird fehlschlagen! Unter Umständen kann der Test aber auch erfolgreich verlaufen.
Denn uns fehlt php und das SSL-Zertifikat.
Das kommt gleich 🙂

2. PHP installieren (php7.2)

Mit einer aktuellen Distribution bekommen wir auch ein aktuelles php. Aktuell ist dort Version 7.2 im Umlauf und sollte auch verwendet werden.
Leider funktioniert Xaseco(1) von Haus aus nicht mehr mit php7.X, aber mit einer etwas modifizierten Version schon.
Die Vorteile von php7.X sind klar, sicherer & schneller!
Folgende Pakete sollten für den TM-Server ausreichen:

apt install php-fpm php-mysql php-gd php-xml php-curl php-zip -y

Ist die Installation durch, kann jetzt noch ggf. in der nginx-Config (adminserv) die PHP-Version angepasst werden.
PHP kann versuchen den Webserver neu zu starten. Das sollte jetzt funktionieren.
Tipp: Wenn du eine andere PHP-Version nutzen möchtest, füge bei den Paketen die jeweilige Version hinzu.
Beispiel:

apt install php7.3-fpm php7.3-mysql php7.3-gd php7.3-xml php7.3-curl -y

3. MySQL Server installieren

Damit die Rekorde auch irgendwo gespeichert werden können, brauchen wir ein SQL-Server.
Hierfür nutzen wir MySQL.
Wir installieren den SQL-Server und sichern ihn gleichzeitig noch ab.

apt install mysql-server -y

Um ihn jetzt sicher zu machen, schicken wir folgenden Befehl ab:

mysql_securestallation

Wir werden nach folgendem Befragt, das wir wie folgt beantworten:
VALIDATE PASSWORD PLUGIN: y|Y (yes)
Password policy: Empfehlung liegt hier ganz klar bei 2
New password: Hier ein sicheres Passwort für den Root-Account angeben
WICHTIG: Das ist NICHT der Root-Account des SSH-Zugangs (also dem System) sondern des MySQL-Servers. Der besitzt auch einen Account namens root. Er hat aber NICHTS mit dem vom System zu tun.
Gebt hier ein sicheres Passwort an.
Continue with the password: y|Y (yes)
Remove anonymous users: y|Y (yes)
Disallow root login remotely: y|Y (yes)
Remove test database and access to it: y|Y (yes)
Reload privilege tables now: y|Y (yes)

Es ist nun empfehlenswert, direkt einen Nutzer für den TM-Server anzulegen, eine Tabelle zu erstellen und dem Nutzer die Rechte für die Tabelle zu geben.
Es ist absolut nicht empfehlenswert, mit dem Root-Nutzer von MySQL die TM-Datenbank zu verwenden.

Mit folgendem Befehl gehen wir nun auf den SQL Server:

mysql -u root -p

Ihr werdet nach dem Root-Passwort abgefragt, welches ihr gerade beim Absichern angegeben habt.

Wir legen einen neuen Nutzer mit folgendem Befehl an:

CREATE USER 'NUTZERNAME'@'localhost' IDENTIFIED BY 'SUPER-SICHERES-PASSWORT-NACH-VORGABEN';

Beispiel:

CREATE USER 'tm-server'@'localhost' IDENTIFIED BY 'SuperDuper123';

Wir legen nun eine Datenbank für den Nutzer an:
Editiert hier die FETT markierten Bereiche mit euren Wunschwerten.

CREATE DATABASE datenbankname;

Beispie:

CREATE DATABASE tmserverdb;

Zum Schluss erlauben wir dem Nutzer Zugriff auf die Datenbank zu haben:

GRANT ALL PRIVILEGES ON datenbankname . * TO 'NUTZERNAME'@'localhost';

Beispiel:

GRANT ALL PRIVILEGES ON tmserverdb . * TO 'tm-server'@'localhost';

Damit alles übernommen wird, flashen wir die Regeln noch kurz mit:

FLUSH PRIVILEGES;


Mit einem

exit

kommen wir wieder aus MySQL raus.

4. OPTIONAL: HTTPS via Let‘s Encrypt

Damit wir ein sicheren Zugriff auf AdminServ + phpmyadmin ermöglichen können, sichern wir den Server mit HTTPS ab und damit keine doofe Meldung im Browser erscheint, holen wir uns ein Let‘s Encrypt-Zertifikat. Kost ja nix 🙂

Damit wir aber ein Zertifikat bekommen, brauchen wir eine Domain!
Egal ob Sub-Domain oder eine komplette, egal ob .de .net .com …. oder gar eine kostenlose .tk. Hauptsache eine Domain, die auf den Server zeigt.

Mein Tipp: Wenns nur ein Spaß-Server ist, holt euch einfach eine .tk-Domain. Ist doch voll egal, ob es eine Top-Level-Domain ist, hauptsache es ist eine. Auch eine Sub-Domain wäre möglich, falls dir jemand eine zur Verfügung stellt.

apt-get update
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install python-certbot-nginx

Testen wir ob der Certbot läuft mit:

certbot renew --dry-run

Gut, nun erstellen wir uns ein Zertifikat mit folgendem Befehl:

certbot --nginx -d deinedomain.de -d www.deinedomain.de

Wenn du eine Subdomain nutzt, kann der Befehl genau gleich genutzt werden:

certbot --nginx -d deine.subdomain.de

Wir werden beim Anlegen nach einer E-Mail-Adresse gefragt, bei der ihr eine gültige Mail-Adresse eingeben müsst.
Anschließend müssen wir von der Lizenzbestimmung zustimmen und können auf Wunsch den Newsletter bestellen.

Am Ende werden wir gefragt, ob ein Redirect (Weiterleitung) zu HTTPS erstellt werden soll.
Drückt hier 1, da wir diesen schon in meiner Beispielconfig mit HTTPS drin haben.
Denke aber jetzt daran, die # vor der HTTPS-Konfigurationszeile in der nginx-Config zu entfernen, damit die Zeile aktiv wird!
(Zeile 33 + 34 der nginx-Config.)
Der Certbot fügt nun nur die Zertifikate in der Config (adminserv) ein und startet nginx einmal neu.

Ein Test ob die Standardseite von nginx nun via HTTPS aufgerufen werden kann, kann nun durchgeführt werden 🙂

5. phpMyAdmin installieren

phpmyAdmin ermöglicht es, die SQL-Daten schön und einfach zu importieren und zu verwalten. Wir können auch so Cheater manuell aus den Datenbanken löschen, ohne mit komplizierten SQL-Befehlen arbeiten zu müssen.
MEIN TIPP: Aktiviert phpMyAdmin nur dann, wenn ihr es auch wirklich braucht! Somit bieten wir den doofen Hackern weniger Angriffsfläche auf unserem Server.

apt install phpmyadmin -y

Wir werden abgefragt, welchen Webserver wir verwenden.
Wir setzten hier nirgendwo einen Punkt, sondern gehen mit TAB direkt auf <OK>.

phpmyadmin möchte gerne noch eine Datenbank installieren, dass das Tool funktionieren kann. Dies müssen wir mit <Yes> bestätigen.

Ist der Installationsprozess durchgelaufen, müssen wir ein sicheres Passwort für den Nutzer phpmyadmin vergeben.
Schreibt nun in die Textbox ein sicheres Passwort hinein und geht per TAB auf OK. Wiederholt anschließend noch einmal das Passwort.

Anschließend müssen wir nun noch die Webseite von phpMyAdmin zu nginx leiten, was wir mit folgendem Befehl durchführen:

ln -s /usr/share/phpmyadmin /var/www/html

TIPP: Wird PHPMyAdmin nicht mehr benötigt, kann der Link wieder aus dem html-Ordner gelöscht werden. So bieten wir den “Hackern” keine Angriffsfläche in diesem Bereich.

Nun sollte phpMyAdmin wie folgt aufrufbar sein:
https://DeineIP/phpmyadmin
oder
https://DeineDomain.de/phpmyadmin

Ein Login sollte nun nur mit dem vorhin erstellten MySQL-Account (z.B. tm-server) möglich sein. Der Root-Account sollte sich hier NICHT anmelden dürfen. Auch der phpmyadmin-User sollte sich anmelden können.

Falls diverse Meldungen erscheinen sollten, darf hier kurz die Suchmaschine eures Vertrauens befragt werden.
Je nach Distribution müssen die Meldungen unterschiedlich unterdrückt werden. Ein Sicherheitsproblem besteht aktuell hier nicht.
Ich werde deshalb hier auch keinen Lösungsweg nennen.

6. Einen TrackMania Account anlegen

Hier haben wir nun zwei Möglichkeiten.
Wir legen einen kostenlosen TMNF-Account an. Mit diesem dürfen wir aber NUR TMNF also Stadium-Server erstellen und können KEINE Coppers als Spenden / PayForSkip,… entgegennehmen.

Wir können aber auch über die Player Page von TMUF mit unserem TrackMania United Forever Account einen extra Server-Benutzer anlegen.
Hierfür müsst du einen Login-Namen, Passwort und die Region angeben.
Um dies zu schaffen, musst du zuerst noch einen Key für TMUF (aus der CD-Hülle oder Steam-Key) angeben! Ohne den gehts nicht weiter!

Merke dir jetzt auf jedenfall den Login-Namen und Passwort, sowie falls du ein United Account hat, die letzten DREI Ziffern deines Keys!

7. Den TrackMania Dedicated Server aufsetzen

Endlich beginnt nun die eigentliche Gameserver-Installation!
Als erstes loggen wir uns nun per SSH mit dem aus Schritt 0 (Vorbereitung) extra angelegten Account ein (z.B. der User gameserver).

Falls wir mehrere Server hosten möchten, packen wir die am besten in ein extra Ordner.
Deshalb erstellen wir erst mal einen und erstellen darin ein separaten Ordner für den TM-Server

mkdir TMNF
cd TMNF
mkdir tm-server
cd tm-server

Wir werden am Ende folgende Ordnerstrucktur haben:
HOME-Verzeichnis
=> TrackMania-Server (TMNF)
==> Der Eigentliche Server (tm-server)
==> Das Rekordeverwaltungs-Tool XAseco (xaseco)
Wer möchte kann die Stucktur gerne auf seine Bedürfnisse anpassen. Bedenke hierbei auch, das diverse Konfigurationen dementsprechend angepasst werden müssen.

Nun laden wir die aktuellen Serverdaten herunter. Die findest du HIER und kannst sie direkt mit folgendem Befehl herunterladen:

wget http://files2.trackmaniaforever.com/TrackmaniaServer_2011-02-21.zip

Falls der orginale Download nicht gehen sollte, gibt es HIER einen alternativen Download.

Jetzt entpacken wir das ganze noch mit:

unzip TrackmaniaServer_2011-02-21.zip

Gut!
Nun müssen wir drei Einstellungen noch anpassen.
Als erstes die Gameserver-Config

cd /home/gameserver/TMNF/tm-server/GameData/Config
nano dedicated_cfg.txt

Hier habe ich mal die Stellen heraus kopiert, die geändert werden müssen.
Einfach mit dem Editor suchen und deine Werte einsetzen:

<authorization_levels>
<level>
<name>SuperAdmin</name>
<password>PASSWORT ÄNDERN</password>
</level>
<level>
<name>Admin</name>
<password>PASSWORT ÄNDERN</password>
</level>
<level>
<name>User</name>
<password>PASSWORT ÄNDERN</password>
</level>
</authorization_levels>
<login>LOGIN-NAME</login>
<password>PASSWORT</password>
<validation_key>XXX</validation_key>
</masterserver_account>
<server_options>
<name>Name des Servers hier angeben - hoerli.net</name>
<comment>Serverbeschreibung hier festlegen - hoerli.net</comment>
<hide_server>0</hide_server> <!-- value is 0 (always shown), 1 (always hidden), 2 (hidden from nations) -->
<max_players>40</max_players>
<password></password>
<max_spectators>40</max_spectators>
<password_spectator></password_spectator>

……..

<server_port>2354</server_port>
<server_p2p_port>3454</server_p2p_port>
<xmlrpc_port>5004</xmlrpc_port>

mit STRG + X und ein Y mit ENTER könnt ihr es wieder speichern und schließen.

Nun müssen wir noch eine Tracklist anlegen. Das ist die Datei, die alle Maps die auf dem Server aktiv sein sollen beinhaltet.
Hierzu kopieren wir einfach eine schon vorhandene von Nadeo und benennen diese um. So haben wir gleich Maps auf dem Server und der Server wird am Ende starten können.

cd /home/gameserver/TMNF/tm-server/GameData/Tracks/MatchSettings/Nations/NationsBlue.txt
cp NationsBlue.txt /home/gameserver/TMNF/tm-server/GameData/Tracks/MatchSettings/tracklist.txt

Wunderbar!

Nun gehen wir in das Hauptverzeichnis des TM-Servers und legen noch eine Startdatei an, damit wir den Server bequem starten können.

cd /home/gameserver/TMNF/tm-server
nano STARTEN.sh

In diese Datei fügen wir folgenden Code ein:

#!/bin/bash
cd /home/gameserver/TMNF/tm-server/
/home/gameserver/TMNF/tm-server/TrackmaniaServer /game_settings=MatchSettings/tracklist.txt /dedicated_cfg=dedicated_cfg.txt /noautoquit

Passe hier den Pfad zu deinem TM-Server noch an!
Mit STRG + X und ein Y mit ENTER könnt ihr es wieder speichern und schließen.

Jetzt muss die Datei nur noch ausführbar gemacht werden.
Das geht recht flott mit:

chmod +x STARTEN.sh

Super! Nun ist der reine, “nackte” TM-Server einsatzbereit!
Per ./STARTEN.sh können wir den Server nun starten!
Soweit der Server eine Internetverbindung hat und die Ports freigeschaltet sind, sollten wir den Server nun im Spiel finden und beitreten können.

Geht nicht?
Schau in den Logs nach, was du falsch gemacht hast 😉
Sicher ist ein Pfad zum Server falsch gesetzt.

Geht?
Super!

8. Xaseco in einer Modifizierten Variante (für php7.X) installieren

Da Xaseco nicht mehr für php7 optimiert wurde, kann ich hier leider nicht den Tipp geben, auf die offizielle Version auf der Entwicklerseite zu laden. Stadtessen habe ich HIER eine angepasste Version von XAseco(1) hochgeladen.
Es ist das originale XAseco(1) in Version 1.1.6 mit Anpassungen im Code welche von Bueddel, Xymph, undef.de und reaby stammen.
Somit musst du nichts änder!
Ich habe die Modifikation erfolgreich mit php7.0, 7.1 und 7.2 getestet.

Was ist nun zu tun?
Lade dir meine Modifzierte Version von Xaseco auf dein Server.
Erstelle dazu auch passend einen extra Ordner im TMNF-Ordner

cd /home/gameserver/TMNF/
wget https://hoerli.net/wp-content/uploads/2019/04/xaseco_116.zip
unzip xaseco_116.zip

Nach dem Entpacken, müssen alle Daten aus dem Ordner “newinstall”, in den Hauptordner von xAseco kopiert / verschoben werden.
Lediglich die drei Dateien jfreu.config.php, rasp.settings.php und votes.config.php müssen in den Ordner “includes”.

Nun müssen wir einige Dateien editieren und mit Informationen befüllen:

adminops.xml
Hier können Admins und Operatoren direkt angelegt werden.
Einfach bei <admins> oder <operators> YOUR_XXXX_LOGIN durch dein Spielernamen oder der deiner Freunde ersetzen.
Du selbst kannst dich in der config.xml als SuperAdmin setzen. Damit hast du alle Rechte und bist keinem Untergeordnet. Du musst dich daher nicht als Admin oder Operator setzen.

<admins>
<tmlogin>Dein Spieler-Login</tmlogin>
</admins>

config.xml

<tmlogin>Dein Spieler-Login</tmlogin>

….

<tmserver>
    <login>SuperAdmin</login>
    <password>HIER-DAS-PASSWORT-DER-TM-SERVER-CONFIG-EINFÜGEN</password>
    <ip>127.0.0.1</ip>
    <port>5004</port>
    <timeout>180</timeout>
  </tmserver>

dedimania.xml

<masterserver_account>
		<login>Dein-Server-Login</login>
		<password>Dein-Server-Passwort</password>
		<nation>DEU</nation>
	</masterserver_account>

localdatabase.xml

<mysql_server>localhost</mysql_server>
	<mysql_login>Dein-MySQL-User</mysql_login>
	<mysql_password>Dein-MySQL-Passwort</mysql_password>
	<mysql_database>Datenbankname</mysql_database>

Nun müssen wir die Datenbanken noch in MySQL rein laden.
Logge dich dazu mit dem passenden Account via phpMyAdmin ein, wähle anschließend Links die passende Datenbank aus und drücke oben auf „Importieren“.

Lade nun die Datenbanken aus dem Xaseco-ZIP-NAMEN-PAKET rein.
Diese befinden sich im Ordner /localdb des ZIP-Pakets.
Dies muss für alle drei Datenbanken nun gemacht werden.

Zum Schluss müssen wir nur noch die Startdateien von Xaseco anpassen und ausführbar machen.
Wir müssen den Pfad zur Installation anpassen:

#!/bin/sh
cd /home/gameserver/TMNF/xaseco
php aseco.php TMN &lt;/dev/null &gt;aseco.log 2&gt;&amp;1 &amp;
echo $!
chmod +x Aseco.sh
chmod +x AsecoF.sh

Führen wir nun ./Aseco.sh aus, sollte Xaseco starten und auf dem Server erscheinen!

Es kommt nichts?
Fehler gemacht! Die Logs helfen hier bei der Fehlersuche.
Geht?
Super!

9. AdminServ installieren

AdminServ ist ein kostenloses Tool, mit welchen man den TM-Server bequem per Webbrowser steuern kann.
Mittlerweile wurde auch dies von Chris92 etwas angepasst und ein paar Sicherheitsprobleme gefixt.

Dazu wechseln wir in den html-Ordner von nginx und erstellen (wenn erwünscht) noch einen unterordner.

cd /var/www/html

Anschließend laden wir uns das ZIP-Archiv HIER von GitHub herunter / direkt auf den Server und entpacken es.

wget https://github.com/Chris92de/AdminServ/releases/download/v2.1.1-1/AdminServ_v2.1.1.zip
unzip AdminServ_v2.1.1.zip

Hinweis: Es gibt aktuell (01.2020) einen Bug, der uns zwingt, das Webinterface direkt ins Root-Verzeichnis zu entpacken. Unterordner (Bsp. https://deine-domain.de/tm2/interface) ist nicht möglich! Subdomain funktionieren aber (Bsp. https://tm2.deine-domain.de).

Nun gehen wir ein Ordner zurück und erteilen allen Daten und Ordnern im html-Ordner die Rechte des Webservers, damit alle Daten auch Ordnungsgemäß aufgerufen werden können.

cd ..
chown -R www-data:www-data html/

Ist alles entpackt, können wir das ZIP-Archiv auch wieder löschen, das brauchen wir nicht mehr.

rm AdminServ_v2.1.1.zip

Nun müssen wir noch ein paar Berechtigungen setzen, damit AdminServ arbeiten kann:

chmod -R 777 logs/
chmod -R 666 config/adminlevel.cfg.php
chmod -R 666 config/servers.cfg.php
chmod -R 666 config/adminserv.cfg.php

Nun müssen wir noch zwei Ordner anlegen, damit AdminServ dort Daten ablegen kann.
Einmal den Ordner AdminServ im Config-Ordner des TM-Servers und anschließend den Ordner ServerOptions im AdminServ-Ordner.

mkdir /home/gameserver/TMNF/tm-server/GameData/Config/AdminServ
mkdir /home/gameserver/TMNF/tm-server/GameData/Config/AdminServ/ServerOptions

Da die Webseite per www-data-Benutzer im Normalfall aufgerufen wird, müssen wir dem noch passende Rechte vergeben.

chown -R www-data:www-data /home/gameserver/TMNF/tm-server/GameData/Config/AdminServ

Nun muss noch alles beschreibbar gemacht werden:

chmod 777 -R /home/gameserver/TMNF/tm-server/GameData/Config/

Habt ihr die Berechtigungen nicht korrekt verteilt, wird AdminServ direkt eine Fehlermeldung Oben in der Mitte anzeigen.

Anschließend können wir AdminServ über die IP oder Domain im Webbrowser aufrufen.

Wir sollen nun ein Passwort für AdminServ vergeben. Mit diesem Passwort sichern wir AdminServ an sich ab. Es hat nichts mit dem TM-Server oder SQL-Server zu tun! Nur mit diesem Passwort können wir später neue Server zu AdminServ hinzufügen.
Legt also ein sicheres Passwort an.

Ist ein sicheres Passwort vergeben, werden wir gleich gebeten ein Server hinzuzufügen.
Gebt hier die Infos an, die verlangt werden. Notwendige Daten entnehmt ihr aus der TM-Server Dedicated CFG-Datei.
Soweit alle Infos eingetragen wurden, drückt auf SAVE.

Die einzelnen Funktionen von AdminServ werde ich hier nicht erklären. Sie sind recht Selbsterklärend und es gibt auch mehrere Sprachen zur Auswahl. Ihr solltet also damit selbst zurrecht kommen.

10. OPTIONAL: Abschotten des TM-Servers mit einer Firewall

Um den gesamten Server zu schützen, ist eine Firewall empfehlenswert.
Wir nutzen hierfür ufw. Eine sehr einfach zu bedienende Firewall, welche unsere Anforderungen erfüllt.

apt install ufw

Folgende Regeln sollten wir nun hinzufügen, damit wir zum einen weiterhin auf den Server kommen und der TM-Server im Internet verfügbar ist:

ufw allow ssh 'ssh'
ufw allow 22/any comment 'ssh'
ufw allow 80/any comment 'http'
ufw allow 443/any comment 'https'
ufw allow 2354/any comment 'tm-server'
ufw allow 3454/any comment 'tm-server'
ufw allow 5004/any comment 'tm-server'
ufw enable

ACHTUNG: Ändere ggf. die Ports auf deine Werte ab!!! Sind diese falsch definiert, bist du unter Umständen gleich von deinem Server ausgesperrt!


Alles soweit geklappt?
Dein TM-Server ist mit XAseco(1) online und du kannst ihn via AdminServ administrieren?
Dann viel Spaß beim zocken!
Du hast nun erfolgreich den TM-Server installiert!
Fühl dich gut und brich ein paar Dedis!

Damit sind wir auch am Ende des Tutorials angelangt.
Du solltest du einen TrackMania Nations Forever bzw. United Forever Server betreiben können.
Ich wünsche dir nun viel Spaß damit 🙂

Du willst noch was gutes tun?
Join doch einen meiner Server und hinterlasse ein paar Coppers!


Noch ein paar Fragen die eventuell hier geklärt werden können:

Brauche ich die in Schritt 0 angegebenen Programme?
Nicht alle. Ich empfehle diese aber, da man damit einen guten Überblick über den Server hat und sie leicht zu bedienen sind. Jeder „gute“ Server hat diese in der Regel installiert 😉

Muss ich nginx nutzen?
Wie in dem Punkt erklärt, ist dies meine Empfehlung. Er ist schnell, nicht so Resourcenhungrig wie andere Webserver und mehr oder weniger leicht zu bedienen.

PhpMyAdmin spuckt viele rote Fehlermeldungen aus, was tun?
Frag eine Suchmaschine des Vertrauens. Diese Meldungen kann man unterdrücken.

Muss ich Let‘s Encrypt nutzen?
Wie beschrieben sollte man den Server mit SSL absichern, soweit dieser im Internet zur Verfügung steht. Mit einem Zertifikat kann man die doofen Browsermeldungen ausblenden. Du hast also nur Vorteile damit.
Steht der Server bei dir Zuhause hinter einem Router und Firewall, brauchst du das in der Regel nicht. Du solltest aber den Webserver nicht im Internet freigeben!

Der Dedicated Server startet nicht, was tun?
Es gibt Logs! Darin steht meist der Fehler und in welcher Datei + Zeile er drin ist.
Die Logs sind hier zu finden: …/tm-server/Logs/
Übliche Probleme sind: Pfad falsch angegeben, Ports bereits belegt, Zugangsdaten (TM-Account) falsch.

Xaseco möchte nicht auf dem Server erscheinen, was tun?
Auch bei Xaseco gibt es Logs. Diese sind direkt im xaseco-Ordner zu finden. Auch dort steht drin, in welcher Datei und in welcher Zeile der Fehler ist.
Übliche Fehler hier sind: Falsche Zugangsdaten für den TM-Server oder SQL-Server, falsche Pfade in der Startdatei oder gar die Originale Version von Xaseco und nicht meine modifizierte.

Kann ich Xaseco mit Plugins ausstatten?
Ja! Teste was geht. Mache Plugins können nicht mehr funktionieren. Verwendung auf eigene Gefahr!

Welche Ports muss ich minimum freigeben, damit nur der TM-Server von außen erreichbar ist?
Nur die Ports aus der TM-Server-Config. Also z.B. 2354, 3454 und 5004. Du brauchst kein Webserver (80, 443) oder SSH (22) freigeben.

XAseco automatisch neu starten lassen, wenn es abgestürzt ist?
Ich habe eine Anleitung inkl. passendem Script erstellt. Das findest du HIER!


Update 02.01.2020

Anleitung um ein paar informative Sätze erweitert 🙂

22 Kommentare

  1. Moin! Danke für dieses wirklich verständliche Tutorial. Ich habe es nicht für TM, sondern nur für MySQL genutzt, da es super Kommandozeilenbeispiele hat und einfacher als sämtliche andere Dokumentationen ist. Top.

    • Das freut mich zu hören 🙂
      Interesannt, das man die Anleitung auch für eine reine Installation eines MySQL-Servers findet.

  2. malte hannover

    [07/08,15:53:11] Connection established successfully !
    [07/08,15:53:11] [LocalDB] Load config file [localdatabase.xml]
    [07/08,15:53:11] [LocalDB] Try to connect to MySQL server on ‘localhost’ with database ‘tmserverdb’
    PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /home/tm/xx/plugins/plugin.localdatabase.php:71
    Stack trace:
    #0 /home/tm/xx/aseco.php(1248): ldb_connect(Object(Aseco), NULL)
    #1 /home/tm/xx/aseco.php(731): Aseco->releaseEvent(‘onStartup’, NULL)
    #2 /home/tm/xx/aseco.php(2561): Aseco->run(‘config.xml’)
    #3 {main}
    thrown in /home/tm/xx/plugins/plugin.localdatabase.php on line 71

    • Einfach den Fehler zu senden ist nicht wirkloch hilfreich.
      Sieht aber auf den ersten Blick danach aus, als ob dir der php-Fix fehlt.
      Mal ne Info über die eingesetzte php-Veraion, wäre auch nicht schlecht.

  3. malte hannover

    ich habe das Tutorial benutzt und php 7.2 instaliert mit apt install php-fpm php-mysql php-gd php-xml php-curl php-zip -y

    php -v gibt PHP 7.0.33-0+deb9u8 (cli) (built: Jul 5 2020 06:34:50) ( NTS )
    aus ich habe auch die modifizierte xaseco version von der webseite genommen. ich weiß ehrlich gesagt keinen rat mehr

    • Du hast zum einen schon mal nicht php7.2 installiert, wenn dir php -v php7.0 ausgibt.
      Da ist schon mal was komplett daneben gegangen.
      Am besten das ganze noch einmal durchspielen.
      Da die Tools komplett outdated sind, gebe ich keine Garantie das es auf jedem Server zu 100% funktioniert.

      Für den XAseco-“Fix” habe ich hier eine extra Seite mal erstellt: https://hoerli.net/xaseco1-xaseco2-php7-x-fix/
      Vielleicht hilft sie weiter. Ich habe dort auch weiterführende Links, zu den Foren mit hilfreichen Tipps & Tricks zum Fix.

  4. Eine Anleitung für Windows wäre super, wo man Trackmania-Server 2020 der Rekordzeichen speichern kann, aufsetzt.

  5. Hallo, ich habe alles soweit erfolgreich hinbekommen. Nur mein Server lässt sich nur per Suchfunktionen finden. Auch wenn ich mit 5 Freunden drauf bin, die alle den Server nur per Suche gefunden haben, taucht er für alle anderen nicht unter Live auf. Woran liegt das? So joined niemand nach.

    • Vermutlich spinnt der “Serverbrowser”.
      Soweit in der Serverconfig angegeben wurde, das der Server öffentlich ist (ist eine Standardeinstellung), sollte er im Serverbrowser auftauchen.
      Das kann mal vorkommen. Am besten einfach den Server eine weile laufen lassen. Irgendwann taucht er auf.

  6. hey, weißt du ob es eine funktionierende fast version für php7,3 gibt?

  7. Grüße,

    erstmal ein dickes Lob für deine Seite und alle Mühen die damit einhergehen.
    Ich habe einen TMNF Server für unsere Kids und deren Freunde aufgesetzt.
    Server läuft top, jedoch möchte xaseco nicht.
    Es kommt immer dass kein Masteradmin eingetragen sei obwohl dies der Fall ist.
    Eventuell hast du ja eine Idee.

    code:




    <!– format:
    YOUR_MASTERADMIN_LOGIN YOUR_MASTERADMIN_IP
    –>
    home_server_sagit

    MfG und ein angenehmes Wochenende

  8. Hallo Hoerli, ich möchte mich sehr für deine Mühe bei dir bedanken!! Ich habe mich gestern Abend nun hingesetzt und ein Script geschrieben, welches den Server fast automatisch aufsetzt und konfiguriert. Die Zip Dateien habe ich leider nicht alle herbekommen, aber es gab noch ein paar andere Quellen. VIELEN DANK! Du hast zwei weitere Menschen sehr glücklich gemacht!
    Getestet und erfolgreich umgesetzt auf einem Linux Ubuntu 20.04 mit PHP7.4, einem im Netzwerk befindlichen MySQL Server und einem Apache2 Webserver (Ich komme mit NGINX leider nicht klar). Für die SSL Verbindung habe ich einen NGINX ProxyReverse hier stehen. Viele Grüße aus BaWü! 🙂 Patrick

  9. Erstmal danke für das tolle Howto! Ich habe soweit alles installiert gekriegt und der Server läuft. nur beim Adminserv scheitere ich. Egal was ich beim Serverpaswort eingebe, er sagt immer falsches Passwort. Ich habe das Kennwort aus der dedicated Konfiguration kopiert. Adminserv wird ja anscheinend länger nicht mehr weiterentwickelt. Sollte das überhaupt noch funktionieren? Gibt es einen Alternative?

    • Hi!
      Soweit die Anleitung befolgt wurde, sollte Adminserv funktionieren.
      Bedenke aber dabei, das nur noch php7.4 sauber unterstützt wird.
      Für TrackMania Nations / United Forever wird nichts mehr weiter entwickelt, da kann ich leider nichts tun, wenn etwas nicht mehr funktioniert 🙁

  10. Das Spiel hat ja auch schon einige Jahre auf dem Buckel, ist für mich aber immer noch besser als die aktuellen TM Versionen.
    PHP 7.4 war ein guter Tipp. Version angepasst und geht. Danke!

  11. Vielen Dank für dieses Tutorial!!

    Der Server steht und wenn ich meinen Server mit
    ” tmtp://#addfavourite?=xxx ”
    hinzufüge komme ich über die Favoriten auch rein.
    Über den Trackmania Server “Browser” erhalte jedoch den Fehler
    “Could not contact server. Connection to IP:2350” failed or disconnected from server (10061)

    Hast du eventuell einen Tipp woran dies liegen kann?

    • Spontan nicht. Aber schau mal über den Server-Log. Dort sollte dein Verbindungsaufbau zu sehen sein und weshalb er abgebrochen wurde.
      Meist tritt das Problem auf, wenn man den Server Zuhause betreibt und die öffentliche IP vom Provider geändert wurde.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.