Lecker – Cube 2: Sauerbraten

Es ist angerichtet. Anstatt kulinarischer Spezialitäten gibt es heute jedoch das native Linuxspiel Cube 2: Sauerbraten. Zugegeben für all die, wo Deutsch als Muttersprache haben tun, klingt dieser Name für einen waschechten Ego-Shooter erst einmal seltsam in den Ohren. Scheinbar aber nicht für den Erschaffer des Spiels, Wouter „Aardappel“ van Oortmerssen. Wen sollte das bei seinem Spitznamen, "Kartoffel", auch wundern.
In diesem Beitrag stelle ich Cube 2: Sauerbraten vor, das seit mehr als vier Monaten zu meinem Spieleprojekt gehört. Ich beschreibe hier die wichtigsten Spielmerkmale, natürlich gibt es auch Bilder und Links und eine auf den Punkt gebrachte Anleitung, wie man selbst einen dedizierten und offenen Sauerbraten-Server mit Debian und Ubuntu aufsetzen kann.
Und was den Namen anbelangt...einfach Englisch aussprechen: Sourrrrbrrrääten. Perfekter Name für einen Ego-Shooter. 🙂

Warum Sauerbraten?

Nachdem ich mir ein paar Kriterien für in Frage kommende Spiele ausgedacht hatte, punktete Sauerbraten auf jeden Fall mit seinen außerordentlich geringen Hardwareanforderungen sowohl beim Client als auch beim Server.
Das Spiel ist schnell, wirklich schnell, genauso wie in den guten alten Zeiten. Neben 20 verschiedenen Spielmodi existieren auch noch mehr als 150 offizielle Karten, 7 Waffen, ein toller Soundtrack und ein bemerkenswertes Feature, neue Karten mit mehreren Spielern gleichzeitig online zu erschaffen. Von all den Spielen auf dem Server ist es jedoch am "unfreisten". Richard Stallman wird es vermutlich nie spielen. Die Spielengine und damit der Server ist zwar unter einer freien Lizenz verfügbar, große Teile der Mediendateien jedoch nicht.
Dennoch glaube ich, dass Sauerbraten eine Chance verdient hat, da das Spiel nicht nur die Möglichkeit bietet neue freie Inhalte zu schaffen, sondern auch schon Projekte wie Red Eclipse inspiriert hat, deren Medieninhalte unter freien Lizenzen stehen.

Der Sauerbraten-Client

aptitude install sauerbraten
Die Spielanforderungen von Sauerbraten sind moderat. Eine 1-GHz-CPU, 256MB RAM und eine Geforce 4 MX sollten es mindestens sein. Wer jemals einen Ego-Shooter gespielt hat, kennt das grundlegende Prinzip. So lässt sich auch Sauerbraten mit den W-A-S-D-Tasten steuern, mit Space springt der eigene Avatar, mit der linken Maustaste wird geschossen und mit kreisenden Mausbewegungen das Sichtfeld geändert.
Danach sind noch erwähnenswert:
R - Sollte man trotz aller Versuche in einer Ecke zu campen über die Flagge gestolpert sein, dann kann man sie mit einem Druck auf R wieder fallenlassen. 😉
T - öffnet den Chat. Auf einem öffentlichen Server ohne AUTH kann man mit der Eingabe von /setmaster 1 Masterrechte erlangen. Dazu gleich mehr.
E - Startet den Bearbeitungsmodus, in dem es möglich ist, innerhalb des Coop-Edit-Modus mit mehreren Mitspielern gleichzeitig eine Karte zu verändern oder neuzugestalten! Auf ogros.org gibt es eine nette Übersicht zu einer (englischen) Videoanleitung zum Thema.
Mehr ist wirklich nicht notwendig, um in das Spiel einsteigen zu können.

Serverbrowser und das Menü

Das Spielmenü und insbesondere der Serverbrowser könnten übersichtlicher gestaltet sein. Es gibt jedoch die Möglichkeit ein eigenes zu erstellen, wie dieser Artikel auf ogros.org beschreibt. Da die Voreinstellungen gut sind und man intuitiv in das Spiel findet, muss man sich hier nicht lange aufhalten. Unter Keys lassen sich die Tastenbelegungen ändern.

Cube Server Lister

Ich hatte den Cube Server Lister schon an anderer Stelle erwähnt. Wer sich mit dem normalen Serverbrowser nicht anfreunden kann, sollte sich die Zeit nehmen und der Anleitung folgen, wie man sich ein eigenes CSL-Debianpaket erstellen kann. Mit diesem Hilfsprogramm, dass unter der GPL veröffentlicht worden ist, lassen sich Details zu allen Cube-2-Servern anzeigen und mit einem Doppelklick auf den Servernamen des jeweiligen Spiels tritt man einem Spiel bei.

Spielmodi

Sauerbraten bietet ein Wiki mit einem Multiplayer Guide und eine umfangreiche Dokumentation.
Im Mehrspielermodus gehört man entweder dem guten oder dem bösen Team an. Mit leisen Zwischentönen halten wir uns natürlich nicht auf. Unabhängig davon gilt: Die roten Spieler sind immer die Gegner und mit den blauen spielt man in einem Team zusammen.
In Sauerbraten gibt es sieben verschiedene Waffen: Doppelläufige Schrotflinte, Minigun, Gewehr, Raketenwerfer, Granaten, Pistole, Fäuste/Kettensäge. Dazu lassen sich in den meisten Modi Gesundheit, Rüstung und Munition aufsammeln.
Das Spiel bietet zur Zeit 20 verschiedene Spielmöglichkeiten und in der aktuellen Entwicklerversion stehen schon weitere parat. Neben dem klassischen Free For All (FFA) und InstaGib, wo es einfach nur um "Jeder gegen Jeden" geht, gibt es natürlich auch noch Fahnenraub (alias Capture the Flag). Mir persönlich gefällt "Regen Capture" ziemlich gut, wo man auf einer relativ großen Karte verschiedene Punkte kontrollieren muss. An einer eroberten Station erhält man Waffen, Leben und Punkte. Dieser Modus ist auch mit sehr vielen Spielern noch interessant und sehr dynamisch.
Der Screenshot zeigt eine Szene aus einem Spiel mit dem Modus "Regen Capture". Außerdem erkennt man an der Servernachricht, dass der Server gepatcht wurde.

Coop-Edit-Modus

Auf meinem offenen Server wird sehr oft der Coop-Edit-Modus genutzt. Hier lassen sich gemeinsam mit anderen Spielern bestehende Karten modifizieren oder komplett neue erstellen. Die oben erwähnte Anleitung zum Kartenbau oder ein Blick auf die Wiki-Seite Mapping and Editing ist ein guter Start in die Materie. Das Wichtigste: Wenn ihr einem Server beitretet, auf dem an einer neuen Karte gearbeitet wird, einfach /getmap in den Chat schreiben und ihr seht den aktuellen Stand vor euch. Hier sind ein paar Screenshots von einer Coop-Edit-Sitzung auf dem Server.
In Natenoms Blog findet ihr unter anderem ein cooles Video zu einer selbst erstellten Karte, die eine in sich geschlossene kleine Stadt darstellt. Da steckt sicher eine Menge Arbeit drin.

Musik

Sauerbratens instrumentaler Metalsoundtrack stammt von Marc A. Pullen, lässt sich auf last.fm herunterladen und befindet sich selbstverständlich auch im OGG-Format in /usr/share/games/sauerbraten/fanatic/.

Der Sauerbraten-Server

Aufgrund des besonderen Client-Server-Modells ist der Sauerbraten-Server sehr leichtgewichtig. Der Speicherverbrauch liegt bei 2-3 MB RAM auf einem 64bit-System und auch die CPU-Anzeige von htop habe ich selbst bei einem vollen Server noch nie über 1% springen sehen. Im Gegensatz zu vielen anderen Mehrspieler-Spielen ist es bei Sauerbraten nicht notwendig, dass Server und Client sich permanent über Treffer und Aktionen austauschen, was es erlaubt die wesentlichen Funktionen des Servers auf ein Minimum zu beschränken. Dadurch bleibt das Spiel selbst bei hohen Pings noch spielbar. Auf der anderen Seite macht es Sauerbraten gegenüber Cheatversuchen auch verwundbarer, was durch die Open-Source-Natur des Spiels noch begünstigt wird.

Die Authentifizierung

Sauerbraten begegnet diesem Problem mit einer ungewöhnlichen, aber nachvollziehbaren Entscheidung. Da selbst die populärsten proprietären Spiele mit einem Stab von bezahlten Entwicklern keinen vollkommenen Schutz gegen jede Art von Manipulationsversuch bieten können, haben die Entwickler die Verantwortung und Kontrolle an die Spielgemeinschaft zurückgegeben. Auf jedem Server kann ein Spieler sogenannter "Master" werden und Verstöße mit einem Bann vom Server bestrafen. Die Funktion wird entweder über das Spielmenü oder durch Eingabe von /setmaster 1 im Chat (Taste t) aufgerufen.
Sauerbraten-Server kennen im Wesentlichen zwei Arten von Autorisation: Mit Auth-Schlüssel und ohne.

  • Auth-Schlüssel. Durch den Hauptentwickler des Spiels werden sogenannte Auth-Schlüssel vergeben, mit denen vertrauenswürdige Spieler auf jedem Server mit Auth-Status Master werden können.
  • Öffentliche Server. Jeder kann dem Server beitreten. Diejenige, welche zuerst /setmaster 1 in den Chat eingibt, erhält den Master-Status.

Von diesen beiden Formen der Registrierung ist der Administrator des Server mit seinem Admin-Passwort jedoch nicht betroffen. Er kann jederzeit mit /setmaster und der anschließenden Eingabe des Admin-Passworts selbst dann zum Master werden, wenn diese Rechte schon an einen anderen Spieler vergeben worden sind.
Für mein Projekt habe ich mich für einen öffentlichen Sauerbraten-Server entschieden, auf dem jeder Master werden kann. Zusätzlich ist es möglich den Server so zu sperren, dass zwar weiterhin Spieler beitreten können, diese aber nur zuschauen und den Chat mitlesen dürfen. (L=Locked)

Installation und Konfiguration

aptitude install sauerbraten-server
Zur Inbetriebnahme des Servers ist es sinnvoll einen unprivilegierten Benutzer mit adduser anzulegen, z.B. sauerbraten. In dessen Home-Verzeichnis wird die zentrale Konfigurationsdatei server-init.cfg erstellt. Die verfügbaren Einstellungsmöglichkeiten sind überschaubar, was es einfach macht sich zurechtzufinden. Es ist sinnvoll die Shell des Benutzer auf /bin/false zu setzen.
chsh sauerbraten -s /bin/false
Das Programm lässt sich am besten in einer Screen-Sitzung starten. Hierzu erstellt man eine ausführbare Datei start.sh mit folgendem Inhalt.

#!/bin/sh
while true
do
/usr/games/sauerbraten-server -q/home/sauerbraten
echo "server abgestuerzt am `date`" > letzter_crash.txt
done

Den Server kann man danach auf diese Weise starten:
su sauerbraten -s /bin/dash -c "screen -m -d -S ffa_sauer sh start.sh"
Sollte es tatsächlich zu einem Absturz kommen, sorgt die While-Schleife automatisch für den Neustart und für einen kurzen Vermerk in der Datei "letzter_crash.txt". Sauerbraten läuft sehr stabil. Bei einer Uptime von > 30 Tagen kam es jedoch auch schon zum Crash. Die oben genannte Konfiguration sorgt dann dafür, dass der Server nur wenige Sekunden nicht erreichbar ist.
Schließlich lässt er sich auch über eine Cron-Reboot-Aktion bei einem Neustart hochfahren. In /etc/crontab steht deswegen
@reboot sauerbraten screen -d -m -S ffa_sauer sh /home/sauerbraten/start.sh
Der Port des Servers lässt sich ändern. Wer eine Firewall betreibt muss den Standardport 28785 und 28786 freigeben. Spielt man im LAN gilt das auch für Port 28784. Allgemein gesprochen: Gebt immer Port und Port+1 frei und im LAN zusätzlich noch 28784.

Modifikationen

Ich betreibe den Server, so wie ihn Debian und auch Ubuntu ausliefern, ohne jede Form von Modifikation. Es gibt verschiedene Projekte, die die Standardfunktionen erweitert haben, jedoch weiterhin kompatibel zum Original sind. Neue Merkmale sind unter anderem veränderte Statistikanzeigen im Spiel, neue Kontrollmöglichkeiten durch den Admin und Integration mit IRC. Maßgeblich sind das die Projekte XSBS und Hopmod. Ebenfalls erwähnenswert ist Bandnudel, ein Skript um Statistiken für den Server zu erstellen. Da ich diese Modifikationen nicht benutze, seid ihr hier auf euch allein gestellt.
Des Weiteren bietet der gesamte Webauftritt des Ogros-Clans einen guten Überblick, was man mit selbst erstellen Servermodifikationen erreichen kann. Leider werden diese im Gegensatz zum Cube-Server-Lister, der ebenfalls von dort stammt, nicht frei zur Verfügung gestellt.

Screenshots

Hier sind ein paar Screenshots. Viele weitere gibt es hier.

Links

Meine Debian-Aktivitäten im Juni 2012

Ein wenig inspiriert von Raphaël Hertzogs regelmäßigen Posts, was er in den Vergangenheit für Debian unternommen oder entwickelt hat, sind hier meine, zugegeben etwas kleineren, Unternehmungen, ein paar Bugs auszumerzen.
Im letzten Jahr beschäftigten mich noch unter anderem Probleme mit PolicyKit und einem scheinbar raren Problem mit libgcrypt11. Letzteres ist weiterhin nicht gelöst, scheint aber bei anderen Benutzern auch nur selten aufzutreten.
Am spannendsten war dieses Jahr bisher eine Schwäche im OpenArena-Server, die es Angreifern erlaubt hat mittels Spoofing gefälschte UDP-Anfragen an den Server zu schicken, der die Ausgabe, Statusvariablen des Servers, dann an Web- oder Mailserver adressierte, um sie durch eine kombinierte DRDoS-Attacke lahm zu legen. Einen Patch gab es zum Glück schon, nur noch der Paketverwalter musste benachrichtigt werden, der das Problem innerhalb weniger Stunden lösen konnte.
In der selben OpenArena-Version 0.8.5 gibt es noch einen weiteren Bug, der zum Crash des Servers führen kann, wenn Bots und menschliche Spieler auf bestimmten Maps spielen und durch eine scheinbar fehlerhafte Wegepunkt-Logik die Bots den Server zum Absturz bringen. (#664637)
Ich denke in der neuesten Version 0.8.8 taucht er so nicht mehr auf, dafür stürzt der Server nun scheinbar zufällig ab, wenn ausschließlich menschliche Spieler spielen. Das passiert zum Glück recht selten, leider aber immer dann wenn sieben oder sogar 15 Leute gleichzeitig spielen, was natürlich mehr als ein Showstopper ist.
Ich versuche im Moment den Server zu debuggen, wobei mir Simon McVittie die richtige Vorgehensweise gezeigt hat. Man erstellt sich z.B. ein Wrapper-Skript in /usr/local/bin/openarena-server-wrapper mit folgendem Inhalt.

#!/bin/sh
OPENARENA_BACKTRACE=1
export OPENARENA_BACKTRACE
exec > /var/games/openarena-server/.openarena/baseoa/openarena-server.log 2>&1
exec /usr/games/openarena-server "$@"

In /etc/init.d/openarena-server ersetzt man dann den Wert der DAEMON-Variable durch den Pfad zu diesem Wrapper-Skript. Zuvor muss man noch den GNU Debugger (gdb) und die Debug-Symbole für Ioquake3 und für den OpenArena-Server installieren, damit die Ausgabe des Debuggers nützlich und nachvollziehbar ist.
Es scheint so, als ob das Problem nicht debianspezifisch sei und irgendein Fehler in der Spiellogik vorliegt. Wenn etwas Brauchbares dabei herauskommt, frage ich bei Gelegenheit direkt mal im offiziellen OpenArena-Forum um Hilfe nach und komme auf den Fehler zurück.
Durch den Absturz des Servers ist mir dann aufgefallen, dass die PID-Datei des Servers nicht ordnungsgemäß entfernt wird und der Server durch Monit auf Grund einer if-Bedingung im Init-Skript daraufhin den Start verweigert. (#678543) Das Problem hat der Paketverwalter ebenfalls in wenigen Stunden gelöst und schon eine neue Version nach Unstable hochgeladen.
Ansonsten habe ich wie angekündigt einen Wishlist-Bug gegen Qstat (#675838) eingereicht mit der Bitte um ein Paket-Update. Bisher gab es aber noch keine Rückmeldung des Betreuers, weswegen es ein neues Paket nicht mehr nach Wheezy schaffen wird.

Ebenfalls auf der Wunschliste stand die Bitte eine Beispielkonfiguration für das Cube2:Sauerbraten-Paket bereitzustellen (#673808). Ich denke mein Patch fand Anklang, auch wenn sich der Verwalter eine generischere Konfiguration gewünscht hätte. Nachdem ich die nachgeliefert hatte, scheint es aber so, dass er die nächste offizielle Veröffentlichung von Sauerbraten abwarten möchte, weswegen die Lösung dieses Bugs für die Version in Wheezy noch warten muss.
Ansonsten fiel mir noch ein "Serious-Fehler" (#647613) für Boswars, ein Strategiespiel, auf, der mittlerweile aber nur noch "Important" ist. Ich konnte den Fehler bestätigen. Das Problem ist bei Upstream bekannt.
Dass es sich hier um Debianspiele handelte, ist natürlich kein Zufall. Durch das vServer-Projekt bin ich automatisch auf Fehler gestoßen und irgendwo gibt es sie eben immer. Wie die Sache mit der DRDoS-Attacke zeigt, sollte man nicht zögern, das sofort zu melden. Das gleiche Problem gab es nämlich auch im Tremulous-Paket, wodurch nicht nur Debian, sondern auch Fedora betroffen war.
Alles in allem kann die Fehlersuche sogar richtig Spaß machen. Nun bin ich gespannt, was das Debuggen des OpenArena-Servers bringt. 🙂

Sauerbraten: Cube Server Lister für Debian und Ubuntu kompilieren

Für Cube2: Sauerbraten gibt es ein nettes, grafisches Programm, mit dem sich Sauerbraten-Server überwachen lassen. Es existiert eine Übersicht sowohl über die Anzahl der Spieler, den Serverstatus, diverse Variablen und auch eine Mapvorschau gibt es. Mit einem simplen Mausklick kann man sich mit dem Server verbinden.


Kleiner Haken. Der Cube Server Lister wurde schon länger nicht mehr aktualisiert und es gibt keine offiziellen Debian- und Ubuntu-Pakete. Als Alternativen bieten sich zum einen die Trunk-Version oder ein Projekt auf GitHub an, welches CSL so gepatcht hat, dass es mit der aktuellen Justice-Version von Sauerbraten funktioniert.
Wenn man von dort die Quellen heruntergeladen hat, muss man nur noch der Anleitung auf ogros.org folgen, dort wo der Cube Server Lister auch von "WahnFred" entwickelt worden ist.

Die Kurzfassung

  1. aptitude install automake libtool libglib2.0-dev intltool g++ libwxgtk2.8-dev
  2. svn co http://cubelister.svn.sourceforge.net/svnroot/cubelister/trunk csl-svn
  3. In das csl-svn-Verzeichnis wechseln.
  4. make -f Makefile.cvs (bei der GitHub-Version nicht notwendig)
    ./configure
    make
    sudo make install

The Debian Way

Besser ist es natürlich direkt Deb-Pakete zu erstellen. Zuvor müssen die Quellen debianisiert werden.
Ihr müsst nur den Schritten in dem alten Beitrag folgen und das Quellverzeichnis richtig umbenennen (z.B. csl-0.81 und csl_0.81.orig.tar.gz) und das .orig.tar.gz-Archiv erstellen. Anschließend wechselt ihr in das Verzeichnis und führt dh_make aus. (Paket dh-make muss installiert sein. )
Das Paket lässt sich dann mit
dpkg-buildpackage -rfakeroot -us -uc
bauen und mit
dpkg -i csl_0.81-1_i386.deb
installieren.
Anmerkung:
Ich musste noch zwei Zeilen in /po/POTFILES.in nachtragen, bevor sich das Debian-Paket kompilieren ließ.

./src/engine/CslCharEncoding.cpp
./src/engine/CslCharEncoding.h

Es erwarten euch noch eine Reihe von Aufgaben, bevor ihr tatsächlich dieses Paket in die offiziellen Repos hochladen dürft. Für eine lokale und private Version reichen diese Schritte aber aus.
Der Cube Server Lister lässt sich schließlich mit csl starten. Unter Einstellungen müsst ihr noch den Pfad zur ausführbaren Sauerbraten-Datei setzen (/usr/games). Um ein Update vom Masterserver zu bekommen, einfach F5 drücken.