F.E.A.R. Dedicated Server auf Linux: Unterschied zwischen den Versionen

Aus MySlug
Zur Navigation springen Zur Suche springen
Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=F.E.A.R._Dedicated_Server_auf_Linux“
Markierung: Ersetzt
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
<div style="text-align=right; float: right; clear: none; {{#if:{{{Breite|}}}|max-width: {{{Breite}}};}} margin: .5em 0 1em 1em; background: none; padding-left:20px">
Das Tutorial wurde nach Gargi.org verschoben: https://www.gargi.org/index.php?title=F.E.A.R._Dedicated_Server_auf_Linux
__TOC__
</div><noinclude>
Der mittlerweile etwas betagte Gruselshooter F.E.A.R. aus dem Hause Sierra hat ein gutes Multiplayermodul, das sich auch heute nach ca. 3 Jahren nach Erscheinen der letzten Version 1.08 großer Beliebtheit erfreut. Zumal das Multiplayermodul F.E.A.R. Combat kostenlos downloadbar ist und somit der Multiplayer Part frei gespielt werden kann.
<br><br>
Die Installation auf einem Linux Server ist relativ einfach. Die Prozedur auf einem Debian Server (getestet auf meinem intel Atom 270 Server mit einem 64bit Debian 5 , Lenny) ist schnell erledigt.
<br><br>
Legt einen eigenen User für das Spiel an, da wir den dedicated Server nicht als root laufen lassen wollen. Falls Ihr noch einen anlegen müsst, dann macht das an der Konsole als root
 
<code><pre>adduser meinfear</pre></code>
 
Damit haben wir den User '''meinfear''' generiert und dieser hat sein Homeverzeichnis '''meinfear''' nun unter '''/home'''.
<br><br>
Jetzt benötigen wir ein paar Pakete, die wir wie folgt installieren können:
 
<code><pre>apt-get install libstdc++5 screen</pre></code>
 
Wenn Ihr ein 64bit System verwendet, dann muss ein Paket mehr rein:
 
<code><pre>apt-get install libstdc++5 ia32-libs screen</pre></code>
 
Nachdem die Pakete im System sind werden wir nun den FEAR Server installieren. Das machen wir als normaler User. Wenn Ihr noch root seid, dann wechselt nun die Userid mit einem:
 
<code><pre>su meinfear</pre></code>
 
und wechselt in sein Homeverzeichnis:
 
<code><pre>cd /home/meinfear</pre></code>
 
Nun können wir den Server herunterladen:
 
<code><pre>wget http://www.1337-server.net/fear/fear-linuxserver-1.08.tar.gz</pre></code>
 
Die Datei entpacken wir:
 
<code><pre>tar -zxvf fear-linuxserver-1.08.tar.gz</pre></code>
 
Nun haben befindet sich in Eurem Homeverzeichnis das neue Verzeichnis '''FEAR'''. Wir wechseln nun dort hin:
 
<code><pre>cd FEAR</pre></code>
 
und können auch schon den Server starten:
 
<code><pre>./start.sh</pre></code>
 
Wenn alles glatt läuft solltet Ihr diese Ausgabe sehen:
<code><pre>
F.E.A.R. Dedicated Linux Server - Version FEAR v1.08
Copyright (c) 2005 Monolith Productions, Inc. All rights reserved.
 
Initializing...
Map Rotation:
  Asylum
  Cafeteria
  Campus
  Construction
  Docks
  Evac
  Factory
  HighTech
  Office
  Refinery
  Stockpile
  WaterWorks
Loading world: Worlds\ReleaseMultiplayer\Asylum
World loaded.
Ready.</pre></code>
==ServerOptions==
Der Server läuft nun auf dem Standardport '''27888'''. <br>
Wenn Ihr den Gamemode ändern wollt oder auch den Port, dann müsst Ihr das in der Datei '''/FEAR/ServerOptions/ServerOptions.txt '''erledigen.
<br><br>
Wichtig ist zunächst Folgendes in dieser Datei.
<br><br>
Sektion '''[ServerSettings]''':
<br><br>
GameType=DeathMatch ''Legt den Gametype fest (siehe darunterliegende Sektionen)''<br>
ServerMessage= ''Eine Meldung, die der Server ausgibt beim Connecten''<br>
UsePassword=0 ''0=kein Passwort 1=Passwortgeschützt''<br>
Password=password ''Serverpasswort''<br>
AllowScmdCommands=0 ''Schaltet Adminkommandos ein''<br>
ScmdPassword=password ''Admin Passwort''<br>
Port=27888 ''Standardport''<br>
...<br>
Dedicated=1 ''0=kein dedicated Server 1= Dedicated Server''<br>
...<br>
AllowVoteKick=1 ''Diverse Votingsettings''<br>
AllowVoteTeamKick=1<br>
AllowVoteBan=1<br>
AllowVoteNextRound=1<br>
AllowVoteNextMap=1<br>
AllowVoteSelectMap=1<br>
MinPlayersForVote=5<br>
MinPlayersForTeamVote=3<br>
VoteLifetime=30<br>
VoteBanDuration=60<br>
UsePunkBuster=0 ''Punkbuster ja oder nein. 0=nein 1=ja''<br>
<br>
Die darunterliegenden Sektions nehmen Einstellungen für die einzelnen Spielearten fest, welchen Ihr oben unter GameType festlegt. Ihr solltet auf alle Fälle im jeweiligen Spieletyp Euren Servernamen festlegen, damit dieser im Ingamebrowser später auch eindeutig gefunden werden kann. Den Namen legt Ihr beim Parameter
<br><br>
'''SessionName='''<br>
<br>
fest. Wie schon gesagt, den könnt Ihr für jede Spieleart anders nennen, da dieser in jeder einzelnen Sektion festgelegt werden kann.
<br><br>
==Speicherzugriffsfehler==
Beim Installieren auf meinen Server begrüßte mich der Server zunächst beim Start mit einem Speicherzugriffsfehler (Segmentation fault) und brach ab. Ich dachte zuerst an ein Problem mit der Architektur. Allerdings lag das in meinem Fall an der eingeschalteten Firewall. Wenn Ihr iptables am Laufen habt, dann müssen folgende Ports jeweils UDP und TCP freigeschaltet werden '''27888''' (je nachdem wie Ihr Euren Standardport setzt) und den Port '''27900 '''damit Euer Server gelistet wird. Tragt diese Ports im IN und OUT Eures Scripts ein. Danach sollte der Server starten.
<br><br>
 
==Screen==
Wenn Ihr den Server an der Konsole via ssh oder ähnlich startet, dann startet zuerst screen und dann den Server:
 
<code><pre>su meinfear
cd /home/meinfear/FEAR
screen
./start.sh</pre></code>
 
==Mehrere Server parallel==
Wenn Ihr auf Euren Server mehrere Gamemodi beispielsweise laufen lassen wollt (der Slowmo Deathmatch ist recht schön), dann legt eine weitere ServerOptions Datei an:
 
<code><pre>su meinfear
cd /home/meinfear/FEAR/ServerOptions
cp ServerOptions.txt ServerOptions2.txt</pre></code>
 
Editiert nun die '''ServerOptions2.txt''' und legt einen neuen Standardport fest (z.B. 27889) und tragt den neuen gewünschten GameType ein. Speichert die Änderung.
 
<code><pre>cd /home/meinfear/FEAR
cp start.sh start2.sh</pre></code>
 
Damit haben wir eine zweite Startdatei angelegt. Editiert auch diese und ändert die Zeile
 
<code><pre>./fearserver.bin</pre></code>
 
in
 
<code><pre>./fearserver.bin -optionsfile ServerOptions2.txt</pre></code>
 
Nun startet screen und den ersten Server:
 
<code><pre>su meinfear
cd /home/meinfear/FEAR
screen
./start.sh</pre></code>
 
Die zweite Screensession machen wir mit einer Tastenkombination auf:<br><br>
 
'''STRG+a c'''<br><br>
 
Dort starten wir nun den Server:
 
<code><pre>./start2.sh</pre></code>
 
==Kurzer Exkurs zu Screen==
 
Screen verlassen, läuft im Hintergrund weiter: Konsole zumachen, oder an der Konsole '''STRG+a d'''<br><br>
 
'''exit''' beendet eine Konsole, bei der letzten Konsole beendet sich screen<br><br>
 
'''screen -R''' startet die laufenden Screensessions.<br><br>
 
'''STRG+a leer''' Schaltet zwischen den einzelnen Screensessions um.
<br><br>
==Checkupscript für zwei laufende Server==
Die Idee bei folgendem Script ist, dass es über einen Crontab-Eintrag in kurzen regelmäßigen Abständen prüft, ob der F.E.A.R. Server läuft. Ist dies der Fall, dann überprüft das Script, ob der Server eventuell am Überlaufen ist. D.h. ist die CPU Last über einen speziell festgelegten Schwellenwert, dann werden die Prozesse gekillt und der Server neu gestartet. Ich habe das einwenig ausgebaut, und hierbei zwei parallel laufende F.E.A.R. Server in die Überwachung genommen. Da das Skript E-Mails versendet muss ein MTA wie der Exim4 konfiguriert sein.
<br><br>
'''Vorbereitung für zwei Server:'''<br>
 
Die zwei Server werden über ein eigenes Startskript aufgerufen. Zudem kopieren wir die Server Binary auf einen eienen Namen, damit der Prozess später anhand seines Namens gefunden und zur Not beendet werden kann.
<br><br>
Ich gehe davon aus, dass der User, '''meinfear''' heißt. Sein Verzeichnis liegt unter '''/home/meinfear'''. Das Fear Verzeichnis lautet '''FEAR'''. Das Script müsst Ihr dann entsprechend an Eure Gegebenheiten anpassen.
<br><br>
Die Startdatei kopieren wir wie folgt:
 
<code><pre>cp start.sh start2.sh</pre></code>
 
Die Binary:
 
<code><pre>cp fearserver.bin fearserver2.bin</pre></code>
 
In der Startdatei (start.sh und start2.sh) ändert den Inhalt etwas ab. Zum einen muss in Euer Homeverzeichnis gewechselt werden:
<br><br>
'''cd /home/meinfear/FEAR'''
<br><br>
Danach noch hinter den '''./fearserver.bin''' die Ergänzung '''-optionsfile''' mit dem ABSOLUTEN Pfad zu Eurer Serverkonfigurationsdatei. Z.B.:
<br><br>
'''./fearserver.bin -optionsfile /home/meinfear/FEAR/ServerOptions/ServerOptions.txt'''
<br><br>
Speichert die Änderungen entsprechend ab. Dann legt im Verzeichnis '''/usr/local/bin''' die Datei wie folgt an:
 
feartest
<code><pre>#!/bin/sh
 
# F.E.A.R. Dedicated Checkup Script by Pierre "Gargi" Kretschmer
 
top -b -n 1 | grep fearserver.bin
server1=$?
top -b -n 1 | grep fearserver2.bin
server2=$?
if [ \( $server1 = 1 \) -o \( $server2 = 1 \) ]; then
    pkill -u meinfear
    killall -s7 fearserver.bin
    killall -s7 fearserver2.bin
    su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh'
    su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh'
    rm /var/log/fearcheck.log
    echo "No active F.E.A.R. Server found. Starting new Killerspiele sessions!" > /var/log/fearcheck.log
    mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server start"  //ZEILENUMBRUCH
          meine @ emailadresse.de < /var/log/fearcheck.log
    exit 1
 
    else
 
        fear1load=$(top -b -n 1 | grep fearserver.bin | cut -d " " -f20)
        fear2load=$(top -b -n 1 | grep fearserver2.bin | cut -d " " -f20)
 
    if [ $fear1load -gt 30 ]; then
        pkill -u meinfear
        killall -s7 fearserver.bin
        killall -s7 fearserver2.bin
        su meinfear -c 'screen -S server1 -d -m /home/fear/meinFEAR/start.sh'
        su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh'
        rm /var/log/fearcheck.log
        echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log
        mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart"  //ZEILENUMBRUCH
            meine @ emailadresse.de < /var/log/fearcheck.log
        exit 1
 
    elif [ $fear2load -gt 30 ]; then
        pkill -u meinfear
        killall -s7 fearserver.bin
        killall -s7 fearserver2.bin
        su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh'
        su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh'
        rm /var/log/fearcheck.log
        echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log
        mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" //ZEILENUMBRUCH
              meine @ emailadresse.de < /var/log/fearcheck.log
        exit 1
 
    else
        rm /var/log/fearcheck.log
        echo "server load ok" > /var/log/fearcheck.log
    fi
fi
</pre></code>
''(Bitte beachtet, dass bei dem Hinweis //ZEILENUMBRUCH im Skript, die markierten Zeilen in eine Zeile geschrieben werden müssen, sonst ist das Skript nicht funktionsfähig!)''
<br><br>
Zu Beginn prüft das Script also, ob beide Server aktiv sind. Sind es diese nicht, oder fehlt einer der beiden Server, dann werden alle Prozesse aus dem Bereich "gekillt" und der Server neu gestartet. Fehlt wieder ein Server, wird dies beim nächsten Test wieder ausgelöst, bis alle beiden Server aktiv sind. Sind beide Server vorhanden, dann wird getestet, ob die Auslastung der einzelnen Server über 30% liegt. Sollte das der Fall sein, werden auch hier alle Prozesse getötet und die beiden Server neu gestartet. Auch hier gibt es dann eine E-Mail als Benachrichtigung. Sollte der Load unter 30 % liegen, dann passiert gar nichts und der Check kommt dann zum nächsten Lauf wieder. Man kann dieses Script dann über die Crontab ('''crontab -e''') beispielsweise alle 2 Minuten aufrufen:
 
<code><pre>*/2 *  * * *  root    /usr/local/bin/feartest > /dev/null</pre></code>
 
Vergesst nicht, das Skript ausführbar zu machen:
 
<code><pre>chmod +x /bin/feartest</pre></code>
 
Das Skript startet zwei eigene Screen Sessions für den gleichen User. Um die Screensession aufzurufen, macht das als eingeloggter User mit einem
 
<code><pre>screen -r server1</pre></code>
 
oder
 
<code><pre>screen -r server2</pre></code>
 
Ihr könnt dann auch im Script die Bezeichnung der Sessions individuell ändern. Dies findet über dem screen Parameter -'''S''' statt.
<br><br>
Den Schwellenwert von den voreingestellten 30 % könnt Ihr wenn Ihr wollt auch individuell ändern. Diesen findet Ihr im if Bereich hinter dem Prüfwert '''-gt'''. Wenn ein Server generell höhere Last hat, dann kann man die auch mit entsprechend unterschiedlichen Werten versehen.

Aktuelle Version vom 30. Juni 2018, 11:42 Uhr