Der vom Steam unabhängige Source Dedicated Server lässt sich für Linux und Windows bei Steampowered.com herunterladen. Es wird wie früher kein gültiger Steam-Account voraus gesetzt.
Voraussetzung um einen Server installieren zu können ist der direkte Zugriff auf die Konsole oder der Zugriff auf eine Shell über eine SSH-Verbindung auf den Host. Die wichtigen Grundbefehle unter Linux sollten bekannt sein, damit ein sicherer Umgang mit dem Server gewährleistet ist. Es ist davon absolut abzuraten den Server mit Root-Rechten einzurichten bzw. auch zu starten.
Um einen neuen Benutzer einrichten zu können, muss man mit „root“ eingeloggt sein. Mit dem folgenden Befehl erstellt man zuerst einen User, für den dann auch direkt ein Homeverzeichnis eingerichtet wird. Der 2. Befehl legt das Passwort für den User fest. Wird kein Passwort festgelegt, kann sich der neue User nicht einloggen.
useradd -m srcds passwd srcds
Es ist darauf zu achten, dass man bereits mit dem neuen User eingeloggt ist. Man kann sich entweder mit PuTTY neu verbinden oder mit dem Befehl su username
sich mit dem neu angelegten User umloggen. Um zu sehen mit welchen User man zur Zeit eingeloggt ist, kann man mit dem Befehl whoami
sehen.
Für die Übersicht kann man ein Verzeichnis für den Download und den Steam-Installer erstellen.
mkdir steam cd steam
Das Programm hldsupdatetool.bin kann mittels wget heruntergeladen werden. Das Programm wget ist nicht Bestandteil jeder Linux-Distribution. Unter Debian installiert man wget mittels apt-get install wget
wget http://storefront.steampowered.com/download/hldsupdatetool.bin
Das Programm hldsupdatetool.bin, welches den Steam-Installer beinhaltet, muss gestartet werden. Zuvor muss die Datei mit chmod u+x für den Besitzer ausführbar gemacht werden.
chmod u+x hldsupdatetool.bin ./hldsupdatetool.bin
Nachdem hldsupdatetool.bin ausgeführt wurde, muss yes bestätigt werden, damit der Installer, der steam heißt, entpackt wird.
Steam muss einmal gestartet werden, damit sich der Installer selber updatet. Der Installer hat nichts mit Steam unter Windows gemeinsam. Unter Linux ist es lediglich ein Kommandozeilen-Tool um Server zu installieren.
./steam
Treten nach dem Ausführen vom hldsupdatetool.bin Fehler1) auf, liegt es am fehlenden „uncompress“. Manche Distributionen haben es Standardmäßig nicht mit drin.
Folgender Befehl legt eine symbolische Verknüpfung Namens uncompress zu gunzip im gleichern Verzeichnis an:
ln -s $(which gunzip) $(dirname $(which gunzip))/uncompress
In seltenen Fällen hat der Hoster bei vorinstallierten 64-Bit Distribution die Bibliotheken für 32-Bit-Programme vergessen mit zu installieren. In diesem Fall lässt sich dann hldsupdatetool.bin
2) nicht ausführen. Unter Debian können mit folgendem Befehl die 32-Bit-Bibliotheken installiert werden:
apt-get install ia32-libs
Mithilfe des Steam-Installers können bestimmte Modifikationen per Kommandozeile bequem installiert und aktualisiert werden. Neben den offiziellen Modifikationen können auch Modifikationen von anderen Entwicklern eingerichtet werden. Der Download besteht immer aus der Engine und der zugehörigen Modifikationen. Bei dem „Source Dedicated Server“ ist man in der Lange mehrere Modifikationen nebeneinander zu installieren. Da Modifikationen für „Orange Box Engine“ in dem zusätzlichen Unterverzeichnis oranagebox
mit installiert werden, kann man diese auch in das gleiche Verzeichnis mit installieren.
Der Steam-Installer kann eine Liste vorhandener Spiele bzw. Modifikationen anzeigen. Der Befehl ./steam -command list
listet alle verfügbaren Modifikationen auf.
Um z.B. einen Server für CS:S im Verzeichnis css-public
im Homeverzeichnis anzulegen, sind folgende Schritte notwendig.
mkdir ~/css-public ./steam -command update -game "Counter-Strike Source" -dir ~/css-public/ -retry
Anmerkung: Das Tilde-Zeichen “~“ zeigt immer auf das Homeverzeichnis des zur Zeit eingeloggten Users. Man kann es auch weglassen, wenn man sich im Homeverzeichnis befindet.
Die Installation nimmt etwas Zeit in Anspruch. Nachdem die Installation beendet ist, kann der Server konfiguriert und gestartet werden.
Viele Anbieter stellen für ihre Modifikationen auch Dateien für Linux-Server zur Verfügung. Da es gegen die Lizenz verstößt, die Dateien vom SRCDS-Server so anzubieten, muss der Server zuerst mit dem Steam-Installer heruntergeladen werden. In den meisten Fällen reicht es aus die Modifikation Half-Life 2 Deathmatch „hl2mp“ zu verwenden, um den SRCDS herunterzuladen. Bei diesem Beispiel richten wir einen Server für „Eternal Silence“3) ein. Dieses Mod benötigt noch die alte „Source Engine“. Sollte eine andere Modifikation eingerichtet werden, die die „Orange Box Engine“ benötigt, muss mit dem Steam-Installer anstatt „hl2mp“ „tf“ 4) eingerichtet werden.
mkdir ~/eternal_silence cd ~/steam ./steam -command update -game "hl2mp" -dir ~/eternal_silence -retry
Durch diesen Befehl wird der SRCDS-Server mit der Modifikationen „Half-Life 2 Deathmatch“ heruntergeladen. Nach Beendigung, des Downloads, kann die Eternal Silence heruntergeladen werden und direkt in das passende Verzeichnis entpackt werden. Um die Übersicht zu behalten, wird noch das Verzeichnis download/mods
angelegt. Fehlt das Verzeichnis download
, wird es mit angelegt. Der Parameter -p sorgt für dieses Verhalten von mkdir
.
mkdir -p ~/download/mods cd ~/download/mods wget http://downloads.gbs-clan.de/hl2/mods/Eternal_Silence/3.x/Eternal_Silence_3_0_server.tar.gz tar -xzf Eternal_Silence_3_0_server.tar.gz -C ~/eternal_silence
Der Parameter -C ~/eternal_silence
entpackt den Inhalt des Archives nach ~/eternal_silence
. Es sollte sicher gestellt werden, dass das Verzeichnis der Modifikation am richtigen Ort entpackt wurde.
Es gibt verschiedene Wege den Server zu starten. Da die meisten Server mittels Fernzugriff gestartet werden, ist dafür zu sorgen, dass sich nicht beendet werden, wenn man die SSH-Verbindung schließt. Das sind die Fehler, die jeder Anfänger einmal gemacht hat.
Die Startparameter vom Server sind unter Linux und Windows fast identisch.
Anmerkung: Seit dem Update befindet sich CS:S im Unterverzeichnis orangebox
In dem Beispiel starten wir einen CS:S-Server mit der IP 123.123.123.123 auf dem Standard-Port 27015:
cd ~/css-public/orangebox ./srcds_run -game cstrike -maxplayers 10 -ip 123.123.123.123 -port 27015 -autoupdate -debug +map de_dust2
Die Fehlermeldungen sind zum Teil ganz normal und lassen sich nicht beseitigen. Wird das Fester jetzt geschlossen, die PuTTY-Session also beendet, schließt sich auch automatisch der Server, da er ein Kind-Prozess von der Shell ist, die geschlossen wird. Es gibt 2 Methoden dies zu verhindern.
Der Befehl nohup veranlasst andere Programme, die durch nohup gestartet worden sind, das Hangup-Signal der Konsole zu ignorieren. Mit dem Kaufmanns-Und am Ende der Zeile wird die Anwendung, in diesem Fall der Server, im Hintergrund gestartet.
Ein Beispiel:
nohup ./srcds_run -game cstrike -maxplayers 10 -ip 123.123.123.123 -port 27015 -autoupdate -debug +map de_dust2 2>&1 >/dev/null &
Screen ist ein Fenstermanager, der es erlaubt, erzeugte Fenster auch im Hintergrund nach Beendigung der SSH-Verbindung, laufen zu lassen. Die Fenster können mit dem screen-Befehl wieder geholt werden. Zu dem Befehl screen
gibt es im Internet eine Vielzahl an Anleitungen. Bei den meisten Distributionen muss es nachträglich installiert werden.
Ein Beispiel:
screen -mdS server1 ./srcds_run -game cstrike -maxplayers 10 -ip 123.123.123.123 -port 27015 -autoupdate -debug +map de_dust2
Es kann durchaus mal passieren, dass ein Server ausversehen zwei mal oder öfters gestartet wurde, ohne dass der Admin anfangs etwas bemerkt. Erst nachdem sich bestimmte Ports nicht mehr belegen lassen, fängt man an zu suchen. Ein sehr hilfreiches Tool ist lsof
. Es zeigt alle geöffneten Dateien und Verbindungen an. Ist z.B. mal ein Port durch einen Server belegt, kann man diesen bei bedarf auch beenden. In diesem Beispiel wurde der Server z.B. durch ein Missgeschick 2 mal gestartet. Da auch noch die Angabe vom Port im Startparameter vergessen wurde, läuft der gleiche Server jetzt auf Port 27015 und 27016. Wir möchten den Server, der auf Port 27016 lauscht, beenden.
Mit losf finden wir zuerst die PID des Server heraus:
lsof -i :27016
Der Befehl gibt uns folgendes aus:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME srcds_amd 27850 server 4u IPv4 4072257777 UDP *:27016 srcds_amd 27850 server 7u IPv4 4072257780 TCP xxxxxx.net:27016 (LISTEN)
Sollte lsof
nicht installiert sein kann man auch den Befehl netstat
verwenden.
netstat -nlp | grep 27016
Die Ausgabe sieht dann ungefähr so aus:
tcp 0 0 xx.xxx.xxx.xxx:27016 0.0.0.0:* LISTEN 31421/srcds_i486 udp 0 0 xx.xxx.xxx.xxx:27016 0.0.0.0:* 31421/srcds_i486
Unter bestimmten Umständen kann es aber passieren, dass die PIDs nicht alle angezeigt werden.
Nun wissen wir, um welchen Prozess es sich handelt, der den Port 27016 belegt. Da der Server durch das Script srcds_run gestartet wird, ist dies der Eltern-Prozess. Dieser Eltern-Prozess, in diesem Fall das Shell-Script srcds_run, sollte zuerst beendet werden, da es sonst den Server ggf. neustartet, wenn den Kind-Prozess beendet.
So lässt sich der Eltern-Prozess finden:
ps -o ppid 27850
Die Parameter -o
mit dem Wert ppid
gibt zu der gegeben PID den Eltern-Prozess5) aus.
Das sieht dann so aus:
PPID 28171
Jetzt beenden wir den Eltern-Prozess:
kill 28171
Dadurch, dass der Prozess beendet wird, wird dem Kind-Prozess automatisch der Eltern-Prozess mit der PID 1 zugewiesen. Auf jedem *NIX-System ist dies der INIT-Prozess.
Danach beenden wir den eigentlichen Prozess, welcher den Port belegt:
kill 27850
Zur Kontrolle kann man nochmals mittels lsof -i 27016
nachsehen, ob der Port weiterhin belegt ist.
Falls Updates der Source Engine oder der Modifikation erscheinen, müssen die Server meistens auch aktualisiert werden. In den seltensten Fällen können die Spieler auf einem veralteten Server spielen.
Um einen Server mit einer offiziellen Modifikation zu aktualisieren, wird der gleiche Befehl verwendet, der auch für die Installation des Servers, verwendet wurde. Bei Problemen kann auch noch der Parameter -veryfy_all verwendet werden. Es werden dann alle Dateien überprüft. Hier unser Beispiel:
./steam -command update -game "Counter-Strike Source" -dir ~/css-public/ -retry
Das Aktualisieren der Server, die Modifikationen von Drittherstellern nutzen, welche über den Steam-Installer nicht zu bekommen sind, muss das Update in zwei Schritten erfolgen.
./steam -command update -game "hl2mp" -dir ~/eternal_silence -retry
Unter Windows lässt sich der Server auch mit normalen Benutzerrechten starten. Wenn der Server per RDP-Verbindung auf einem Root-Server installiert werden soll, ist darauf zu achten nicht mit Administrator-Rechten zu arbeiten, auch wenn es einfacher ist mit dem Administrator zu arbeiten. Es sollte zuvor ein zusätzlicher Benutzer mit eingeschränkten Rechten eingerichtet werden. In dieser Anleitung wird nur die Installation unter Windows XP beschrieben.
Zusätzliche hinweise zu:
Auf steampowered.com kann das Setup-Tool für Windows heruntergeladen werden. Der Link ist in der Kategorie What is Steam
unten rechts (Windows HLDS Update Tool) zu finden (Direktlink). Nach dem Download kann hldsupdatetool.exe
gestartet und installiert werden. In unserem Beispiel installieren wird das Windows HLDS Update Tool
im Verzeichnis C:\Documents and Settings\sosi\Desktop\HLServer
. Nach der Installation, befindet das Tool sich bei uns auf dem Desktop. In dem Verzeichnis C:\Documents and Settings\sosi\Desktop\HLServer
befindet sich nach der Installation die Datei HldsUpdateTool.exe
. Das ist das Tool, mit dem die dedicated Server unter Windows installiert werden können. Es muss einmal wie bei der Linux-Version gestartet werden, damit sich das Tool selber updatet.
Der Steam-Installer kann eine Liste vorhandener Spiele bzw. Modifikationen anzeigen. Der Befehl HldsUpdateTool.exe -command list
listet alle verfügbaren Modifikationen auf.
Um z.B. einen Server für HL2-DM im Verzeichnis C:\Documents and Settings\sosi\Desktop\server1
anzulegen, sind folgende Schritte notwendig.
Start > Ausführen > cmd > ok
c: cd C:\Documents and Settings\sosi\Desktop\ md server1 cd HLServer hldsupdatetool.exe -command update -game hl2mp -dir "C:\Documents and Settings\sosi\Desktop\server1" -retry
Anmerkung: Das Verzeichnis beinhaltet in unserem Beispiel Leerzeichen. Deswegen muss es in Anführungszeichen gesetzt werden.
Die Installation nimmt etwas Zeit in Anspruch. Nachdem die Installation beendet ist, kann der Server konfiguriert und gestartet werden.
Im Gegensatz zu Linux-Server ist für Windows-Server sichergestellt, dass es Modifikation die Dateien für den Server enthält. Das Aktualisieren der Server, die Modifikationen von Drittherstellern nutzen, welche über den Steam-Installer nicht zu bekommen sind, muss das Update in zwei Schritten erfolgen.
cd C:\Documents and Settings\sosi\Desktop\HLServer hldsupdatetool.exe -command update -game "hl2mp" -dir "C:\Documents and Settings\sosi\Desktop\server1" -retry
Die Startparameter vom Server sind unter Linux und Windows fast identisch.
In dem Beispiel starten wir einen HL2DM-Server mit der IP 123.123.123.123 auf dem Standard-Port 27015:
cd C:\Documents and Settings\sosi\Desktop\server1 srcds.exe -console -game hl2mp -maxplayers 10 -ip 123.123.123.123 -port 27015 -debug +map dm_lockdown
Die Fehlermeldungen sind zum Teil ganz normal und lassen sich nicht beseitigen. Das neue Serverfenster darf nicht geschlossen werden, da sonst der Server beendet wird. Es kann jedoch minimiert werden.
Falls Updates der Source Engine oder der Modifikation erscheinen, müssen die Server meistens auch aktualisiert werden. In den seltensten Fällen können die Spieler auf einem veralteten Server spielen.
Um einen Server mit einer offiziellen Modifikation zu aktualisieren, wird der gleiche Befehl verwendet, der auch für die Installation des Servers, verwendet wurde. Bei Problemen kann auch noch der Parameter -veryfy_all verwendet werden. Es werden dann alle Dateien überprüft. Hier unser Beispiel:
c: cd C:\Documents and Settings\sosi\Desktop\HLServer\ hldsupdatetool.exe -command update -game hl2mp -dir "C:\Documents and Settings\sosi\Desktop\server1" -retry
Das Aktualisieren der Server, die Modifikationen von Drittherstellern nutzen, welche über den Steam-Installer nicht zu bekommen sind, muss das Update in zwei Schritten erfolgen.
c: cd C:\Documents and Settings\sosi\Desktop\HLServer\ hldsupdatetool.exe -command update -game hl2mp -dir "C:\Documents and Settings\sosi\Desktop\server1" -retry
Da es ein Vielzahl von Modifikationen gibt kann man zur Konfiguration keine einheitliche klare Aussage treffen. Dennoch gibt es bei dem „Source Dedictad Server“ einige Techniken, die bei jedem Server gleich sind. Die ausführbaren Konfigurationsdateien befinden sich in bei der Source Engine 2007
in ./$mod/cfg/
und bei der Orange Box Engine
in ./orangebox/$mod/cfg/
. Mit $mod ist das Verzeichnis der Modifikation gemeint. Die Zeichenfolge ./
gibt das Installationsverzeichnis des Servers an.
Auflistung wichtiger Dateien:
Datei | Speicherort | Beschreibung |
---|---|---|
valve.rc | $mod/cfg/ | Wird nach dem Start des Servers ausgeführt. Der Befehl exec autoexec.cfg führt die Datei autoexec.cfg aus. Der Befehl stuffcmds führt die Konsolen-Variablen und Befehle aus, die von der Kommandozeile durch das Pluszeichen übergeben worden sind. Die meisten Admins ändern nichts an dieser Datei, es ist aber dennoch gut zu wissen, dass es die erste Konfigdatei ist, die ausgeführt wird |
autoexec.cfg | $mod/cfg/ | Wird vor dem Laden der ersten Map ausgeführt. Da es ein paar Konsolen-Variablen gibt, die erst Effekt nach einem Mapchange erzielen, ist es angebracht diese in der autoexec.cfg festzulegen. |
server.cfg | $mod/cfg/ | Nachdem eine Map geladen wurde, wird die server.cfg ausgfeührt. So lassen sich Konsolen-Variablen auf einen selber vorgegeben Wert ändern. Es kann durch die Konsolen-Variablen servercfgfile definiert werden, welche Konfig-Datei nach einem Mapchange ausgeführt wird. |
mapname.cfg | $mod/maps/cfg/ | Es lassen sich so für die unterschiedlichen Maps bestimmte Konfigurationen ausführen. Die Konfiguration für jede Map wird erst nach der server.cfg ausgeführt. So lassen sich z.B. Konsolen-Variablen, die zuvor in der server.cfg festgelegt wurden, überschreiben. Bei de_dust2 wird z.B. die Konfigurationsdatei $mod/maps/cfg/de_dust2.cfg geladen. |
motd.txt | $mod/ | Mit dieser Datei wird die „Message of the day“ festgelegt. Das ist das Fenster, dass nach dem Verbinden auf einen Server angezeigt wird. Die Anzeige geschieht In-Game mit dem Internet Explorer. Der Inhalt der motd.txt ist HTML und lässt sich beleibig verändern. Bilder können nachgeladen werden oder Umleitungen auf externen Webspace können stattfinden. |
maplist.txt | $mod/ | Verschiedene Addons nutzen diese Datei, um die Maps in einem Menü anzeigen zu können. Der reine SRCDS braucht diese Datei nicht. In der Datei werden die verfügbaren Maps ohne Dateierweiterung untereinander aufgelistet |
mapcycle.txt | $mod/ | Damit lässt sich eine bestimmte Reihenfolge festlegen, in der die Maps geladen werden. Das Format ist das gleiche wie bei der Datei maplist.txt . Das Verhalten ohne das Eingreifen von Addons ist recht einfach zu erklären. Läuft eine bestimmte Map, die in der mapcycle.txt steht, wird die nächste Map der darunterliegende Eintrag genommen. Ist die Schreibweise falsch oder fehlt der Eintrag, wird die erste Map aus dem Mapcycle genommen. Die Konsolen-Variablen mapcyclefile definiert welche Datei für den Mapcycle genommen wird. Standardmäßig ist es die Datei mapcycle.txt |
Es können auch andere Konfigurationsdateien in der server.cfg
oder autoexec.cfg
durch den Befehl exec
geladen werden. Diese müssen sich aber im Verzeichnis $mod/cfg/
befinden. Z.B. führt der Befehl exec sourceTV.cfg
die Konfigurationsdatei $mod/cfg/sourceTV.cfg
aus. In Konfigurationsdateien können Konsolen-Variablen und Befehle stehen. Eine neue Zeile leitet den nächsten Befehl ein. Das Semikolon ermöglicht es mehrere Befehle in einer Zeile zu schreiben. Die Argumente einer Konsolen-Variablen oder eines Befehls werden mit einem Leerzeichen getrennt. So muss z.B. der Servername in Anführungszeichen eingeschlossen werden, damit auch Leerzeichen verwendet werden können. Kommentare werden mit zwei Schrägstrichen eingeleitet.
Ein Beispiel für eine autoexec.cfg
:
//Sporadischer Eintrag. sv_pure 0 //Es können hier z.B. noch Scripte für Eventscripts geladen werden.
Ein Beispiel für eine server.cfg
:
//Hier wird der Servername festgelegt hostname "Server von sourceserver.info" //Legt das Rcon-Passwort fest, dass zum Fernsteuern benötigt wird. rcon_password "test" //Führt die Datei $mod/cfg/netsettings.cfg aus. Dient nur als Beispiel. exec netsettings.cfg
Ein Beispiel für den Mapcycle:
de_dust2 de_dust de_aztec
Ein Beispiel für die „Nachricht des Tages“:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Cstrike MOTD</title> <style type="text/css"> pre { font-family:Verdana,Tahoma; color:#FFB000; } body { background:#000000; margin-left:8px; margin-top:0px; } a { text-decoration: underline; } a:link { color: #FFFFFF; } a:visited { color: #FFFFFF; } a:active { color: #FFFFFF; } a:hover { color: #FFFFFF; text-decoration: underline; } </style> </head> <body scroll="no"> <pre> Willkommen auf unseren Gameserver <a href="http://sourceserver.info">Besucht mal sourceserver.info</a> </pre> </body> </html>
Für die einfachere Administration des Servers und für Änderungen des Gameplays, können Addons bzw. Plugins installiert werden. Das Spektrum reicht von einfachen Scripts bis hin zu komplexen Plugins mit einer Datenbankanbindung und einer Vielzahl von Funktionen.
Im Artikel Fastdownload sind die weiteren nötigen Schritte beschrieben.