Wer sich ernsthaft mit dem Betrieb eines dedicated Servers für Running with Rifles unter Linux beschäftigt, endet derzeit unweigerlich in einem Schreikrampf. Nicht nur, dass die Server-Dokumentation im Internet größtenteils veraltet ist, auch die Umsetzung des Server-Konzeptes mit Binaries & PHP (ja, PHP!) verpackt in einem Dschungel voller Config-Files… endet mit Kopfschütteln und Verzweiflung.
Aber wir Linux`er geben nicht auf und deshalb findest du hier eine möglichst einfache Anleitung für deinen eigenen RwR dedicated Server. Ich gehe davon aus, dass du wie ich tmux benutzt um die beiden Server-Skripte parallel starten zu können.
In diesem Tutorial hier setzen wir ein Debian Wheezy (Stable) 64Bit ein. Auf den Ubuntu Server ab 14.04 gehe ich weiter unten explizit darauf ein. Am Ende dieses Tutorials befindet sich dein Server in dieser offiziellen Serverliste, das ist also unser Ziel dieser Übung.
Zusammenfassend gesagt, besteht die Installation aus fünf Schritten:
- Download der aktuellen Server-Files über das offizielle SteamCMD-Repository
- Installation der 32-Bit Linux-Libraries und Start ./launch_server Script
- Installation von PHP und
- Starten der beiden Instanzen (Binär & PHP)
- Config-Files anpassen; wir kopieren & editieren
- Weiterführende Links
Ganz unten erkläre ich noch, wie der Server kinderleicht gepatcht werden kann.
Vertrödeln wir also keine Zeit, los gehts.
1. Download & Installation der Server-Files
Wir erstellen einen neuen User rwr-server und benutzen diesen für alles, was nicht Root benötigt. Download von SteamCMD und entpacken:
apt-get install lib32gcc1 adduser rwr-server
su - rwr-server wget http://media.steampowered.com/client/steamcmd_linux.tar.gz tar xvzf steamcmd_linux.tar.gz
Jetzt starten wir ./steamcmd.sh und loggen uns bei Steam im Text-Modus ein. Im Falle von RwR ist das Spiel und der Server in der gleichen ID 270150.
./steamcmd.sh login username passwort app_update 270150 STRG+C
2. Server 32-Bit Architektur nachinstallieren
Besitzer eines 32Bit Linux-Servers dürfen diesen Schritt überspringen.
In diesem Schritt lädt es zwar Unmengen an i386 Paketen herunter, jedoch gefährdet es dein System i.d.R. nicht, denn die 64Bit Pakete sind weiterhin vorhanden und vom System als default referenziert. Dies muss als Root gemacht werden, also verlassen wir rwr-server mit exit, danach:
dpkg --add-architecture i386 apt-get update apt-get install ia32-libs
Auf Ubuntu 14.04+ gibt es ia32-libs nicht. Ubuntu Admins scrollen bitte nach ganz unten für die Ubuntu-Lösung an dieser Stelle. Jetzt kannst du vorab einmal testen, ob noch Fehlermeldungen beim ./launch_server erscheinen. Bitte als rwr-server , keinesfalls als Root:
su - rwr-server cd ~/Steam/steamapps/common/RunningWithRifles ./launch_server
Das war aber noch nicht alles. Wir brauchen einen zweiten Prozess der mit PHP läuft um innerhalb von ./launch_server eine echte Spielmodus-Instanz zu starten.
3. Installation PHP, starten des 2. Prozesses PHP
Jetzt wird es heikel. Du musst abwägen ob du auf deinem Server eine komplette PHP-Installation haben möchtest. Wenn du auf Debian nämlich einfach blind apt-get install php5 ausführst, installiert es dir automatisch einen Apache mit. Damit wäre dann unter deiner IP:Port80 (http://IP/) eine hässliche „It Works!“ Default-Webseite online und damit einhergehend das erhöhte Risiko auf Sicherheitslücken.
Aber irgendwo her müssen wir PHP bekommen, der RwR-Server setzt dies voraus. Das verrückte dabei ist, dass die Entwickler im binären File ./launch_php einen hardkodierten Link auf ein altes PHP 5.3 32Bit mit Pfad /usr/lib/php5/20090626+lfs/ auf deinem Server erwarten. Das ist einmal kompletter Mist, wir werden auf unserem Server in diesem Ordner ganz sicher kein PHP haben.
Auf meinem Spiele-Server befand sich sowieso bereits PHP für eine andere Webseite. Wenn das bei dir auch so ist, kannst du mit php –version herausfinden welches PHP installiert ist:
php --version
PHP 5.4.39-0+deb7u2 (cli) (built: Mar 25 2015 08:33:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
Damit hast du auch bereits alles was du brauchst. Wenn du tatsächlich PHP mit der automatischen Hammer-Methode installieren willst, überprüfe was du machst und sei dir sicher, dass du auf diesem Server keine allfällig anderen Webseiten stören wirst!
apt-get install php5 #Überlege, bevor du es eintippst!
Jetzt sind wir Ready, um auch den 2. Prozess mittels PHP zu starten.
4. Starten der beiden Instanzen (Binär & PHP)
Gleich haben wir es geschafft.
Wir starten
a) die Server Runtime-Files mit ./launch_server und
b) die Spiel-Instanz mit Modus „Invasion“ (oder nach Wahl, durchsuche den Ordner nach anderen Start-Scripten) auf der rechten Seite.
Zuerst:
./launch_server
Danach parallel dazu:
php media/packages/vanilla/scripts/start_invasion.php debug_output
Wie gesagt, ich benutze tmux um die Session zu splitten und wenn ich mein Terminal schliesse, bleibt dank tmux der Server immer noch online. Siehe Screenshot zur Erkärung:
Sobald alles geklappt hat, schaut es so aus:
Gratuliere, dein Server läuft. Wohl noch mit Default-Namen und ohne eigene Einstellungen, aber da habe ich dir auch schon eine Beispiel-Vorlage
5. Config-Files anpassen
Konfigurationsdateien hat Running with Rifles wie Sand am Meer, eindeutig zu viele wenn du mich fragst. Ich möchte dir anhand eines Invasion-Spielemodus Server’s zeigen, wie deine Config ausschauen könnte.
Wir gehen ins Verzeichnis mit den PHP-Config Dateien und kopieren eine Example-Datei zu einer echten Version.
cd ~/Steam/steamapps/common/RunningWithRifles cd media/packages/vanilla/scripts/ cp server_settings_invasion.example.php server_settings_invasion.php
Jetzt editieren wir die neue Datei server_settings_invasion.php nach unseren Wünschen. Ich benutze dazu vi/vim, für Linux-Anfänger empfehle ich den Editor nano.
nano server_settings_invasion.php
Mein Config-Beispiel in server_settings_invasion.php:
<?php // invasion server command function get_start_server_command() { // CUSTOMIZE YOUR SERVER SETTINGS HERE // $command = ""; $command = "<command class='start_server' " . " server_name='Mein erster Linux-Server' " . " server_port='27050' ". " comment='Persistent Profiles, COOP Invasion. Server by Games4Linux.de' ". " url='http://Games4Linux.de' ". " register_in_serverlist='1' ". " mode='COOP'". " max_players='64'". " persistency='forever'>". " <client_faction id='0' />". "</command>"; return $command; } ?>
Fertig.
Weiterführende Links
- SteamCMD Wiki
- Beispiel Konfigurationen Invasion, Classic, PvP, Deathmatch
- Eine andere unbrauchbare Anleitung aus dem 2012 für Ubuntu
Running with Rifles Server Updaten:
./steamcmd.sh login username passwort app_update 270150 STRG+C
Starte jetzt, wie in Schritt 4) erklärt, den gepatchten Server erneut.
GeoLocation in der Serverliste:
Damit dein Server nicht im Land „Unknown“ sich befindet, muss im Ordner ~/Steam/steamapps/common/RunningWithRifles die Datei geoinfo.xml angelegt werden:
cd ~/Steam/steamapps/common/RunningWithRifles touch geoinfo.xml
In diese Datei muss folgender Inhalt:
<?xml version="1.0"?> <geoinfo> <location value="Germany"/> </geoinfo>
Derzeit kann das Land noch geändert werden, auch fiktive Namen sind möglich.
Fehlerbehebung:
Da Ubuntu Server 14.04+ kein Metapaket ia32-libs anbietet, müssen die nötigen 32-Bit Libraries für ./launch_server von Hand installiert werden:
sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libx11-6:i386 libxext6:i386
$ ~/Steam/steamapps/common/RunningWithRifles$ ./launch_server
RUNNING WITH RIFLES (c) Modulaatio Games 2015, 1.01, server build
Loading.
Loading..
Loading…
Loading….
Loading
Loading.
Loading..
Loading…
Loading….
Loading
Loading.
Loading..
Loading…
Loading….
Loading
Loading.
Loading..
Loading…
Loading….
Game loaded
>Segmentation fault
$
Lösung: Möglicherweise ist der UDP Port mit einem hängenden PHP Prozess bereits blockiert. Mit netstat -anp kannst du die PID des betreffenden Ports herausfinden, und dann killen:
netstat -anp | grep 1238 #Die Port-Nummer angeben, die dein Server i.d.R. benutzt kill -9 PID #Die PID Zahl ganz rechts, in der Ausgabe der vorherigen netstat-Zeile
/home/rwr-server/Steam/steamapps/common/RunningWithRifles/rwr_server: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
Lösung: Du hast den Schritt „2. Server 32-Bit kompatibel machen“ nicht, oder nicht vollständig durchgeführt. Der Server will nämlich libX121.so.6 (und viele weitere Libs!) als 32-Bit (i386) Version haben.
Super Arbeit elysium! 🙂
Hab es auf unserer offiziellen wiki gelinkt.
Gruss
Jack
Hey JackMayol,
danke vielmals, da hat sich die Mühe doch gelohnt 🙂
Habe die Anleitung für Ubuntu Server 14.04+ erweitert, mit Ubuntu Server müssen zwei i386 Libaries von Hand installiert werden.
Hi,
ich hatte das Problem, dass ich für meine Kills keine XP bekommen habe. Nach einiger Recherche mit den Jungs von RWR haben wir raus gefunden, dass es am deutschen PHP lag. Die „.“ Notation wurde nicht richtig an den Server weiter gegeben und dadurch war die Eingabe ungültig. Mit dem vorgegebenen launch_php funktioniert es aber ohne Probleme.
Nur zur Info.