Skip to content
2

Left 4 Dead 1 + 2 Linux Server Tutorial

Dieses Tutorial beschreibt, wie man Left 4 Dead und Left 4 Dead 2 Server unter Linux installiert, zum laufen bringt, und im Betrieb hält. Ich habe keine zwei einzelnen Tutorials geschrieben, weil Left 4 Dead und Left 4 Dead 2 im Serverbetrieb weitestgehend identisch sind und sich nur an sehr wenigen Punkten unterscheiden.

Portforwarding

Wenn der Rechner zu Hause und, oder hinter einer Firewall steht müssen folgende Ports geforwarded werden:

  • UDP 27000 bis 27015 (Game client traffic)
  • UDP 27015 bis 27030 (Normalerweise Matchmaking und STV)
  • TCP 27014 bis 27050 (Steam Downloads)
  • UDP 4380
  • TCP 27015 (SRCDS Rcon Port)

System vorbereiten

Als erstes sollte der Server auf den neuesten Stand gebracht werden.
Bei Debian macht man dies mit:

apt-get update && apt-get upgrade

Damit der Server weiterläuft, auch wenn du dich ausloggst, benötigst du das Programm Screen. Installiere es also mit dem user root.
Der Debian Befehl:

apt-get install screen

Wenn du über eine 64bit System verfügst, dann benötigst du noch die Unterstützung für 32bit Programme, damit du den Counter-Strike Source Server starten kannst.
Für Debian geht dies mit:

apt-get install ia32-libs

Installation des Servers

Am besten legt ihr einen eigenen User für den Server an. Dies macht ihr indem ihr als root

adduser left4dead

eingebt und im folgenden Dialog ein Password für den User eingebt. Es ist eine extrem schlechte Idee Programme mit dem user Root auszuführen. Also verwerft den Gedanken gleich wieder.
Mit dem neuen User logt ihr euch nun ein und erstellt erst einmal das zukünftige Serververzeichnis. Der Name ist egal ich benutze beispielhaft l4d für Left 4 Dead und l4d2 für Left 4 Dead 2:

mkdir l4d

Nun in das erstellte Verzeichnis wechseln, das Steamupdatetool herunterladen und ausführbar machen:

cd l4d
wget http://storefront.steampowered.com/download/hldsupdatetool.bin
chmod +x hldsupdatetool.bin

Als nächstes das Tool starten und den Lizensbedingungen zustimmen:

./hldsupdatetool.bin

Es wird die Datei „steam“ erstellt, die wir für das Downloaden und Updaten des Servers benötigen. Mit ihr installieren wir jetzt den Left 4 Dead Server (Dies ist der selbe Befehl mit dem ihr Updates installiert) :

./steam -command update -game "left4dead" -dir . -verify_all -retry

Für Left 4 Dead 2 muss der Parameter “left4dead2″ heißen:

./steam -command update -game "left4dead2" -dir . -verify_all -retry

Je nachdem wie schnell eure Anbindung ist kann es jetzt etwas dauern. In manchen Fällen wird erst der Updater geupdatet. Dann müsst ihr diesen Befehl so oft ausführen, bis ihr die Nachricht „the server is running in the latest version“ erhaltet.

Den Server starten und konfigurieren

Um zu testen, ob der Server funktioniert, starten wir den Server aus dem l4d/l4d bzw. l4d2/left4dead2 Verzeichnis. Dafür wechseln wir als erstes in das Verzeichnis:

cd l4d/l4d

bzw.:

cd l4d2/left4dead2

und geben diesen Startbefehl ein:

./srcds_run -game left4dead +map l4d_airport01_greenhouse
./srcds_run -game left4dead2 +map c2m1_highway
./srcds_run

Nun wird der Server gestartet. Beenden kannst du den Server, indem du ctrl+c in der Konsole drückst.

Starscript mit screen

Mit dem neuen User erstellst du nun folgendes Startscript, indem du mit dem Editor deiner Wahl (Ich nutze nano) die neue Datei öffnest, das Script einfügst, anpasst und den Editor schließt ( bei nano ctrl+x) und dabei speicherst.

nano l4d.sh

Alternativ kannst du es hier Downloaden

Hier das Script:

#!/bin/bash 

############################################################################
#                                                                          #
#  Server Startscript                                                      #
#                                                                          #
#  Author:                                                                 #
#  Ulrich Block                                                            #
#                                                                          #
#  Kontakt:                                                                #
#  ulblock at gmx.de                                                       #
#  www.ulrich-block.de                                                     #
#                                                                          #
#  This program is free software: you can redistribute it and/or modify    #
#  it under the terms of the GNU General Public License as published by    #
#  the Free Software Foundation, either version 3 of the License, or       #
#  (at your option) any later version.                                     #
#                                                                          #
#  This program is distributed in the hope that it will be useful,         #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of          #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           #
#  GNU General Public License for more details.                            #
#                                                                          #
#  You should have received a copy of the GNU General Public License       #
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.   #
#                                                                          #
#  Gebrauch: ./l4d.sh {start|stop|restart|update|console|check}            #
#                                                                          #
#  start/restart/stop: Server An und aus schalten                          #
#                                                                          #
#  update: Mit dem Steam Updatetool den Server aktualisieren               #
#                                                                          #
#  console: Wechselt auf die Counter-Strike Serverkonsole                  #
#           Mit strg+a -> d die Konsole wieder in den Hintergrund schicken #
#                                                                          #
############################################################################

function init {

DEAMON="srcds_run"
IP="Deine IP hier eintragen"
PORT="Deinen IP hier eintragen"

# Die Unterschiedlichen Startvarianten. Je nach Spiel bitte anpassen.
# Eine Raute (#) am Anfang der Zeile, bedeutet, dass sie auskommentiert ist.
# In diesem Fall wird sie vom Server nicht beachtet und ist nur für den menschlichen Leser bestimmt.
# Standartmäßig ist Left 4 Dead aktiviert.

# Bei Left Dead 1:
DIR="/home/left4dead/l4d1/l4d"
SCREENNAME="left4dead.eins"
PARAMS="-game left4dead -ip $IP -port $PORT -autoupdate -retry"
PARAMS2="+map l4d_airport01_greenhouse"
# Beim Forking:
#PARAMS="-game left4dead -ip $IP -port $PORT+## -fork 8 -autoupdate -retry"
#PARAMS2="+map l4d_airport01_greenhouse +exec server_fork_##.cfg"

# Bei Left Dead 2:
#DIR="/home/left4dead/l4d2/left4dead2"
#SCREENNAME="left4dead2.eins"
#PARAMS"-game left4dead2 -ip $IP -port $PORT -autoupdate -retry"
#PARAMS2="+map c2m1_highway"
# Beim Forking:
#PARAMS="-game left4dead2 -ip $IP -port $PORT+## -fork 8 -autoupdate -retry"
#PARAMS2="+map c2m1_highway +exec server_fork_##.cfg"

if [ "`whoami`" = "root" ]; then
 echo "Verantwortungsvolle Admins starten Gameserver nicht mit root! Allen anderen ist es untersagt!"
 exit 0
fi
if [ -z "$DIR" ]; then
 echo "Es wurde nichts bei der Variable DIR angegeben."
 exit 0
fi
if [ -z "$DEAMON" ]; then
 echo "Es wurde nichts bei der Variable DEAMON angegeben."
 exit 0
fi
if [ -z "$PARAMS" ]; then
 echo "Es wurde nichts bei der Variable PARAMS angegeben."
 exit 0
fi
if [ -z "$PARAMS2" ]; then
 echo "Es wurde nichts bei der Variable PARAMS2 angegeben."
 exit 0
fi
if [ -z "$SCREENNAME" ]; then
 echo "Es wurde nichts bei der Variable SCREENNAME angegeben."
 exit 0
fi
if [ -z "$IP" ]; then
 echo "Es wurde nichts bei der Variable IP angegeben."
 exit 0
fi
if [ -z "$PORT" ]; then
 echo "Es wurde nichts bei der Variable PORT angegeben."
 exit 0
fi
}

function start_server {
 if [[ `screen -ls | grep $SCREENNAME` ]]; then
 echo "Der Server läuft bereits unter dem Screentab $SCREENNAME"
 else
 echo "Starte $SCREENNAME"
 if [ -d $DIR ]; then
 cd $DIR
 screen -d -m -S $SCREENNAME ./$DEAMON $PARAMS $PARAMS2
 else
 echo "Das Serververzeichnis wurde nicht angegeben"
 fi
 fi
} 

function stop_server {
 if [[ `screen -ls | grep $SCREENNAME` ]]; then
 echo -n "Stoppe $SCREENNAME"
 kill `screen -ls | grep $SCREENNAME | awk -F . '{print $1}'| awk '{print $1}'`
 echo " ... done."
 else
 echo "Konnte den Screentab $SCREENNAME nicht finden"
 fi
}

function update_server {
 stop_server
 echo "Update"
 cd $DIR
 cd ..
 # Left4 Dead
 ./steam -command update -game "left4dead" -dir . -verify_all -retry
 # Left 4 Dead 2
 #./steam -command update -game "left4dead" -dir . -verify_all -retry
 echo " ... done."
 start_server
}

function wrong_input {
 echo "Usage: $0 {start|stop|restart|update|console|check}"
 exit 1
}

function get_screen {
 screen -r $SCREENNAME
}

function check_ping {
 if [ "`/usr/bin/quakestat -a2s $IP:$PORT | grep -v ADDRESS | awk '{ print $2 }' | awk -F/ ' { print $1}'`" = "DOWN" ]; then
 sleep 10
 if [ "`/usr/bin/quakestat -a2s $IP:$PORT | grep -v ADDRESS | awk '{ print $2 }' | awk -F/ ' { print $1}'`" = "DOWN" ]; then
 stop_server
 start_server
 fi
 fi
}

init

case "$1" in
 start)
 start_server
 ;;

 stop)
 stop_server
 ;;

 restart)
 stop_server
 start_server
 ;;

 update)
 update_server
 ;;

 console)
 get_screen
 ;;

 check)
 check_ping
 ;; 

 *)
 wrong_input
 ;;
esac
exit 0

Mit diesem Script kannst du den Server einfach mittels

./l4d.sh start

starten. Um in zu stoppen oder neu zu starten start durch stop bzw restart ersetzen.
Um in der Linux Konsole auf die Server Konsole zu kommen gibst du folgendes ein. Um den Server wieder in den Hintergrund zu schicken drückt man dann „ctrl+a“ und dann „d“

./l4d.sh console

Automatisches Updaten

Den Server kannst du manuell mit dem selben Befehl updaten, mit dem du ihn auch installiert hast. Also folgendes im Serververzeichnis eingeben:

./steam -command update -game "left4dead" -dir . -verify_all -retry

bzw.:

./steam -command update -game "left4dead2" -dir . -verify_all -retry

In meinem Startscript habe ich die Parameter “-autoupdate -retry -verify_all” reingeschrieben. Dadurch updated sich der Server in der Regel von selber im Betrieb, so dass ihr nichts machen müsst.

Wenn das einmal nicht funktionieren sollte, kann man es entweder manuell machen, oder die Funktion “update “des Scriptes nutzen. Achtet darauf, dass standartmäßig Left 4 Dead geupdated wird. Wenn ihr Left 4 Dead 2 updaten wollt, müsst ihr der function “update_server” erst die Left 4 Dead Zeile mit einer Raute aus- und die Left 4 Dead 2 Zeile einkommentieren.

./l4d.sh update

Man kann jetzt mit cron z.B. immer um 5:15 Uhr morgens automatisch die Update Funktion ausführen und den Server neu starten lassen. Dafür musst du einen neuen crontab anlegen und das Script eintragen:

crontab -e

Diese Zeile einfügen:

15 05 * * * cd /home/left4dead && ./l4d.sh update >/dev/null 2>&1

Um 5:15 Uhr morgens wird nun die Updatefunktion des Servers gestartet und dieser anschließend neu gestartet.

Server Einstellungen

Nun müsst ihr noch den Server mit der server.cfg einstellen. Diese muss im im cfg Ordner angelgt werden. Eine rudimentäre CFG mit den wichtigsten Einstellungen gibt es hier:

  • Left 4 Dead
  • Left 4 Dead 2
  • Denkt bitte daran die Datei in server.cfg umzubenennen.

    Forking

    Um Ram zu sparen, ist es möglich, den Server mit mehreren Instanzen (Forks) starten zu lassen. Man erhält so mehrere Left 4 Dead bzw. Left 4 Dead 2 Server, muss nur einen Prozess starten. Die Forks teilen sich dann den Ram, so das insgesamt weniger verbraucht wird. Ebenso benötigt man nur eine Installation. Die Forks unterscheiden sich dann nur in ihrer Config.

    Um das Forking zu aktivieren, müssen die Startparameter im Startskript angepasst werden. Um 8 Forks zu starten kommentiert folgende Zeilen bei Left 4 Dead ein:

    PARAMS="-game left4dead -ip $IP -port $PORT+## -fork 8 -autoupdate -retry"
    PARAMS2="+map l4d_airport01_greenhouse +exec server_fork_##.cfg"

    und bei Left 4 Dead2:

    PARAMS="-game left4dead2 -ip $IP -port $PORT+## -fork 8 -autoupdate -retry"
    PARAMS2="+map c2m1_highway +exec server_fork_##.cfg"

    Die bisher genutzen Startparameter bitte auskommentieren.

    Dazu müssen im cfg Ordner 8 Configs angelegt werden und mit server_fork_01.cfg, server_fork_02.cfg, usw. benannt werden.

    In diesen Configs tragt ihr dann den Servernamen, Passwort, Steamgroup, Gamemode usw ein. Alle Variablen, die bei allen Forks gleich sein sollen, kommen weiterhin in die server.cfg. Aus dieser müsst ihr dann auch die Variablen löschen, die sich bei den einzelnen Forks unterscheiden.

    Wenn das erledigt ist, einfach den Server mit dem Startscript starten. Unter den Ports 27015-27023 müssten nun 8 Forks laufen. Wenn  der Server hinter einer Firewall ist, denkt bitte daran, auch diese Ports freizugeben, bzw. zu forwarden.

    2 Comments Post a comment
    1. Tante
      Okt 21 2011

      Hallo,

      sehr sehr schönes HowTo!! Weiter so!

      MfG Tante

      Antworten
    2. Onkel
      Mai 28 2011

      Hallo Ulrich,

      da ist dir ein kleiner Fehler unterlaufen…

      Zeile 61 hinter PARAMS fehlt das “=” Zeichen.
      #PARAMS”-game left4dead2 -ip $IP -port $PORT -autoupdate -retry”

      Ansonsten ein TOP HowTo hat alles super geklappt.
      Gruß Onkel

      Antworten

    Share your thoughts, post a comment.

    Note: HTML is allowed. Your email address will never be published.

    Subscribe to comments