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. 🙂

QStat ist Quakestat und ist ein Muss für jeden Spieleserver

Es gibt ein paar Programme von denen man praktisch gar nichts hört, wenn man nicht tief in der speziellen Materie drinsteckt. Kommt man mit Spieleservern in Kontakt, stößt man zwangsläufig auf Qstat, mit dem sich auf der Konsole der Status des Servers abfragen lässt.
Da QStat auch der Name eines POSIX-Kommandos ist, heißt QStat bei Debian und Co. Quakestat und macht deutlich, wo die Wurzeln dieses Programms liegen. Die Anfänge reichen zurück in die 90iger Jahre und seit 2002 befindet sich QStat auch auf Sourceforge. Obwohl die Entwicklung mit den Jahren sich verlangsamt hat, gibt es immer noch Verbesserungen und Neuheiten, die vor allem in der Entwicklerversion sichtbar werden. Da aber die letzte Veröffentlichung schon wieder zwei Jahre her ist, gab es bis dato auch noch nichts Neueres in Debian.
Ich habe mich deshalb daran gemacht und die aktuellste SVN-Version "ausgecheckt" und mir ein aktualisiertes Debianpaket gebaut. Zu meiner Freude kann ich sagen, dass es funktioniert und ich mit der neuen Version nun auch Teeworlds und Cube2:Sauerbraten-Server abfragen kann. Das Ergebnis habe ich mit Munin auf der Statistikseite dargestellt.
Mein Ziel ist es dieses Paket noch weiter zu verbessern und die Richtlinien für Debianpakete zu erfüllen. In den nächsten Wochen werde ich einen Wishlist-Bug für das Paket abschicken, mit der Bitte noch vor dem Freeze von Wheezy das aktuelle QStat-2.11 zu aktualisieren. Vielleicht habe ich auch Glück und es gibt in den nächsten Monaten tatsächlich noch ein "echtes" Release.
Die groben Schritte zum Bauen von Qstat-2.12 waren.

  1. Aus Subversion auschecken.svn co https://qstat.svn.sourceforge.net/svnroot/qstat qstat
  2. Offizielle QStat-Quelldateien von Debian herunterladen.
    apt-get source qstat
  3. Den Debian-Ordner einfach in das neue QStat-SVN-Verzeichnis kopieren. Quilt3.0-Format sei Dank.
  4. Teeworlds mit Hilfe von Quilt patchen. Den Patch gibt es hier. Lesenswerte Dokumentation zu Quilt findet sich im Debian Wiki und bei Quilt for Debian Maintainers.
  5. Abhängigkeiten installieren.
    aptitude install build-essential autoconf automake autotools-dev
  6. Autogen.sh-Skript im Quellordner ausführen, Quellpaket neu bauen und anschließend mit einer der Debian-Methoden wie z.B. dpkg-buildpackage übersetzen.

Wer mein selbst gebautes QStat-2.12 gebrauchen kann, darf mich gerne anschreiben oder hier eine Nachricht hinterlassen, ich schicke es gerne zu.
Die Bedienung von QStat ist ziemlich einfach. In der neueren Version genügt folgender Befehl, um meinen OpenArena-Server abzufragen.
quakestat -openarenas 134.0.24.218:27961
In der aktuellen Version 2.11 müsst ihr in die /etc/qstat.cfg noch folgendes eintragen.

gametype OA081S new extend Q3S
name = Openarena Server 081
template var = OA081S
game rule = gamename
end
gametype OA081M new extend Q3M
name = Openarena Master
default port = 27950
master for gametype = OA081S
master protocol = 71
end

Der Server meldet den Status dann mit
quakestat -oa081s 134.0.24.218:27961
Als Ergebnis erscheint z.B. so eine Zeile.

ADDRESS PLAYERS MAP RESPONSE TIME NAME
134.0.24.218:27961 4/16 0/0 kaos2 21 / 0 Einherjer Europe Public FFA

Der "Trick" ist es mit einem Munin-Plugin die Zahlenwerte für die Spieler regelmäßig abzugreifen, womit sich dann ein Graph mit der Anzahl der Spieler erstellen lässt. Thema für einen anderen Beitrag.