Raspberry Pi – Urban Terror dedizierter Server
In diesem Tutorial verwenden wir den Raspberry Pi als Urban Terror dedizierter Server. Urban Terror ist ein Multiplayer Spiel, das auf der Quake 3 Engine basiert. Ich habe euch ja bereits gezeigt wie einfach man Quake 3 am Raspberry Pi installieren und flüssig spielen kann. Da war es nur wahrscheinlich auch andere Quake 3 Spiele am Pi laufen zu lassen.
Raspberry Pi – Urban Terror dedizierter Server
In der Folge ein ausführliches Todo:
Vorbereitung
Als erstes muss man sich Quake 3 laden:
git clone https://github.com/raspberrypi/quake3.git
Danach brauchen wir eine Kopie des ganzen Spiels. Aktuell braucht das Zip ganze 1. GB, d.h. eine große SD Karte ist zu empfehlen. Alternativ macht eine angeschlossene USB Festplatte Sinn. Ich habe alles auf einem 32 GB USB Stick installiert. Damit ist die Installation auch portabel und kann gegebenenfalls auf einem schnelleren System zum Einsatz kommen.
wget http://cdn.urbanterror.info/urt/43/releases/zips/UrbanTerror432_full.zip
als nächstes benötigen wir Tools, damit wir den Code compilieren können:
sudo apt-get install build-essential libsdl1.2-dev
die Installation dauert ein wenig. Da der Pi nur sehr begrenzten RAM Speicher hat und mit der SWAP Partition standardmäßig nur die selbe Größe als Auslagerungsspeicher bereitstellt erhöhen wir den Wert. Das heißt statt 512 MB RAM + 512 Auslagerung ändern wir die Konfiguration auf 512 MB RAM + 1024 MB Auslagerung. Diese Änderung ist alles andere als „normal“. Ein Rechner hat gewöhnlich Ressourcen um den kompletten RAM einmal Auszulagern. Da dieser Speicher aber derart langsam ist macht es keinen Sinn ihn zu erhöhen. Wir machen das nur, weil wir keine andere Möglichkeit haben!
sudo echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile sudo dphys-swapfile setup sudo dphys-swapfile swapon
solltet ihr keine Berechtigung dafür haben einfach die Datei /etc/dphys-swapfile mit dem Editor (zum Beispiel nano) öffnen und die Zeile CONF_SWAPSIZE=1024 ans Ende anfügen. Mit dem Linux Befehl top können wir diese Änderung überprüfen.
Änderungen
Nun müssen wir Quake 3 erstellen. Dafür öffnen wir das nötige Skript und ändern es wie folgt ab:
cd quake3 nano build.sh
wir tauschen die Zeile
ARM_LIBS=/opt/bcm-rootfs/opt/vc/lib
mit dieser aus:
ARM_LIBS=/opt/vc/lib
weiters die Zeile
INCLUDES="-I/opt/bcm-rootfs/opt/vc/include -I/opt/bcm-rootfs/opt/vc/include/interface/vcos/pthreads"
mit
INCLUDES="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads"
und zuletzt dann noch
CROSS_COMPILE=bcm2708-
mit
#CROSS_COMPILE=bcm2708-
Im nächsten Schritt müssen wir dann noch das Makefile bearbeiten. Wir öffnen dieses also und machen folgende Änderung:
nano Makefile
der Block
ifndef BUILD_CLIENT BUILD_CLIENT = endif ifndef BUILD_CLIENT_SMP BUILD_CLIENT_SMP = endif ifndef BUILD_SERVER BUILD_SERVER = endif
wird mit folgendem Code ersetzt:
ifndef BUILD_CLIENT BUILD_CLIENT = 0 endif ifndef BUILD_CLIENT_SMP BUILD_CLIENT_SMP = endif ifndef BUILD_SERVER BUILD_SERVER = 1 endif
Tipp: Mit STRG+W könnt ihr im nano Editor recht einfach danach suchen. Also ich habe nach BUILD_CLIENT_SMP gesucht und die Stelle gefunden.
Zuletzt müssen wir noch eine Datei anpassen. Wir wechseln also erneut das Verzeichnis und bearbeiten eine Datei, dieses Mal den Source Code:
cd code/qcommon/ nano vm_interpreted.c
Wir ändern den Block
case OP_STORE4: *(int *)&image[ r1&(dataMask & ~3) ] = r0; opStack -= 2; goto nextInstruction; case OP_STORE2: *(short *)&image[ r1&(dataMask & ~1) ] = r0; opStack -= 2; goto nextInstruction;
in
case OP_STORE4: *(int *)&image[ r1&(dataMask) ] = r0; opStack -= 2; goto nextInstruction; case OP_STORE2: *(short *)&image[ r1&(dataMask) ] = r0; opStack -= 2; goto nextInstruction;
Ganz nebenbei bemerkt sind diese goto Anweisungen im C Code ein NoGo! Was haben sich die Entwickler dabei damals gedacht?
Kompilieren
Wir gehen nun zurück in den Quake3 Ordner und starten den Kompilierungsprozess. Das geht einfach über das Script File. Gegebenenfalls müsse wir dessen Rechte anpassen:
chmod +x build.sh
nun starten wir den Build Prozess: ./build.sh jetzt müssen wir warten bis die Quake 3 Engine erstellt ist. Das kann je nach Rechenpower einige Minuten dauern....also erst mal einen Kaffee holen.
Probleme
Sollte der Build Prozess mit einem Fehler abgebrochen werden, dann muss man manuell eingreifen. Ich hatte Beispielsweise folgende Fehlermeldung:
/usr/bin/ld:lib/libSDL.so:1: syntax error collect2: error: ld returned 1 exit status
Abhilfe schafft:
cd lib rm libSDL.so ln -s libSDL-1.2.so.0.11.3 libSDL.so cd .. ./build.sh clean
Eine weitere Fehlermeldung bei der Kompilierung:
/usr/bin/ld: cannot find -lvmcs_rpc_client
war über die Entfernung von -lvmcs_rpc_client in der build.sh Datei zu lösen.
Nun sollte die Quake 3 Engine fehlerfrei erstellt werden. Jetzt können wir dann das Spiel endlich testen.
Testlauf
Vor dem ersten Testlauf müssen wir nun das Spiel entpacken. Das funktioniert so:
unzip UrbanTerror432_full.zip
zuletzt kopieren wir noch die für den Raspberry Pi kompilierte Quake 3 Engine in den Urban Terror Ordner:
cp quake3/build/release-linux-arm/ioq3ded.arm UrbanTerror43
die Datei ioq3ded.arm muss im selben Verzeichnis liegen wie das q3ut4 Verzeichnis.
Mit dem folgenden Befehl starten wir nun den Urban Terror Server auf dem Raspberry Pi:
./ioq3ded.arm +set fs_game q3ut4 +map ut4_company
Runtime Fehler
Möglicherweise erscheint bei euch nun folgender Fehler:
pak0.pk3 is missing. Please copy it
from your legitimate Q3 CDROM.
Wir benötigen für das Spiel die originalen Daten. Diese gibt es entweder auf der CD Rom von Quake 3 oder beispielsweise über den folgenden Link. Ich habe mir diese am Pi in einen eigenen Ordner baseq3 geladen. Die Files findet man unter http://files.anitalink.com/gamecache/quake3/baseq3/. Der baseq3 Ordner gehört dann in den UrbenTerror43 Ordner.
Falls man nicht die korrekten *.pak Dateien hat, dann bekommt man einen checksum error.
Die letzte Meldung die erscheint ist folgende:
couldn’t exec autoexec.cfg
dazu kopiert man im Ordner q3ut4 die vorhandene Beispielkonfiguration
cp autoexec_example.cfg autoexec.cfg
und los gehts!
Fazit
Urban Terror ist ein Spiel, das auf der Quake 3 Engine basiert. Da Quake 3 auf dem Raspberry Pi ruckelfrei läuft lag es auf der Hand das Spiel auch dort zu installieren. Der Pi eignet sich da aber besser als dedizierter Server als Client, wobei man beides ausführen kann!
Danke für das howto!
Ich habe den client compiliert, UrT startet zwar, aber ich bekomme keinen Zugang zum Masterserver um die serverliste herunterzuladen. Ich habe in den cfgs „master.urbanterror.info“ nachgetragen, habe es auch über die quake-console mit /cl_master versucht: leider hat nichts geklappt.
Starte ich quake3, also nicht UrT, läd es die quake3 listen runter.
Vielleicht hast Du ja noch eine Idee…
Die ut4_company Map wird nicht gefunden. Muss ich mir die Map besorgen, kann ich eine andere angeben oder kann der Befehl anderweitig modifiziert werden?