Ioquake3 Server und Build Service: Unterschied zwischen den Versionen

Aus MySlug
Zur Navigation springen Zur Suche springen
Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Ioquake3_Server_und_Build_Service“
Markierung: Ersetzt
 
(40 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">
Dieses Tutorial wurde auf Gargi.org verschoben: https://www.gargi.org/index.php?title=Ioquake3_Server_und_Build_Service
__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 ist auf dem SVN icullus Server hinterlegt, auf dem sich viele Linux Projekte aus dem Spielesektor befinden. 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. Zudem verwende ich sowohl Debian als auch openSUSE. Wobei Debian meine Wahl der Serversoftware ist und openSUSE auf meinem Desktop zum Einsatz kommt und nur wenig hierüber berichtet wird (bis auf die Anleitung, ioq3 unter openSUSE zu kompilieren). 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.<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>
==Dedicated Server auf Linux==
Ich verwende hierfür ein Debian Linux Lenny (64 bit) auf einem intel Atom 270er Server mit 2GB Ram. Die Entwicklertools sollten hierfür installiert sein:
<code><pre>apt-get install build-essentials</pre></code>
Installiert zudem noch folgende Pakete:
<code><pre>apt-get install screen libcurl4-openssl-dev libsdl1.2-dev libopenal-dev</pre></code>
Jetzt ziehen wir uns den Quellcode. In einem Buildverzeichnis führt folgenden Befehl aus:
<code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code>
Danach wechselt in das '''quake3''' Verzeichnis:
<code><pre>cd quake3</pre></code>
Kompiliert nun das Game:
<code><pre>make USE_LOCAL_HEADERS=0</pre></code>
Multicore CPU Besitzer starten den Vorgang mit einem
<code><pre>make -j3 USE_LOCAL_HEADERS=0</pre></code>
Danach installiert alles mit einem
<code><pre>make copyfiles</pre></code>
Die Installationsdateien landen somit erstmal alle 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.x86_64 /bin/q3ded</pre></code>
Wir wollen nun das Spiel nicht als root ausführen, also legen wir uns einen eigenen User mit einem eigenen Homeverzeichnis dafür an:
<code><pre>adduser gameserver</pre></code>
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>
 
==Windows Client via mingw Crosscompiler==
Interessant ist nun, wie man das Teil für Windows kompiliert. Wir werden in diesem Howto einen etwas "anderen" Weg dafür über Linux geben, da hierfür die Compiler recht einfach zu installieren und zu handaben sind. Als Buildumgebung nutze ich ein Debian Linux 5 Lenny.
<br><br>
Zunächst installieren wir entsprechende die Buildfiles und noch ein paar Kleinigkeiten nach:
 
<code><pre>apt-get install subversion libcurl4-openssl-dev libsdl1.2-dev libopenal-dev build-essentials</pre></code>
 
Das zieht noch einige Pakete nach.
<br><br>
Jetzt benötigen wir den Crosscompiler, der uns hilft, Windowsdateien zu bauen:
 
<code><pre>apt-get install  apt-get install mingw32 mingw32-runtime mingw32-binutils</pre></code>
 
Das war's dann auch schonmal für's erste an neuen Dateien.
<br><br>
Jetzt legen wir uns ein Buildverzeichnis an und wechseln dorthin:
 
<code><pre>mkdir work
cd work</pre></code>
 
Nun holen wir uns den aktuellen Quellcode:
 
<code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code>
 
Danach in das Quellverzeichnis wechseln:
 
<code><pre>cd quake3</pre></code>
 
Und nun können wir schon mit dem Compile beginnen:
 
<code><pre>./cross-make-mingw.sh</pre></code>
 
Das kann jetzt eine kleine Weile dauern. Es sollte soweit alles fehlerfrei durchlaufen. Wenn fertig habt Ihr alle benötigten Dateien unter folgendem Verzeichnis:
<br><br>
'''/work/quake3/build/release-mingw32-x86'''
<br><br>
Diese kopiert dann (via ftp oder ähnliches) auf Euren Windowsrechner in ein beliebiges Verzeichnis:
<br><br>
'''---Q3A'''<br>
-ioq3ded.x86.exe<br>
-ioquake3.x86.exe<br>
'''---baseq3'''<br>
-cgamex86.dll<br>
-qagamex86.dll<br>
-uix86.dll<br>
'''---missionpack'''<br>
-cgamex86.dll<br>
-qagamex86.dll<br>
-uix86.dll<br>
<br>
Das alleine genügt natürlich noch nicht zum Spielen.<br>
<br>
<div style="float:left;text-align:center;padding-right:20px">
[[Bild:gaunt_kulli.jpg|Gauntlet]]
<br />
''Gauntlet mit Kulli gezeichnet''</div>
In das Verzeichnis baseq3 muss dann noch die Datei pak0.pk3 von Eurer Original CD kopiert werden. Dieses File (ca. 500MB) beinhaltet die ganzen Level, Modelle, Texturen etc. und ist dementsprechend urheberrechtlich geschützt.
<br><br>
Um nun alle Patches zu verwenden macht einfach folgendes: Ladet Euch ein vorkompiliertes ioquake3 Pakete für Windows hier herunter: [http://ioquake3.org/get-it Get it | ioquake3]
<br><br>
Alternativ gibt es auch die aktuellen pak file Updates unter folgender URL: [http://ioquake3.org/patch-data http://ioquake3.org/patch-data]
<br><br>
Kopiert nach der Installation einfach aus dem baseq3 und missionpack Verzeichnis alle weiteren pak*.pk3 Dateien in Euer eigenes baseq3 Verzeichnis.
<br><br>
Zudem benötigt Ihr noch '''openAL''' für den Sound. Diese könnt Ihr falls noch nicht installiert hier herunterladen und installieren: [http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Downloads]
In Eurem Windows System Verzeichnis findet sich dann eine openAL32.dll. Dise kann natürlich auch gleich in das neue Q3A Stammverzeichnis (also dort wo sich die exe Dateien befinden) kopiert werden.
<br><br>
Last but not least muss noch eine '''SDL.dll''' her. Diese Medialibrary bekommt Ihr unter folgender URL: [http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer]
Ladet die entsprechende win32 zip Datei herunter und packt die SDL.dll ebenso in das Rootverzeichnis Eurer Q3A Installation (auch zu den exe - Dateien).
<br><br>
Das war's dann auch schon. Das Spiel kann dann über die ioquake3.x86.exe gestartet werden.
<br><br>
Testsystem bei mir: Kompiliert auf Debian Lenny 5 64bit intel Atom 270
Windowsmaschine: intel C2D 8400, Windows Vista 64bit.
<br><br>
Wenn alles sauber läuft, dann startet das Game durch und Ihr habt in der Konsole einen in etwa so aussehenden Output:
 
<code><pre>4073 files in pk3 files
execing default.cfg
execing q3config.cfg
couldn't exec autoexec.cfg
Hunk_Clear: reset the hunk ok
----- Client Initialization -----
Couldn't read q3history.
----- Initializing Renderer ----
-------------------------------
QKEY found.
----- Client Initialization Complete -----
----- R_Init -----
SDL using driver "directx"
Initializing OpenGL display
Estimated display aspect: 1.250
...setting mode 8: 1280 1024
Using 8/8/8 Color bits, 24 depth, 0 stencil display.
Available modes: '1280x1024 720x576 640x480 800x600 1024x768 1152x864 1280x960 720x480 960x600 1280x800
1280x768 848x480 1280x720'
GL_RENDERER: GeForce 8800 GT/PCI/SSE2
Initializing OpenGL extensions
...ignoring GL_EXT_texture_compression_s3tc
...ignoring GL_S3_s3tc
...using GL_EXT_texture_env_add
...using GL_ARB_multitexture
...using GL_EXT_compiled_vertex_array
...ignoring GL_EXT_texture_filter_anisotropic
 
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: GeForce 8800 GT/PCI/SSE2
GL_VERSION: 3.0.0
GL_EXTENSIONS: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_instanced
GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader
GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_framebuffer_object
[...]
 
GL_MAX_TEXTURE_SIZE: 8192
GL_MAX_TEXTURE_UNITS_ARB: 4
 
PIXELFORMAT: color(24-bits) Z(24-bit) stencil(0-bits)
MODE: 8, 1280 x 1024 fullscreen hz:N/A
GAMMA: hardware w/ 0 overbright bits
rendering primitives: single glDrawElements
texturemode: GL_LINEAR_MIPMAP_LINEAR
picmip: 0
texture bits: 0
multitexture: enabled
compiled vertex arrays: enabled
texenv add: enabled
compressed textures: disabled
Initializing Shaders
----- finished R_Init -----
------ Initializing Sound ------
Loading "OpenAL32.dll"...
Allocated 96 sources.
OpenAL default capture device is 'Mikrofon (USB Audio)'
OpenAL capture device opened.
OpenAL info:
  Vendor:    Creative Labs Inc.
  Version:    1.1
  Renderer:  Software
  AL Extensions: EAX EAX2.0 EAX3.0 EAX4.0 EAX5.0 EAX3.0EMULATED EAX4.0EMULATED AL_EXT_OFFSET
AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE
  ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_EFX
  Device:    ******* Software
Available Devices:
SB Audigy 4 [D000]
******* Software
Sound initialization successful.
--------------------------------
Loading vm file vm/ui.qvm...
VM file ui compiled to 594408 bytes of code
ui loaded in 1368576 bytes on the hunk
35 arenas parsed
32 bots parsed</pre></code>
<br><br>
 
==Crosscompiler auf openSUSE==
<div style="float:right;padding-left:20px">
[[Bild:toolchain1.png|YAST]]
</div>
Um den freien Port ioquake3 des id Shooters Q3A via Crosscompiler auf openSUSE für Microsoft Windows zu übersetzen, müssen wir zuerst den Compiler mingw installieren. Hiefür müssen wir ein neues Repository unter YAST anlegen, da der mingw nicht in den Standard Repositories zu finden ist.
<br><br>
Das Repository findet Ihr unter folgender Adresse:
<br><br>
'''SERVER:''' [http://download.opensuse.org http://download.opensuse.org]<br>
<br>
'''VERZEICHNIS:''' repositories/CrossToolchain:/mingw/openSUSE_11.1<br>
 
<br>
Tragt diese Informationen wie im rechten Bild zu sehen ein und übernehmt die Änderung. Es wird zudem noch ein Sicherheitsschlüssel mit installiert.
<br><br>
Danach könnt Ihr über YAST folgende Pakete installieren:
<br><br>
* cross-mingw-binutils<br>
* cross-mingw-gcc<br>
* cross-mingw-runtime<br>
* cross-mingw-w32api<br>
<br>
Das sollte im Yast dann ungefähr wie folgt aussehen:<br>
<br>
Nach der Installation müssen noch folgende Links angelegt werden:
 
<code><pre>ln -s /opt/cross/bin/i386-mingw32msvc-gcc /bin/i586-mingw32msvc-gcc
cp i386-mingw32msvc-windres /bin/i586-mingw32msvc-windres</pre></code>
 
Letzteres ging bei mir nur als entsprechende Kopie nach '''/bin''' , da sich der Kompiler über zu viel Ebenen einer symbolischen Verlinkung beschwerte.
<br><br>
Jetzt legen wir uns im Homeverzeichnis unseres Users ein Buildverzeichnis '''work''' an:
 
<code><pre>mkdir work</pre></code>
 
Dort laden wir uns die aktuellen Quellen herunter:
 
<code><pre>svn co svn://svn.icculus.org/quake3/trunk quake3</pre></code>
 
Danach wechseln wir in das Verzeichnis quake3:
<code><pre>
cd quake3</pre></code>
 
Dort stoßen wir dann den Kompile an:
 
<code><pre>./cross-make-mingw.sh</pre></code>
 
Nach einer kurzen Wartezeit solltet Ihr dann nun unter dem Verzeichnis '''quake3/build/release-mingw32-x86''' Eure fertigen Dateien finden. Diese könnt Ihr dann auf Euren Windowsrechner wie gewohnt installieren.
<br><br>
 
==Q3mon installieren==
Der [http://www.qxmon.net/q3mon-browser.pl Q3mon] ist ein Servermonitor, der auf Perl geschrieben ist. Damit dieser auf Eurem Webserver läuft muss ersteinmal das Perl Modul für den Apache installiert werden:
 
<code><pre>apt-get install libapache2-mod-perl2</pre></code>
 
Damit das Perl aktiv wird muss der Server neu gestartet werden. Da wir aber eh noch etwas an der Konfiguration basteln müssen, genügt es, wenn wir das am Schluss erledigen.
<br><br>
Wir benötigen zuerst die q3mon Dateien, die wir von folgender URL herunterladen:
 
[http://files.dev1ance.net/quake3/q3mon/ http://files.dev1ance.net/quake3/q3mon/]
 
Wir packen das Paket aus und laden das Verzeichnis q3mon auf unseren Webserver hoch. Legt dieses Verzeichnis am besten nicht in Euer normales Apache Dokumenten Verzeichnis, sondern wir legen dann einen Allias an, der den entsprechenden Zugriff regelt.
<br><br>
Vergebt nun für das Verzeichnis q3mon die Dateirechte auf 755:
 
<code><pre>chmod -R 755 q3mon</pre></code>
 
Nun benötigen wir noch die qstat, die zunächst kompiliert werden müssen. Dazu laden wir uns die aktuelle Version von folgender URL herunter:
<br><br>
[http://sourceforge.net/projects/qstat/ http://sourceforge.net/projects/qstat/]<br>
<br>
Das tar.gz wird dann mit einem
 
<code><pre>tar zvxf *.tar.gz </pre></code>
 
in Eurem Buildverzeichnis entpackt. Wechselt in das neu entstandene qstat Verzeichnis und bereitet den Compile vor:
 
<code><pre>./configure</pre></code>
 
Danach werden die Quellen übersetzt:
 
<code><pre>make </pre></code>
 
und installiert:
 
<code><pre>make install</pre></code>
 
Jetzt editieren wir noch die Apache Konfigurationsdatei '''/etc/apache2/sites-enabled/000-default'''<br>
Hier fügen wir direkt über den </VirtualHost> folgenden Abschnitt ein:
 
<code><pre>    Alias /q3mon /[COLOR="Red"]EUER_PFAD[/COLOR]/q3mon
      <Directory /[COLOR="red"]EUER_PFAD[/COLOR]/q3mon>
      Options ExecCGI Indexes FollowSymLinks MultiViews
      AddHandler cgi-script .cgi .pl
      AllowOverride None
      DirectoryIndex index.php index.htm index.html
      Order allow,deny
      allow from all
    </Directory></pre></code>
 
Startet nun den Apache neu, nachdem Ihr die Änderung gespeichert habt:
 
<code><pre>/etc/init.d/apache2 restart</pre></code>
 
Danach ruft die q3mon in Eurem Browser auf: [EURE_URL]/q3mon<br><br>
 
Jetzt könnt Ihr schonmal nach den Quakeservern suchen.
<br><br>
 
==Einfaches Buildservice Script==
<div style="float:left;text-align:center;padding-right:20px">
[[Bild:map.png|map]]
</div>Im Folgenden erkläre ich eine Möglichkeit, eine Art kleinen Buildservice für den ioquake3 dedicated Linux Server und dem Windows Client einzirichten. Dieses Howto richtet sich zudem an Leute mit etwas fortgeschritteneren Linuxkenntnisse.
<br>
Meine Überlegung war, ein Script zu schreiben, dass den dedicated Linux ioquake3 Server immer auf den aktuellen Stand hält und parallel dazu den aktuellen Windows Client via Crosskompiler übersetzt und mit den benötgigten upgedateten pk3 Dateien zur Verfügung stellt. Das Script soll dann über einen Cron Job regelmäßig (am besten einmal pro Tag) ausgeführt werden. Es prüft dann, ob eine neue Version auf dem SVN Tree zur Verfügung steht. Dann holt es sich die aktuellen Quelldateien, übersetzt den Server, ersetzt die aktuellen Serverdateien und startet diesen neu. Danach baut es den Windowsclient und stellt sowohl den Server als auch den Client als zwei gepackte Dateien auf dem FTP Server zum Download bereit. Wenn dies fertig gestellt ist, soll das Script uns via E-Mail benachrichtigen.
<br><br>
'''Folgendes muss eingerichtet sein und funktionieren:'''
* Der Windows Client muss sich kompilieren lassen <br>
* Der dedicated Server muss sich kompilieren lassen <br>
* Der dedicated Server läuft auf der Maschine <br>
* Der Exim oder ein entsprechender MTA sollte laufen <br>
* Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN<br>
* Screen muss installiert sein<br>
* Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden:
<code><pre>iptables -A OUTPUT -p ICMP            --icmp-type echo-request -j ACCEPT
iptables -A INPUT  -p ICMP                --icmp-type echo-reply  -j ACCEPT</pre></code>
 
Jetzt legen wir unter '''/usr/bin''' eine neue Datei an, z.B. '''ioq3build''' und machen diese ausführbar:
 
<code><pre>chmod +x /usr/bin/ioq3build</pre></code>
 
Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird:
 
<code><pre>mkdir /work</pre></code>
 
Zudem legen wir auf unserem FTP Verzeichnis auf dem Server den Inhalt des letzten ioq3 Windows Client ab, den wir von der ioquake3.org wie im Windows Tutorial heruntergeladen haben. Dazu kopieren wir nur die pk3 Datein, Lizenstexte gemäß EULA und GPLv.2 (siehe [URL="http://wiki.ioquake3.org/Installer_Features"]hier[/URL]) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort '''ioq3files''' heißt):
<br><br>
-ioq3files (Verzeichnis)<br>
--openAL.dll<br>
--SDL.dll<br>
--Copying.txt<br>
--CopyingXYZ.txt<br>
--baseq3 (Verzeichnis)<br>
--- pak1.pk3<br>
--- pak2.pk3<br>
...<br>
--- pak8.pk3<br>
--missionpack (Verzeichnis)<br>
--- pak1.pk3<br>
--- pak2.pk3<br>
--- pak3.pk3<br>
<br>
Das war's dann mit den entsprechenden Vorbereitungen. Jetzt füllt Euer Script wie nun im Folgenden aufgeführt. An den entsprechenden Stellen müsst Ihr noch eventuell Anpassungen vornehmen. Ich erkläre den Aufbau ersteinmal und zeigen das Script dann nochmal an einem Stück. Natürlich sollte es erst manuell ausgeführt und geprüft werden bevor Ihr einen Eintrag in die '''/etc/crontab''' macht, um es automatisch arbeiten zu lassen.
 
<code><pre>#!/bin/bash
 
quakeuser=blah
files=/home/blah/files
fileuser=blah
buildfiles=/home/blah/q3abuildfiles
mailadresse=blah</pre></code>
 
Im Kopfbereich legen wir zunächst einige Variablen fest. Während das Script darauf aufbaut, dass sich alles in einem Verzeichnis /work abspielt können diverse Einstellungen im Kopfbereich gemacht werden:
<br><br>
'''quakeuser:''' Der Nutzeraccount, unter dem der Server normalerweise läuft. Der Quake3 Server sollte nicht als root betrieben werden, sondern extra dafür ein eigener Nutzeraccount eingerichtet werden.
<br><br>
'''files:''' Hier werden dann später unsere fertigen Pakete landen. Idealerweise ist das ein Verzeichnis, das dann per ftp erreichbar ist und man die fertigen Pakete herunterladen kann.
<br><br>
'''fileuser:''' Der Nutzername, unter dem der ftp läuft.
<br><br>
'''buildfiles:''' In diesem Verzeichnis findet dann unser Script die zusätzlichen Dateien, die er zum bündeln für den Windowsclient benötigt. Das sind ein paar fertige dlls und natürlich die pk3 Dateien aus dem letzten Patch.
<br><br>
'''mailadresse:''' Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist.
 
 
<code><pre>
#before doing anything check server availability
ping -c 1 svn.icculus.org
if [ $? != 0 ]; then
 
  echo "Server down, stopping now!"
 
  exit 1
 
else
</pre></code>
 
Hier wird erstmal überprüft, ob der icculus Server erreichbar ist. Wenn dieser down sein sollte, oder mal keine Internetverbindung steht, dann bricht das Script ab. Sollte der Server erreichbar sein, dann geht es weiter:
 
<code><pre>
#prepare version.txt
rm /work/version_alt.txt
mv /work/version.txt /work/version_alt.txt
 
#get latest files
cd /work
svn info svn://svn.icculus.org/quake3/trunk  > /work/checkout.txt
</pre></code>
Hier bereiten wir dann den Versionscheck vor. Zuerst wird die alte Versionsdatei, in der die letzte Versionsnummer gespeichert ist umbenannt. Dann rufen wir die Informationen aus dem svn Zeig ab und speichern den output in einer Datei "checkout.txt". Dort befindet sich die aktuelle Versionsnummer, die ausgelesen werden muss:
 
<code><pre>
#checkout if something is to be done
  if [ $LANG = de_DE.UTF-8 ]; then
 
      cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt
 
  else
 
      cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt
 
  fi
 
  rm /work/checkout.txt
</pre></code>
Jetzt wird zunächst festgestellt, in welcher Sprache das Script läuft. Wird das Script über den cron Dämon gestartet, dann ist die Umgebungssprache englisch. Habt Ihr eine Konsole offen und startet das Script manuell, dann wird unter dem aktuellen Debian die Sprache auf Deutsch gestellt sein. Das Script prüft nun, welche Sprache verwendet wird. Je nach der Sprache schneidet dieses dann die Versionsnummer aus der checkout Datei und speichert die neue Versionsnummer in der Datei '''version.txt''' ab.
 
<code><pre>
  ver_neu=$(cat version.txt)
  ver_alt=$(cat version_alt.txt)
 
  if [ $ver_neu = $ver_alt ]; then
      rm /work/aktuell.txt
      rm /work/unveraendert.txt
      echo "Version $ver_neu unverändert" > /work/unveraendert.txt
  exit 1
 
  else
      rm /work/aktuell.txt
      rm /work/unveraendert.txt
      echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt
      cd /work
</pre></code>
Der nächste Abschnitt ist simpel. Es wird nun verglichen, ob die neue Versionsnummer von der alten abgespeicherten abweicht. Hat sich diese zur letzten Überprüfung nicht verändert, beendet sich das Script. Es gibt schließlich nichts zu tun. Ist die Nummer anders, dann liegt eine Änderung vor und das Script beginnt, die neue Version zu bauen:
 
<code><pre>
#clean out old svn get new sources
      rm -R /work/quake3
      svn co svn://svn.icculus.org/quake3/trunk quake3
</pre></code>
 
Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen.
 
<code><pre>
      cd /work/quake3
      make -j3
</pre></code>
 
Dann beginnt der Compile. Wenn Ihr einen Dualcore Prozessor oder noch mehr Kerne einsetzt, dann startet den make mit dem Parameter -j3 . Die 3 resultiert aus 2 Kerne + 1 . Wenn es also 4 Kerne sind, dann lautet der Parameter -j5.
 
<code><pre>
      pkill -u $quakeuser
      rm -R /usr/local/games/quake3
 
#quake install
      make copyfiles
 
#built date reminder
      rm /work/built.txt
      date +%d.%m.%Y > /work/built.txt
 
#server start
      su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg'
</pre></code>
 
Im nächsten Abschnitt wird dann der laufende Quake3 Server beendet, das alte Quake3 Verzeichnis gelöscht und der neue Server installiert. In der Datei built.txt wird dann nur das Datum hinterlegt, das eventuell von einer anderen Datei noch verwendet werden kann (q3mon Statistik eventuell). Danach wird der Server mit den Benutzerrechten des Quakeusers innerhalb einer Screensession gestartet. Ihr könnt Euch später dann als Quakeuser via ssh anmelden und dann die Session mittels '''screen -R '''wieder aufrufen. In dieser Zeile müsst Ihr noch entsprechend den Namen der Konfigurationsdatei anpassen. Bei mir heisst diese death.cfg.
 
<code><pre>
#upload installpackage
      cd /usr/local/games
      tar cf quake3$ver_neu.tar .
      gzip quake3$ver_neu.tar
      cp quake3$ver_neu.tar.gz /$files/
      chown $fileuser:$fileuser /$files/quake3*.tar.gz
      rm /usr/local/games/*.gz
</pre></code>
Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben.
 
<code><pre>
#build windows client
      cd /work/quake3
      make clean
      ./cross-make-mingw.sh
</pre></code>
Hier wird der Windowsclient über den Crosscompiler gebaut.
 
<code><pre>
    mkdir /work/temp
      mkdir /work/temp/ioquake3_$ver_neu
      mkdir /work/temp/ioquake3_$ver_neu/missionpack
      mkdir /work/temp/ioquake3_$ver_neu/baseq3
      cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/
      cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/
      cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/
      cp $buildfiles/* /work/temp/ioquake3_$ver_neu/
      cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/
      cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/
</pre></code>
Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert.
 
<code><pre>
#pack and upload client version
      cd /work/temp/
      zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu
      cp ioquake3_$ver_neu.zip /$files/
      chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip
 
#remove temporary files
      cd /work
      rm -R /work/temp
</pre></code>
Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt.
 
<code><pre>
#call the boss
      rm /var/log/quakeready.log
      echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch
            > /var/log/quakeready.log
      mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch
          $mailadresse < /var/log/quakeready.log
 
    fi
 
fi</pre></code>
{{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}
Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert.
<br><br>
Hier nocheinmal das Script an einem Stück:
 
<code><pre>#!/bin/bash
 
quakeuser=blah
files=/home/blah/files
fileuser=blah
buildfiles=/home/blah/q3abuildfiles
mailadresse=blah
 
#before doing anything check server availability
ping -c 1 svn.icculus.org
if [ $? != 0 ]; then
 
  echo "Server down, stopping now!"
 
  exit 1
 
else
 
#prepare version.txt
rm /work/version_alt.txt
mv /work/version.txt /work/version_alt.txt
 
#get latest files
cd /work
svn info svn://svn.icculus.org/quake3/trunk  > /work/checkout.txt
 
#checkout if something is to be done
  if [ $LANG = de_DE.UTF-8 ]; then
 
      cat /work/checkout.txt | grep Rev: | cut -b 24-27 > /work/version.txt
 
  else
 
      cat /work/checkout.txt | grep Rev: | cut -b 19-22 > /work/version.txt
 
  fi
 
  rm /work/checkout.txt
 
  ver_neu=$(cat version.txt)
  ver_alt=$(cat version_alt.txt)
 
  if [ $ver_neu = $ver_alt ]; then
      rm /work/aktuell.txt
      rm /work/unveraendert.txt
      echo "Version $ver_neu unverändert" > /work/unveraendert.txt
  exit 1
 
  else
      rm /work/aktuell.txt
      rm /work/unveraendert.txt
      echo "Version $ver_neu neu, beginne compile" > /work/aktuell.txt
      cd /work
 
#clean out old svn get new sources
      rm -R /work/quake3
      svn co svn://svn.icculus.org/quake3/trunk quake3
      cd /work/quake3
      make -j3
      pkill -u $quakeuser
      rm -R /usr/local/games/quake3
 
#quake install
      make copyfiles
 
#built date reminder
      rm /work/built.txt
      date +%d.%m.%Y > /work/built.txt
 
#server start
      su $quakeuser -c 'screen -d -m q3ded +set dedicated 2 +com_hunkMegs 64 +exec death.cfg'
 
#upload installpackage
      cd /usr/local/games
      tar cf quake3$ver_neu.tar .
      gzip quake3$ver_neu.tar
      cp quake3$ver_neu.tar.gz /$files/
      chown $fileuser:$fileuser /$files/quake3*.tar.gz
      rm /usr/local/games/*.gz
 
#build windows client
      cd /work/quake3
      make clean
      ./cross-make-mingw.sh
      mkdir /work/temp
      mkdir /work/temp/ioquake3_$ver_neu
      mkdir /work/temp/ioquake3_$ver_neu/missionpack
      mkdir /work/temp/ioquake3_$ver_neu/baseq3
      cp /work/quake3/build/release-mingw32-x86/*.exe /work/temp/ioquake3_$ver_neu/
      cp /work/quake3/build/release-mingw32-x86/baseq3/*.dll /work/temp/ioquake3_$ver_neu/baseq3/
      cp /work/quake3/build/release-mingw32-x86/missionpack/*.dll /work/temp/ioquake3_$ver_neu/missionpack/
      cp $buildfiles/* /work/temp/ioquake3_$ver_neu/
      cp $buildfiles/baseq3/* /work/temp/ioquake3_$ver_neu/baseq3/
      cp $buildfiles/missionpack/* /work/temp/ioquake3_$ver_neu/missionpack/
 
#pack and upload client version
      cd /work/temp/
      zip -r ioquake3_$ver_neu.zip ioquake3_$ver_neu
      cp ioquake3_$ver_neu.zip /$files/
      chown $fileuser:$fileuser /$files/ioquake3_$ver_neu.zip
 
#remove temporary files
      cd /work
      rm -R /work/temp
 
#call the boss
      rm /var/log/quakeready.log
      echo "Sir, your Quake is ready! Get revision $ver_neu from your ftp. Server is up and running!" //Zeilenumbruch
            > /var/log/quakeready.log
      mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" //Zeilenumbruch
            $mailadresse < /var/log/quakeready.log
 
    fi
 
fi</pre></code>
{{Hinweis|Bitte achtet im Script auf den Hinweis //Zeilenumbruch. Diesen bitte entfernen und die darunterliegende Zeile mit der oberen wieder zusammenfügen, sonst produziert das Skript Fehler!}}
Wenn das Script nach ein paar manuellen Testläufen funktioniert könnt Ihr dieses über einen Cronjob nun laufen lassen. Dann solltet Ihr immer auf dem aktuellen Stand sein.
<br><br>
 
==Links==
[http://www.ioquake3.org ioquake3 Projekt Seite]<br>
[http://www.mingw.org mingw Crosscompiler Projekt]<br>
[http://www.pro-linux.de/spiele/quake3ded.html Pro-Linux - Quake 3 Arena Server]<br>
[http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx Creative Labs - OpenAL]<br>
[http://www.libsdl.org/download-1.2.php Simple DirectMedia Layer (SDL)]<br>
[http://www.qxmon.net/q3mon-browser.pl Q3mon Quake3 Serverbrowser]<br>
[http://sourceforge.net/projects/qstat/ Qstat Projekt]<br>
[http://www.debian.org Debian Linux]<br>
[http://www.opensuse.org openSUSE Linux]<br>
[http://www.gargi.org Gargi.org - Page und Forum]<br>
<br>
{{Frage|Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter [http://www.gargi.org http://www.gargi.org]. Die Anmeldung und Nutzung des Forums ist kostenlos.}}
<br>
Pierre "Gargi" Kretschmer

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

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