Gargi
18.04.2009, 00:36
http://www.gargi.org/stuff/serverprojekt/map.pngIm 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.
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.
Folgendes muss eingerichtet sein und funktionieren:
Der Windows Client muss sich kompilieren lassen (HOWTO (http://www.gargi.org/showthread.php?goto=newpost&t=1420))
Der dedicated Server muss sich kompilieren lassen (HOWTO (http://www.gargi.org/showthread.php?t=1416))
Der dedicated Server läuft auf der Maschine (HOWTO (http://www.gargi.org/showthread.php?t=1416))
Der Exim oder ein entsprechender MTA sollte laufen (wird unter anderem hier (http://www.gargi.org/showthread.php?t=1387) erklärt)
Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN
Screen muss installiert sein
Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden:
iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT
Jetzt legen wir unter /usr/bin eine neue Datei an, z.B. ioq3build und machen diese ausführbar:
chmod +x /usr/bin/ioq3build
Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird:
mkdir /work
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 hier (http://wiki.ioquake3.org/Installer_Features)) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort ioq3files heißt):
-ioq3files (Verzeichnis)
--openAL.dll
--SDL.dll
--Copying.txt
--CopyingXYZ.txt
--baseq3 (Verzeichnis)
--- pak1.pk3
--- pak2.pk3
...
--- pak8.pk3
--missionpack (Verzeichnis)
--- pak1.pk3
--- pak2.pk3
--- pak3.pk3
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.
#!/bin/bash
quakeuser=blah
files=/home/blah/files
fileuser=blah
buildfiles=/home/blah/q3abuildfiles
mailadresse=blah
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:
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.
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.
fileuser: Der Nutzername, unter dem der ftp läuft.
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.
mailadresse: Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist.
#before doing anything check server availability
ping -c 1 svn.icculus.org
if [ $? != 0 ]; then
echo "Server down, stopping now!"
exit 1
else
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:
#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
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:
#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
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.
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
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:
#clean out old svn get new sources
rm -R /work/quake3
svn co svn://svn.icculus.org/quake3/trunk quake3
Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen.
cd /work/quake3
make -j3
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.
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'
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.
#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
Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben.
#build windows client
cd /work/quake3
make clean
./cross-make-mingw.sh ARCH=x86
Hier wird der Windowsclient über den Crosscompiler gebaut.
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/*.dll /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/
Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert.
#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
Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt.
#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!" > /var/log/quakeready.log
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" $mailadresse < /var/log/quakeready.log
fi
fi
Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert.
Hier nocheinmal das Script an einem Stück:
#!/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 ARCH=x86
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/*.dll /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!" > /var/log/quakeready.log
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" $mailadresse < /var/log/quakeready.log
fi
fi
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.
Viel Spaß!
Euer
Gargi
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.
Folgendes muss eingerichtet sein und funktionieren:
Der Windows Client muss sich kompilieren lassen (HOWTO (http://www.gargi.org/showthread.php?goto=newpost&t=1420))
Der dedicated Server muss sich kompilieren lassen (HOWTO (http://www.gargi.org/showthread.php?t=1416))
Der dedicated Server läuft auf der Maschine (HOWTO (http://www.gargi.org/showthread.php?t=1416))
Der Exim oder ein entsprechender MTA sollte laufen (wird unter anderem hier (http://www.gargi.org/showthread.php?t=1387) erklärt)
Dieser Port muss freigegeben sein, wenn iptables aktiv sind:TCP OUT 3690 für SVN
Screen muss installiert sein
Für das Pingen an einen anderen Rechner um festzustellen, dass dieser online ist muss noch im Firewallscript folgendes ergänzt werden:
iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT
Jetzt legen wir unter /usr/bin eine neue Datei an, z.B. ioq3build und machen diese ausführbar:
chmod +x /usr/bin/ioq3build
Im Hauptverzeichnis des Servers legen wir noch ein Workdirectory an, unter dem in Zukunft alles abgewickelt wird:
mkdir /work
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 hier (http://wiki.ioquake3.org/Installer_Features)) und die dlls in die entsprechenden dazu angelegten baseq3 und missionpack Verzeichnisse. Also ungefähr so (wenn das Verzeichnis dort ioq3files heißt):
-ioq3files (Verzeichnis)
--openAL.dll
--SDL.dll
--Copying.txt
--CopyingXYZ.txt
--baseq3 (Verzeichnis)
--- pak1.pk3
--- pak2.pk3
...
--- pak8.pk3
--missionpack (Verzeichnis)
--- pak1.pk3
--- pak2.pk3
--- pak3.pk3
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.
#!/bin/bash
quakeuser=blah
files=/home/blah/files
fileuser=blah
buildfiles=/home/blah/q3abuildfiles
mailadresse=blah
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:
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.
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.
fileuser: Der Nutzername, unter dem der ftp läuft.
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.
mailadresse: Dies ist Eure Mailadresse, an der das Script die Mailbenachrichtigungen schickt, wenn ein Paket fertig ist.
#before doing anything check server availability
ping -c 1 svn.icculus.org
if [ $? != 0 ]; then
echo "Server down, stopping now!"
exit 1
else
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:
#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
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:
#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
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.
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
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:
#clean out old svn get new sources
rm -R /work/quake3
svn co svn://svn.icculus.org/quake3/trunk quake3
Hier wird dann der alte Quellcode gelöscht und der neue heruntergeladen.
cd /work/quake3
make -j3
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.
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'
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.
#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
Hier werden nun die Serverfiles zusammengepackt und auf Euren eigenen FTP Server in das entsprechend dafür vorgesehene Verzeichnis verschoben.
#build windows client
cd /work/quake3
make clean
./cross-make-mingw.sh ARCH=x86
Hier wird der Windowsclient über den Crosscompiler gebaut.
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/*.dll /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/
Ihr habt entsprechend die pk3 Files und dlls in Euer Dateiverzeichnis kopiert. Hier werden dann alle entsprechenden Filles zusammenkopiert.
#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
Nun noch die Windowsclientdateien gepackt und auch auf Euer FTP Verzeichnis geschoben. Danach alle temporären Verzeichnisse entfernt.
#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!" > /var/log/quakeready.log
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" $mailadresse < /var/log/quakeready.log
fi
fi
Jetzt geht noch eine E-Mail raus, die Euch über eine neue Version des ioquake3 informiert.
Hier nocheinmal das Script an einem Stück:
#!/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 ARCH=x86
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/*.dll /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!" > /var/log/quakeready.log
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Your Quake is ready!" $mailadresse < /var/log/quakeready.log
fi
fi
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.
Viel Spaß!
Euer
Gargi