Der dedizierte Quake3 Server: Unterschied zwischen den Versionen

Aus MySlug
Zur Navigation springen Zur Suche springen
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Der_dedizierte_Quake3_Server“)
Markierung: Ersetzt
 
Zeile 1: Zeile 1:
<div style="text-align=right; float: right; clear: none; background: none; padding-left:20px">
Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Der_dedizierte_Quake3_Server
__TOC__
</div><noinclude>
<div style="float:left;text-align:center;padding-right:20px">
[[Bild:q3_kulli.jpg|logo]]
<br />
''Logo Phantasie''</div>
'''Prolog'''<br>
<br>
Nachdem id Software den Quelltext ihres Ego-Shooter Quake III Arena im August 2005 ([http://www.golem.de/0508/39960.html Meldung Golem.de 20.08.2005]) freigegeben hat und den größten Teil davon unter die GPL ([http://de.wikipedia.org/wiki/GNU_General_Public_License Wikipedia Link Thema GPL]) gesetzt hat, haben sich mittlerweile einige Projekte daran gemacht, den Quellcode weiterhin zu pflegen und gar zu verbessern. Eines dieser Projekte findet sich unter ioquake3 (kurz ioq3) ([http://www.ioquake3.org ioq3 Projektseite]), das hier einige neuen Features eingebaut hat und weiterhin den Quellcode verbessert. Einige zusätzlichen Features sind das Implementieren von openAL, was den Sound verbessert, die Implementierung von IPV6, Unterstützung von 64bit Betriebssystemen, Anaglyph stereo rendering für 3D Brillen, verbesserte QVM (Quake Virtual Machine) tools und im Spiel integriertes VOIP. Weitere Neuerungen findet Ihr im Bereich [http://ioquake3.org/improvements/ Improvements] auf der ioq3 Projektseite.<br>
<br>
Der Quellcode des Projekts war ursprünglich auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. Ende 2012 hat man diesen dann auf git umgestellt. Der Quellcode liefert neben dem dedicated Server auch den Windows Client. So kann auf Windows selbst der Quelltext kompiliert werden, oder über einen Crosscompiler ([http://www.mingw.org/ mingw]) auf Linux.<br>
<br>
Bei der Freigabe des Quellcodes sei folgendes angemerkt: Sämtliche Hooks zum Punkbuster Dienst wurden entfernt, da Punkbuster closed Source ist. D.h. ioquake arbeitet nicht mit dem Punkbuster. Dennoch ist es soweit kompatibel zu den Servern, die online sind und kein Punkbuster verlangen. Ebenso lässt der dedicated ioquake3 Server herkömmliche Quake III Klienten zu. Desweiteren handelt es sich bei den übersetzten Dateien dann um die rein ausführbaren Files. Es wird deshalb das Originalspiel benötigt um zum einen einen CD Key einzugeben und zum anderen die auf der CD befindlichen pak Files zu kopieren. Die pak Datei beinhaltet nicht freigegebenes Material wie die Maps, Sounds, Models, Texturen und so weiter. Erst zusammen mit einer Original CD kann dann ioquake3 gespielt werden.<br>
<br>
Auf der CD werdet Ihr die pak0.pk3 als einziges pak File finden. Mittlerweile sind bei dem rund 10 Jahre alten Spiel einige Patches erschienen, die diverse Updates über neu pak Files mitbringen. Damit wir auch alle aktuelle Versionen haben, könnt Ihr die neuen zhusätzlichen pak Files unter folgender URL herunterladen: [http://ioquake3.org/patch-data/ Updated pak Files]. Dazu müsst Ihr die EULA akzeptieren. In dem gepackten Archiv befinden sich dann die pak1.pk3 bis pak8.pk3 die in das baseq3 Verzeichnis der ioquake3 Installation kopiert werden.<br>
<br>
<div style="float:left;text-align:center;padding-right:20px">
[[Bild:orbi.jpg|orbi]]
<br />
''Quake3 Gladiator aus dem Kugelschreiber''</div>
Fertige ioquake3 Pakete für Windows, Linux und Mac können hier heruntergeladen werden: [http://ioquake3.org/get-it ioq3 - get it Link-Text]<br>
Zudem halten einige Linuxdistributionen relativ aktuelle Versionen über entsprechende Repositories bereit, die über den jeweiligen Paketmanager der Distribution installiert werden können. Hier müsst Ihr entsprechend nachforschen, welches Repository bei Eurer bevorzugten Distribution verwendet werden muss.<br>
<br>
Im Folgenden findet Ihr nun Texte, die sich um einige technische Dinge rund um das ioq3 Projekt drehen und weniger Tipps zum Spiel selbst. Da es hier um weiterführende Themen geht wie das Erstellen eines Servers oder das Kompilieren des Quellcodes auf Linux sei hier angemerkt, dass die Texte für Interessenten mit mittleren bis einwenig besseren Linuxkenntnissen verfasst sind. Ich versuche natürlich alles so detailiert wie möglich zu beschreiben, kann aber leider nicht überall auf die Basics eingehen. Wir werden jetzt einen reinen dedizierten Server auf der Raspberry Pi installieren und betreiben. Von daher solltet Ihr halbwegs fit auf Debian (oder debianähnlichen Systemen wie Ubuntu) sein und wissen, wie man Pakete an der Konsole erstellt und sich auf der Konsole bewegt. Zudem ist es von Vorteil, grundlegendes über Networking unter Linux zu kennen, damit auch ein Connect von außen auf den dedicated Server funktioniert. Wir werden auch den ioquake3 Quellcode verwenden. Dieser läuft auf Raspbian. Wer allerdings Quake3 auch auf dem xserver (Client) spielen möchte, der muss die modifizierten Quellen derzeit nutzen, da diese auf den 3D Grafikchip der Pi optimiert wurden. Dazu gibt es folgendes Tutorial: [https://www.raspbian.org/RaspbianQuake3 https://www.raspbian.org/RaspbianQuake3]<br>
<br>
Fragen hierzu beantworte ich aber immer gerne auf meinem Forum unter [http://www.gargi.org http://www.gargi.org]<br>
<br>
Jetzt wünsche ich Euch viel Vergnügen beim Basteln und Spielen mit dem Quellcode!
<br>
<br>
==Vorbereitung==
Wir müssen zuerst einige Pakete installieren, bevor wir loslegen können.
<code><pre>sudo apt-get install git gcc build-essential libsdl1.2-dev devscripts screen</pre></code>
Wir müssen dann ein Arbeitsverzeichnis anlegen. Ich mache das mal unter home:
<code><pre>mkdir /home/work</pre></code>
Nun legen wir noch einen zusätzlichen Nutzer an, dessen home-Verzeichnis wir auch als Serververzeichnis verwenden werden.
<code><pre>adduser gameserver</pre></code>
<br>
 
==libsdl2 kompilieren==
Die neuen Quellen benötigen '''libsdl2''' zum Kompilieren. Diese werden allerdings nicht als fertige Pakete unter Raspbian angeboten. Deshalb müssen wir die uns selbst bauen. Wechselt in Euer Arbeitsverzeichnis:
<code><pre>cd /home/work</pre></code>
Holt Euch die Quellen unter [https://www.libsdl.org/download-2.0.php libsdl Downloads]
<code><pre>wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz</pre></code>
Danach müsst Ihr das Paket umbenennen:
<code><pre>mv SDL2-2.0.3.tar.gz SDL2_2.0.3.tar.gz</pre></code>
Danach wird das Paket entpackt:
<code><pre>tar -xvf libsdl2_2.0.3.tar.gz</pre></code>
Wechselt danach in das neue Verzeichnis
<code><pre>cd SDL2-2.0.3</pre></code>
Startet den Compile:
<code><pre>debuild -uc -us</pre></code>
Es gibt nun eine Menge Fehler wegen nicht installierten Paketen / Abhängigkeiten. Installiert die fehlenden Pakete wie angezeigt nach. z.B.:
<code><pre>apt-get dh-autoreconf libpulse-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev</pre></code>
Danach nochmal den Compile sterten. Er sollte nun durchlaufen:
<code><pre>debuild -uc -us</pre></code>
Die fertigen Pakete liegen dann in Eurem Arbeitsverzeichnis. Installiert diese dann:
<code><pre>cd /home/work
dpkg -i libsdl2_2.0.3_armhf.deb
dpkg -i libsdl2-dev_2.0.3_armhf.deb</pre></code>
<br>
 
==Den Quake 3 Server bauen und konfigurieren==
Wir sind immer noch in unserem Arbeitsverzeichnis /home/work. Dort holen wir uns nun die aktuellen Quellen:
<code><pre>git clone git://github.com/ioquake/ioq3.git quake3</pre></code>
Danach wechseln wir in das Quellverzeichnis:
<code><pre>cd quake3</pre></code>
Der Compile wird wie folgt gestartet:
<code><pre>make -j5 copyfiles</pre></code>
Der Parameter '''-j5''' lastet dann alle 4 Kerne des Raspberry Pi2 aus. Dafür geht der Compile recht schnell von Statten (um die 10 Minuten).
<br><br>
[[Bild:q3bauen.jpg|Q3 Build]]
<br><br>
Die Installationsdateien landen somit erstmal alle automatisch in '''/usr/local/games/quake3'''<br>
<br>
Wir legen nun noch einen Link auf unsere Serverbinärdatei:
<code><pre>ln -s /usr/local/games/quake3/ioq3ded.armvzl /bin/q3ded</pre></code>
Wir wollen nun das Spiel nicht als root ausführen, deswegen haben wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür angelegt: '''gameserver'''<br>
Loggt Euch nun als Euer neuen User gameserver ein und legt in Eurem Homeverzeichnis folgende Verzeichnisse an:
<code><pre>mkdir .q3a
mkdir .q3a/baseq3</pre></code>
<br>
<div style="float:right;padding-left:20px">
[[Bild:rocket_kulli.jpg|Launcher]]
</div>
Ihr solltet nun Q3A bereits auf Euren Rechner normal installiert und mindestens auf die Version 1.32 gepatcht haben. Kopiert nun von Eurem Desktop Rechner alle *.pk3 Dateien aus dem '''/baseq3''' Verzeichnis auf Euren Server. Hierfür loggt Euch am besten via ftp auf den User '''gameserver''' ein und transferiert die pk3s dort hin.<br>
<br>
Zum Schluss müsst Ihr noch in Eurem '''/baseq3''' Verzeichnis Eures Servers (im Homeverzeichnis des Users gameserver) eine Konfigurationsdatei anlegen. Diese nennen wir mal server.cfg . Ein gutes Sample findet Ihr unter folgender URL: [http://www.pro-linux.de/spiele/quake3ded.html Quake3 Dedicated Server unter Linux]
Ändert entsprechend noch die Bereiche wie Servername, E-Mail etc. ab. Das Sample ist sehr gut dokumentiert wobei dieses fast selbsterklärend ist. Wenn Ihr die Datei angelegt habt können wir eigentlich schon den Server als normaler User starten.<br>
<br>
Da Ihr dies sicherlich aus der Konsole heraus tut, startet zu erst screen:
<code><pre>screen</pre></code>
Danach kann der Server gestartet werden:
<code><pre>q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg</pre></code>
Wenn Ihr die Konsole schließt, dann könnt Ihr beim nächsten Einloggen wieder mit einem
<code><pre>screen -R</pre></code>
den laufenden Server wieder aufrufen.<br>
<br>
'''Hinweise:'''<br>
a) Die Konfigurationsdatei sollten mindesten 4 Buchstaben haben (1234.cfg). Bei nur drei startete der Server bei mir nicht richtig<br>
<br>
b) Folgende Ports müssen auf einem internen Server freigegeben sein:<br>
- UDP IN: 27960 <br>
- UDP OUT: 27950 und 27960 <br>
- Router auf internen Server: UDP IN 27960 -> IP interner Server <br>
<br>
<br>
==Startscript und ein init Script schreiben==
Wie wollen nun, dass Quake 3 automatisch gestartet wird, wenn der Server bootet. Dazu legen wir uns erstmal ein Startscript an:
<code><pre>nano /usr/local/bin/q3serverstart</pre></code>
Das füllen wir mit folgendem Inhalt:
<code><pre>#!/bin/sh
pkill -u gameserver
su gameserver -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec server.cfg'</pre></code>
Macht das Skript ausführbar:
<code><pre>chmod +x /usr/local/bin/q3serverstart</pre></code>
Testet das Script, indem Ihr es startet:
<code><pre>q3serverstart</pre></code>
Ein '''htop''' sollte Auskunft geben, ob der Server läuft.
 
Danach bauen wir uns das init Script:
<code><pre>nano /etc/init.d/q3ded</pre></code>
Dieses füllt wie folgt:
<code><pre>
#!/bin/sh
### BEGIN INIT INFO
# Provides:          dedicated q3server start
# Required-Start:    $remote_fs $syslog $network $firewall
# Required-Stop:    $remote_fs $syslog $network
# Default-Start:    2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: q3serverstart initscript
# Description:      Custom quake3start, placed in /etc/init.d.
#                    script written by Gargi 2015 http://www.gargi.org
### END INIT INFO
 
#needed modules
 
case "$1" in
  start)
      pkill -u gameserver
      /usr/local/bin/q3serverstart
      echo "Starting Quake3 server ... ready to frag"
      ;;
  stop)
      pkill -u quaker
      echo "Quake3 Server stopped. "
      ;;
  restart)
      $0 stop
      sleep 1
      $0 start
      ;;
      *)
      echo "Usage $0 {start|stop|restart}"
      ;;
esac</pre></code>
Auch das Skript braucht den x-Flag, damit es startet:
<code><pre>chmod +x /etc/init.d/q3ded</pre></code>
Ihr könnt nun mit einem
 
<code><pre>/etc/init.d/q3ded start</pre></code>
den Server starten, oder wie folgt stoppen:
<code><pre>/etc/init.d/q3ded stop</pre></code>
Damit das Skript auch beim Starten der Maschine hochgefahren wird, gebt noch folgenden Befehl ein:
<code><pre>
cd /etc/init.d
update-rc.d q3ded defaults</pre></code>
Damit ist der Quake 3 Server ein ganz normaler Dienst auf Eurem Server.
<br><br>
 
==Buildscript für den Quake 3 Server==
Damit Ihr nicht jedes Mal selbst nachsehen müsst, ob eine neue Version zum Kompilieren vorliegt, habe ich mir ein kleines Skript gebaut, dass folgendes macht:
:# Einmal am Tag prüfen, ob eine neue Version vorhanden
:# Falls ja, neue Quellen herunterladen und kompilieren
:# Alte Dateien mit den neuen ersetzen und ioQuake 3 Server neu starten
:# Neue Dateien als tar.gz Paket zusammenpacken und in ein eigenes Verzeichnis kopieren
:# Mail versenden mit einen Hinweis über eine neue ioQuake 3 Version
Legt eine neue Datei an:
<code><pre>nano /usr/local/bin/q3check</pre></code>
Hier nun der Inhalt, den Ihr einkopiert und die Variablen im Kopf entsprechend bitte anpasst:
<code><pre>
#!/bin/bash
#script written by Gargi 2015 http://www.gargi.org
 
quakeuser=gameserver            // Der User, der den Quakeserver startet.
work_dir=/home/work            // Euer Arbeitsverzeichnis
files=/home/gameserver/files    // Das Verzeichnis, in dem das tar.gz Paket kopiert wird
fileuser=gameserver            // User, der auf das Paket zugreifen darf
server_cfg=server.cfg          // Name Eurer Q3 Serverkonfiguration
mailadresse=meine@mail.adresse  // Eure E-mail Adresse
madeat=$(date +%Y_%m_%d)
 
#before doing anything check server availability
ping -c 1 github.com
if [ $? != 0 ]; then
 
  echo "Server down, stopping now!"
 
  exit 1
 
else
 
#prepare version.txt
rm $work_dir/version_alt.txt
mv $work_dir/version.txt $work_dir/version_alt.txt
 
#get latest files
cd $work_dir
rm -R quake3
git clone git://github.com/ioquake/ioq3.git quake3
 
#write new version.txt
cd $work_dir/quake3
git show | grep -m 1 commit | cut -b 8-14 > $work_dir/version.txt
 
#check if something is to be done
  ver_neu=$(cat $work_dir/version.txt)
  ver_alt=$(cat $work_dir/version_alt.txt)
 
  if [ $ver_neu = $ver_alt ]; then
      rm $work_dir/aktuell.txt
      rm $work_dir/unveraendert.txt
      echo "Version $ver_neu unverändert" > $work_dir/unveraendert.txt
  exit 1
 
  else
      rm $work_dir/aktuell.txt
      rm $work_dir/unveraendert.txt
      echo "Version $ver_neu neu, beginne compile" > $work_dir/aktuell.txt
 
#build new linux version
      pkill -u $quakeuser
      rm -R /usr/local/games/quake3
      make -j5 copyfiles
 
#built date reminder
      rm $work_dir/built.txt
      date +%d.%m.%Y > $work_dir/built.txt
 
#server start
      su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec $server_cfg'
 
 
#upload installpackage
      cd /usr/local/games
      tar cf ioq3_git-$ver_neu.$madeat.tar .
      gzip ioq3_git-$ver_neu.$madeat.tar
      cp ioq3_git-$ver_neu.$madeat.tar.gz /$files/
      chown $fileuser:$fileuser /$files/ioq3_git-*.tar.gz
      rm /usr/local/games/*.gz
 
 
#call the boss
      rm /var/log/quakeready.log
      echo "Sir, your Quake is ready! New version is git-$ver_neu . Server is up and running!" > /var/log/quakeready.log
      mail -s "Your Quake is ready!" $mailadresse < /var/log/quakeready.log
 
    fi
 
fi
</pre></code>
Nach dem Speichern machen wir die Datei noch ausführbar:
<code><pre>chmod +x /usr/local/bin/q3check</pre></code>
Jetzt legt noch in der '''crontab''' fest, wann das Skript starten soll:
 
<code><pre>crontab -e</pre></code>
 
Am Schluss fügt folgendes ein:
 
<code><pre># Check for new Quakefiles at 6 o clock morning
1  6    * * *  /usr/local/bin/q3check > /dev/null</pre></code>
 
Speichert die Änderung. <br><br>
Happy Quaking!
<br><br>
 
==Links==
[http://www.ioquake3.org ioquake3 Projekt Seite]<br>
[http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br>
[http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br>
[http://www.debian.org Debian Linux]<br>
 
<br>
Pierre "Gargi" Kretschmer

Aktuelle Version vom 30. Juni 2018, 12:15 Uhr

Das Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Der_dedizierte_Quake3_Server