Logcheck: Überwachung von Logdateien mit Regulären Ausdrücken

Letzte Woche hatte ich Logwatch vorgestellt, dass bei mir auf dem Server seinen Dienst als Beobachter von Logdateien verrichtet. Wie so oft bei Linux gibt es natürlich eine Reihe von Alternativen. Darunter habe ich mir später Logcheck genauer angeschaut.
Der größte Unterschied nach der Installation ist das Benachrichtigungsintervall, das standardmäßig eine Stunde beträgt. Die ganze Konfiguration befindet sich in /etc/logcheck. In der Datei logcheck.conf wird das allgemeine Verhalten festgelegt. In logcheck.logfiles definiert man hingegen die zu überwachenden Logdateien. Für einen Server sollte

REPORTLEVEL="server"

eingestellt sein. Für einen reinen Desktop-PC genügt hingegen "workstation" und für sicherheitskritische Systeme kann es auch "paranoid" sein.
Logcheck funktioniert nach einem simplen Prinzip. Je nach REPORTLEVEL werden die Regeln in /etc/logcheck/cracking.d/ und /etc/logcheck/violations.d/ abgearbeitet und auf die vorher definierten Logdateien angewendet. Treffen die dort formulierten Bedingungen zu wird entweder ein ATTACK- oder SECURITY-Alarm ausgelöst. In den entsprechenden Ignore-Ordnern für Paranoid, Server und Workstation befinden sich hingegen Regeln als Reguläre Ausdrücke, die "normale" Einträge herausfiltern.
Alles was weder unter ATTACK noch SECURITY fällt ist dann ein sogenanntes SYSTEM-Ereignis, was z.B. auch der Download einer Datei vom FTP-Server sein kann.
Voreingestellt werden /var/log/syslog und /var/log/auth.log überwacht. Um z.B. die Logdateien des vsftpd-Servers zu überprüfen, trägt man in /etc/logcheck/logcheck.logfiles den Pfad zur Logdatei

/var/log/vsftpd.log

ein. Schon nach kurzer Zeit erhält man Meldungen wie

Sun May 27 22:06:24 2012 [pid 2] CONNECT: Client "123.123.123.123"

Danach findet jedoch kein Download statt, dennoch wird eine E-Mail-Benachrichtigung verschickt. Diese Art von Meldungen lassen sich in /etc/logcheck/ignore.d.server/vsftpd als Regulärer Ausdruck definieren. Daraufhin wird das Vorkommnis während der stündlichen Auswertung ignoriert.
Regel

^w{3} w{3} [ :[:digit:]]{11} [ :0-9]{4} [pid [0-9]+] CONNECT: Client "[0-9]+.[0-9]+.[0-9]+.[0-9]+"$

Dieser Reguläre Ausdruck nach dem POSIX-Standard passt genau auf die Zeile der Logdatei. Da ich ihn selbst geschrieben habe, verstehe ich zwar was damit gemeint ist. Wenn man hingegen vor fremden Regulären Ausdrücken steht, muss man sich oft erst einmal in die Materie einarbeiten und einige Knoten lösen.
Mir hat definitiv die schon vorhandene Konfiguration bei Logcheck geholfen. Weiterhin kann ich auch den englischen Wikipedia-Artikel zum Thema Regular Expressions empfehlen. Ferner gibt es unter dem Suchbegriff "regexp tester" zahllose Seiten, die in Javascript, Flash oder Java eine Plattform anbieten um eigene Ausdrücke zu testen. Keine davon hat mich aber auf den ersten Blick vollkommen begeistert.
Ich denke am einfachsten ist es, man schreibt den Regulären Ausdruck in eine Datei und testet ihn mit egrep -f, z.B.

egrep -f meine_regeln /var/log/vsftpd.log


Wird im Terminal eine Ausgabe angezeigt stimmt alles. Oft fange ich dabei erst einmal grob an, indem ich Sonderzeichen wie Punkte oder eckige Klammern escape und danach dann Wort für Wort und Zahl für Zahl alles ersetze. Ziel ist es die unerwünschten Zeilen so genau wie möglich mit Regulären Ausdrücken einzugrenzen.
Logcheck erfordert etwas Einarbeitungszeit, damit es sehr gut funktioniert. Gibt es nichts zu melden oder funktionieren die Ignore-Regeln bleibt Logcheck leise und meldet sich nur noch, wenn es wirklich was zu sagen gibt.

vsftpd und OpenArena: Konfiguration eines sicheren FTP-Servers mit ausschließlich anonymen Zugang

Vor kurzem ergab sich die Gelegenheit einen FTP-Server aufzusetzen. Für ein anderes Vorhaben abseits von linuxiuvat.de brauchte ich zuerst nur einen OpenVPN-Server, da aber noch ausreichend Leistung zur Verfügung stand, installierte ich zusätzlich noch vsftpd.

Der FTP-Server eignet sich ideal, um PAK3-Dateien von meinem OpenArena-Server herunterladen zu können. Falls der Spiel-Client nicht kompatibel sein sollte, wird der Client automatisch beim Verbinden zum FTP-Server umgeleitet und lädt von dort Patches, Karten, Texturen und neue Sounds herunter.

Installation und Konfiguration

Vsftpd ist stark konfigurierbar und beherrscht noch viele weitere Optionen, die mit man vsftpd.conf einsehbar sind. Ein sicherer anonymer Zugang zum Herunterladen ohne Berechtigungen zum Dateiupload, lässt sich mit wenigen Handgriffen so verwirklichen.

aptitude install vsftpd
dpkg-reconfigure vsftpd


Mit Hilfe von DebConf wird der FTP-Benutzer und das FTP-Wurzelverzeichnis festgelegt.

    1. Den Systembenutzer "ftp" für vsftpd einrichten.

    1. Das FTP-Wurzelverzeichnis definieren, aus dem der anonyme Benutzer nicht wechseln kann.

Die Standardeinstellungen kann man hier problemlos beibehalten.
Die weitere Konfiguration befindet sich in /etc/vsftpd.conf. Im Prinzip halten sich auch hier die Veränderungen in Grenzen. An dieser Stelle dokumentiere ich nur die Veränderungen zur Standardinstallation mit Debian Squeeze.

nopriv_user=ftpsecure

Vsftpd verwendet einen weiteren unpriviliegerten und vollkommen isolierten Systembenutzer. In der Standardeinstellung ist das "nobody". Da dieser auch für andere Dienste oft verwendet wird, empfiehlt es sich aus Sicherheitsgründen noch einen weiteren, einzigartigen Systembenutzer anzulegen, z.B. ftpsecure.

adduser --system --no-create-home --disabled-login ftpsecure


Der FTP-Server wird zwar mit Root-Rechten gestartet, sobald aber eine Verbindung mit dem Client hergestellt wird, startet der Kindprozess mit den unpriviliegerten Rechten von ftpsecure und ftp.

# Die Dateiberechtigungen sollen für den anonymen Benutzer immer mit ftp:ftp angezeigt werden
hide_ids=YES
# Das FTP-Wurzelverzeichnis lässt sich mit dieser Variable ändern, wenn man
# nicht auf die DebConf-Methode zurückgreifen möchte.
# anon_root=/home/ftpsecure
# Maximale Anzahl an erlaubten gleichzeitigen Verbindungen. Entspricht bei
# mir der maximal möglichen Anzahl von Spielern auf dem OpenArena-Server.
max_clients=16
# Wieviele Verbindungen pro IP sind erlaubt
max_per_ip=4

Die gesamte vsftpd.conf sieht in meinem Fall so aus.

listen=YES
anonymous_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=ftpsecure
ftpd_banner=Welcome to another FTP service.
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
hide_ids=YES
max_clients=16
max_per_ip=4

Abschließend lässt sich mit mount --bind das Datenverzeichnis von OpenArena noch einmal im FTP-Wurzelverzeichnis im Unterordner /oa/baseoa nur lesbar einhängen. Um die Veränderung dauerhaft zu behalten, kann der Vorgang auch in /etc/fstab festgeschrieben werden.

/usr/share/games/openarena/baseoa       /srv/ftp/oa/baseoa      none     ro,bind        0       0

Nach diesem Schema lassen sich weitere Verzeichnisse nur lesbar im FTP-Wurzelverzeichnis einhängen.

Einstellungen für OpenArena

In der server.cfg von OpenArena kann man festlegen, ob der Download von Dateien erlaubt ist oder nicht.

sets sv_allowdownload 1

Ist das Herunterladen wie in diesem Fall mit 1 gestattet, wird mit sv_dlURL bestimmt, von welchem Web- oder FTP-Server der Client die Dateien beziehen soll, sofern sich seine Version von der des Servers unterscheidet. Der Vorgang ist auch als Fast Download bekannt und ein Feature, dass nach der Veröffentlichung des Quellcodes von Quake3 hinzugefügt worden ist.

sv_dlURL "ftp://123.123.123.123/oa"

Dabei kann man den letzten Schrägstrich nach dem Verzeichnis "oa" weglassen, da er automatisch durch den OpenArena-Server gesetzt wird. Im Verzeichnis "oa" auf dem FTP-Server muss das Unterverzeichnis baseoa erstellt werden, welches wiederum die PAK3-Dateien zum Spielen enthält.
Gibt man keine URL zum Herunterladen an, liefert der OpenArena-Server die Dateien nach der alten Quake3-Methode selbst aus, was sehr lange dauern kann. In neueren Versionen der ioquake3-Engine gibt es die Möglichkeit eine neue Variable zu definieren, welche die Download-Geschwindigkeit erhöht. Folgender Wert setzt diese auf 100 Kb/s pro Client fest.

sv_dlRate "100"

Wichtig
Wer bei Debian und Ubuntu einzelne Custom Maps zum Download anbieten möchte, muss diese bei OpenArena 0.8.8 im versteckten Verzeichnis /var/games/openarena/.openarena/baseoa ablegen, wo sich auch die server.cfg befinden kann, wenn man sich nicht für /etc/openarena-server/ entschieden hat. Auf dem FTP-Server hingegen verändert sich nichts und alle PAK3-Dateien liegen weiterhin im Verzeichnis baseoa.

Logwatch der Loganalysierer: Ein Beispiel mit Lighttpd

Zum Thema Monitoring, Serverüberwachung und Intrusion Detection System (IDS) habe ich mir in den letzten Wochen ein paar Gedanken gemacht und neue Software ausprobiert. Ich habe das Thema noch nicht abgeschlossen und teste von Zeit zu Zeit noch das ein oder andere Programm an, was mir bei dieser Aufgabe für meinen Server helfen könnte. Heute stelle ich Logwatch näher vor.

Zur Zeit benutze ich Monit zur Überwachung von Prozessen wie Lighttpd oder den Spieleservern. Es kam in der Vergangenheit bei OpenArena z.B vor, dass der Server wegen eines unbekannten Fehlers unregelmäßig gecrasht ist. Dank Monit wird der Server automatisch neugestartet.
Für den langfristigen Trendverlauf bei Systemressourcen oder Benutzung der Spieleserver verwende ich Munin, womit die Werte grafisch anschaulich aufbereitet werden.
Die Mehrzahl der Daten wird natürlich in Logdateien gespeichert. Da die Menge an Informationen manuell nicht in annehmbarer Zeit zu überprüfen ist, braucht es einen Loganalysierer, der die Daten für Menschen lesbar aufbereitet und im Idealfall nur die "wichtigen" Informationen herausfiltert.
Ein bekannter Loganalysierer heißt Logwatch, den ich am längsten kenne und seit Anfang an für den Server benutze. Speziell für Berichte über die Vorgänge mit der Firewall gibt es aber auch noch FwLogwatch. Ebenfalls angeschaut habe ich mir Logcheck, Swatch und Tenshi. Snort steht auf jeden Fall noch auf der Todo-Liste und mit Tiger als Auditor habe ich auch schon gute Erfahrungen gemacht.

Logwatch

aptitude install logwatch

Ein großer Pluspunkt von Logwatch ist, dass es direkt nach der Installation einfach funktioniert und täglich eine Zusammenfassung als Textmail an Root und die externe Adresse schickt, sofern man zuvor einen Mailserver eingerichtet hat.
Logwatch ist in der Standardeinstellung auf einen niedrigen Detaillevel eingestellt. Die Werte reichen von 0 (low) über 5 (medium) bis 10 (high). Grundsätzlich werden die Logs der letzten 24 Stunden analysiert, wozu der Cronjob in /etc/cron.daily/00logwatch aufgerufen wird. Diese Zeitsteuerung lässt sich wie schon beschrieben über das Verschieben von 00logwatch in den entsprechenden Cron-Ordner oder durch die Bearbeitung der Crontabs ändern.
Die Reichweite der Loganalyse kann auch per Option direkt an Logwatch übergeben werden. Weitere Hinweise dazu finden sich mit logwatch --range Help.

Konfigurationsbeispiel mit Lighttpd

Für einen tiefergehenden Einblick in die Materie empfehle ich einen Blick in Howto-Customize-Logwatch.gz und Readme.Debian in /usr/share/doc/logwatch/ zu werfen. Das Konzept der Konfiguration ist dort ausführlich beschrieben.
Prinzipiell finden sich in den Unterverzeichnissen logfiles und services in /usr/share/logwatch/default.conf die Regeln, welche Logdateien analysiert werden sollen und Parameter, die den Output näher bestimmen. Die tatsächliche Arbeit verrichten aber die Skripte in /usr/share/logwatch/scripts.
Die zentrale Konfigurationsdatei ist logwatch.conf und befindet sich zusammen mit ignore.conf in /usr/share/logwatch/default.conf. Schon rein aus formalen Gründen habe ich aber alle Dateien dort unangetastet gelassen, da Debian selbst die Werte im Verzeichnis /usr/share/logwatch/dist.conf/ überschreibt und jede individuelle Einstellungen wie gewohnt in /etc/logwatch/ festgelegt wird.
Die Unterverzeichnisse in /etc/logwatch/ spiegeln die Verzeichnisstruktur in /usr/share/logwatch wider. Man muss also nur die modifizierten Dateien für Logfiles und Services dort ablegen.
In meinem Fall habe ich den Service http angepasst, der standardmäßig auf die Analyse von Apache ausgerichtet ist. Mit wenigen Handgriffen funktioniert er aber auch für Lighttpd.

Kopieren

/usr/share/logwatch/default.conf/logfiles/http.conf --> /etc/logwatch/conf/logfiles/
/usr/share/logwatch/default.conf/services/http.conf --> /etc/logwatch/conf/services/

Anpassen

Meine http.conf für logfiles.
Meine http.conf für services.
Die Logdateien für meinen Lighttpd-Webserver liegen immer in /var/log/lighttpd/linuxiuvat.de/. Mit

LogFile = lighttpd/linuxiuvat.de/*access.log.1

wird der relative Pfad zu /var/log und meinen Logdateien festgelegt, wobei es noch drei weitere Zeilen in dieser Form gibt, die auf die anderen Logdateien verweisen.
Die zweite http.conf Datei ist der sogenannte Filter oder Service, der auf die Logdateien angewendet wird. Ich habe den Titel auf "Lighttpd" gesetzt und den Detaillevel auf 10 erhöht. Dadurch wird der Standard von 0 überschrieben und die Ausgabe von Lighttpd deutlich "lauter". Der Rest beschränkt sich darauf Parameter auszukommentieren, die nützlich sein können, z.B.

$HTTP_USER_DISPLAY = "$field{http_rc} >= 400"

womit alle HTTP-Fehlermeldungen >= 400 angezeigt werden.

override.conf

In /etc/logwatch/conf kann man die Datei override.conf anlegen, womit sich die globalen Einstellungen aus logwatch.conf überschreiben lassen. Ich brauchte z.B. nicht den Output des Service Iptables.

logwatch: Service = "-iptables"

Mit dem Schlüsselbegriff logwatch: wird die Veränderung eingeleitet, danach folgt der Name der Variable und der Wert. Weitere Ideen, was sich manipulieren lässt, finden sich in logwatch.conf.

Fazit

Das Kopieren und Editieren der Konfiguration ist bei Logwatch erst einmal Gewöhnungssache. Der Vorteil liegt darin, dass die Originaldateien unangetastet bleiben und man alles ordentlich dort hat, wo es hingehört, in /etc. Wer viele Veränderungen vornehmen muss und diese auf mehrere Server anwendet, sollte besser über eine Neukompilierung des Pakets nachdenken.
Mir gefällt Logwatch sehr gut, da es bisher die anderen Methoden gut ergänzt. Logwatch ist ein Teil der Lösung aber eben nicht alles. Für mich ist eine tägliche E-Mail-Benachrichtigung ausreichend. Außerdem ist die Standardkonfiguration sehr gut. Wer noch mehr Kontrolle und andere Voreinstellungen bevorzugt, sollte sich Logcheck anschauen. Dort wird man anfangs sogar stündlich informiert und kann durch Reguläre Ausdrücke festlegen, was man sehen möchte oder eben nicht.

Blockorientierte Geräte und der Mythos mit dd

Den interessanten Thread zu Wheezy und dem Umgang mit begrenztem Platz auf Installations-CDs habe ich noch eine Weile weiterverfolgt. In den Kommentaren zu meinem letzten Beitrag gab es gemischte Stimmen, aber ich denke, die meisten waren sich einig, Daten-CDs stellen immer mehr eine Randerscheinung dar. Audio-CDs behalten noch eine Weile ihren nostalgischen Wert als "Musik zum Anfassen" und manchmal hat man sie einfach noch im Schrank, weil die 50er-CD-Spindel einfach nicht kleiner werden möchte.

Mir geht es ähnlich, die meisten CD-Rohlinge im meinem Schrank habe ich mal als Geschenk erhalten. Als Endnutzer bin ich von dem Thema nicht akut betroffen, ich verwende fast immer die Netzinstallation, installiere eine Basisinstallation und baue von dort mir mein eigenes Wunschsystem zusammen.
Der Thread spaltete sich danach ein wenig auf und verzweigte sich in verschiedene Richtungen. Plötzlich wurde auch das Thema angesprochen, wie Debian Benutzern die Installation von USB-Sticks vermittelt.

dd - suboptimale Performance

dd if=debian.img of=/dev/sdX

Bevor ich nun mit Korrekturmails überzogen werde, das ist nicht der Weg den Debian beschreibt. Ich persönliche hatte aber jahrelang im Hinterkopf: dd ist das sinnvollste Kommando für blockorientierte Geräte und ist eben auch für USB-Sticks gedacht.
Debian schlägt z.B vor

cat - Alternative und schneller

cat debian.img > /dev/sdX

Der Cat-Befehl vollbringt die gleiche Aufgabe, funktioniert aber auf den meisten Systemen effizienter als dd. Das ist aber nur der Fall, wenn man vergessen hat bs= als Option bei dd anzuführen.

dd - der bessere Weg

Für das Schreiben auf blockorientierte Geräte wurde eine Größe von 4 MB für die Option bs empfohlen. Jeder Eingabeblock wird dabei durch die Option oflag=sync zur maximalen Größe von 4 MB mit Nullen aufgefüllt, sollte er kleiner sein.
dd if=debian.img of=/dev/sdX bs=4M oflag=sync

cp - auch das ist möglich

Früher habe ich gelernt, dass man dd für Abbilder benutzt, das GNU-Kommando cp hingegen nur für das Kopieren von Dateien auf eingehängten Datenträgern. Man lernt bekanntlich nie aus, aber cp kann ebenfalls Abbilder auf blockorientierte Geräte schreiben.

cp debian.img /dev/sdX


Ein weiterer interessanter Tipp war anstelle von /dev/sdX z.B. in /dev/disk/by-id/ nach dem USB-Stick zu schauen und diese Datei zu benutzen, wenn man sicherer auf das eigene USB-Gerät verweisen möchte.
Am Ende erfüllen alle Kommandos ihren Zweck. Bei dd werde ich in Zukunft noch mehr auf die Option bs achten und in den alten Artikeln, wo ich darauf nicht hingewiesen habe, das nun nachholen.

Drei Aufräumtipps mit Aptitude für Debian und Ubuntu

Ich stelle gerne von Zeit zu Zeit ein paar Tipps und Tricks vor, wie man mit Debians Systemwerkzeugen sein eigenes Betriebssystem sauber und minimal halten kann. Zum Installieren und Entfernen von Software benutze ich am liebsten Aptitude.
Nun bin ich mit Sicherheit nicht der Einzige, der Debian und Ubuntu benutzt. Andere Leute wie z.B. Raphaël Hertzog haben in der Vergangenheit schon viele nützliche Beiträge hierzu geschrieben. Da er selbst Debianentwickler ist und einige essentielle Werkzeuge für Debian mitentwickelt, möchte ich einige seiner Ideen gerne vorstellen, so wie ich das in der Vergangenheit beim Thema CUT getan habe.
Hier sind drei Tipps wie man mit Aptitude und einem Linuxterminal sein System aufräumen kann. Wer gerne grafische Programme bevorzugt, wird all diese Optionen auch mit Synaptic finden können. Die Aptitude-Methode ist meiner Meinung nach aber universeller (und ressourcenschonender 😉 ). Im folgenden gebe ich die entsprechenden Aptitude-Befehle immer in Kurz- und Langschreibweise an. Ihr könnt den Suchbefehl search natürlich jederzeit durch purge ersetzen, um die Dateien endgültig zu entfernen.

1. Nicht benötigte Konfigurationsdateien endgültig löschen

Wenn man ein Paket mit aptitude remove oder sogar aptitude purge löscht, kann es vorkommen, dass einzelne Pakete dennoch Konfigurationsdateien zurücklassen. Oft ist das sogar ein erwünschter Zustand, da bei einer Neuinstallation eben die Konfiguration nicht neu erstellt werden muss, sondern direkt aus den zuvor zurückgebliebenen Dateien wiederhergestellt wird.

Suchen und Löschen

aptitude search ~c
aptitude search ?config-files

2. Entfernen von obsoleten Paketen

Debian läuft über Jahre stabil. Um diesen Qualitätszustand zu erreichen, durchläuft jedes Paket verschiedene Zweige innerhalb der Distribution von Experimental, Unstable über Testing bis Stable.
Es kann jedoch vorkommen, dass das Qualitätssicherungsteam das Entfernen eines Pakets beantragt, weil es entweder nicht mehr durch den ursprünglichen Upstream-Entwickler weiterentwickelt wird oder das Paket nicht mehr innerhalb von Debian betreut wird. Genauso gut kann ein Paket aus wichtigen Gründen umbenannt worden sein, weil der Paketbetreuer dem Benutzer zu einem Zeitpunkt mehrere Versionen anbieten wollte oder die alten Pakete in Übergangspakete für eine Veröffentlichung umbenannt wurden, aber in der darauf folgenden nicht mehr gebraucht werden.
Zurück bleiben irgendwann nur noch obsolete Pakete, die keine Sicherheitsaktualisierungen mehr erhalten und im schlimmsten Fall nutzlos auf der Festplatte verkümmern.

Suchen und Löschen

aptitude search ~o
aptitude search ?obsolete


Nicht immer möchte man alle als obsolet eingestuften Pakete löschen. Wenn man Pakete von Drittanbietern (wie z.B. Brother-Treiber) installiert hat, würden diese mit purge ebenfalls entfernt. Hier ist es deshalb besser mit

aptitude why "Paketname"


nachzuforschen, warum das Paket installiert wurde.

3. Pakete aus Drittquellen suchen und entfernen

Es gibt kaum einen Grund, warum man Drittquellen in Debian freischalten sollte. Hilfreich fand ich bisher aber immer deb-multimedia.org, wenn es z.B darum ging einen WebM-kompatiblen MPlayer für Debian Stable zu installieren. Natürlich nur, wenn es die neuere Version nicht schon in Debian-Backports gibt.
Bei Ubuntu hingegen erliegt man öfter der Versuchung mal das ein oder andere PPA freizuschalten und ja, manche sind auch wirklich nützlich. Möchte man herausfinden, welche Pakete auf dem eigenen System aus Drittquellen stammen, lässt sich das mit Aptitude so lösen:

Suchen und Löschen

aptitude search '~S ~i !~ODebian !~o'
aptitude search '?narrow(?installed, !?origin(Debian))!?obsolete'


Will man hingegen wissen, welche Pakete nicht aus dem Debian-Zweig stammen, den man gerade verwendet (in diesem Fall "Testing"), funktioniert dieser Befehl.

aptitude search '?narrow(?installed, !?archive(testing)?origin(Debian))'


Hierbei werden alle Pakete angezeigt, die nicht der Version entsprechen, die gerade in Testing verfügbar ist oder die aus anderen Zweigen wie Experimental oder Unstable stammen.

Tipp: Probleme mit Nvidia-Treibern lösen – Downgrade von Precise auf Oneiric

Nach meinem Upgrade auf Lubuntu 12.04 stellten sich, wenig überraschend, die gleichen Probleme wie mit Debian Sid ein. Die neuesten Nvidia-Treiber 295.40 verursachen bei mir, Kero und wahrscheinlich noch einer Reihe anderer Leute Verzögerungen beim Verschieben von Anwendungen, die teilweise bis zum Einfrieren des gesamtes Desktops führen können.
Das Problem ist bekannt und betrifft unter anderem Geforce 6, 7 oder 8800GTX/GTS Karten. Ich benutze jedoch eine Geforce 9600 GT, die bis zum Update auf Lubuntu 12.04 einwandfrei funktionierte.
Seid ihr von ähnlichen Problemen betroffen, habt ihr folgende Optionen zur Hand.

1. Nvidia-Treiber komplett entfernen

sudo aptitude purge nvidia-current


Die Treiber lassen sich mit diesem Befehl komplett entfernen. Nach einem Neustart wird der Nouveau-Treiber aktiv, dessen Performance in der Regel für "normalen" Desktopbetrieb ohne anspruchsvolle 3D-Spiele oder Compiz ausreichend ist.

2. Downgrade der Nvidia-Treiber von Precise auf Oneiric

Für diverse Setups sind weiterhin die Nvidia-Treiber notwendig. In diesem Fall könnt ihr einen Downgrade von Nvidia 295.40 (Precise) auf 280.13 (Oneiric) in Erwägung ziehen.

Ein Downgrade kann zu Problemen und anderen Inkompatibilitäten führen. Jetzt wäre der richtige Zeitpunkt für ein Backup. Wer sich bei den folgenden Schritten unsicher ist, sollte sie nicht ausführen!

Öffnet die /etc/apt/sources.list mit eurem bevorzugten Editor und schaltet das alte Apt-Repositorium für Oneiric und die "restricted"-Sektion frei, indem ihr diese Zeilen hinzufügt.

deb http://de.archive.ubuntu.com/ubuntu/ oneiric main restricted
deb http://security.ubuntu.com/ubuntu oneiric-security main restricted

Nvidia-Treiber downgraden

sudo aptitude update
sudo aptitude -t oneiric install nvidia-current


Apt warnt vor dem Downgrade, dass das virtuelle Paket xorg-video-abi-10 nicht gefunden werden kann. Mit "n" lehnt ihr die erste Lösung ab und akzeptiert die zweite. Dies solltet ihr nur tun, wenn ihr auf die zum Entfernen markierten Pakete auch tatsächlich verzichten könnt. Der Vorgang sah bei mir so aus:

sudo aptitude -t oneiric install nvidia-current
Die folgenden Pakete haben verletzte Abhängigkeiten:
 nvidia-current : Hängt ab von: xorg-video-abi-10 , welches ein virtuelles Paket ist.
Die folgenden Aktionen werden diese Abhängigkeiten auflösen:
     Beibehalten der folgenden Pakete in ihrer aktuellen Version:
1)     nvidia-current [Nicht installiert]
Diese Lösung akzeptieren? [Y/n/q/?] n
Die folgenden Aktionen werden diese Abhängigkeiten auflösen:
      Entfernen der folgenden Pakete:
1)      xserver-xorg-input-all
2)      xserver-xorg-input-synaptics
3)      xserver-xorg-video-all
4)      xserver-xorg-video-sisusb
5)      xserver-xorg-video-tdfx
6)      xserver-xorg-video-trident
7)      xserver-xorg-video-vesa
Downgrade der folgenden Pakete:
9)      xorg [1:7.6+12ubuntu1 (now, precise) -> 1:7.6+7ubuntu7.1 (oneiric)]
10)     xserver-xorg [1:7.6+12ubuntu1 (now, precise) -> 1:7.6+7ubuntu7.1 (oneiri
11)     xserver-xorg-core [2:1.11.4-0ubuntu10.1 (now, precise-updates) -> 2:1.
usw.

Nach dem Downgrade ist es am sinnvollsten die neuen Nvidia- und Xserver-Pakete auf "Halt" zu setzen, damit sie beim nächsten Update nicht erneuert werden.
sudo aptitude hold '~nnvidia'
sudo aptitude hold '~nxserver'
Welche Pakete das genau sind, erfahrt ihr mit
aptitude search '~ahold'
In meinem Fall hat das Downgrade das Problem vollständig beseitigt und das System läuft stabil. Ihr solltet nun von Zeit zu Zeit überprüfen, ob es eine neuere Nvidia-Version gibt, die das Problem lösen kann.
Die Pakete lassen sich mit
sudo aptitude unhold '~nnvidia'
sudo aptitude unhold '~nxserver'
wieder zum Aktualisieren freigeben.
Update: 06.05.2012

3. Upgrade auf nvidia-current in Quantal Quetzal

Als dritte Möglichkeit könnt ihr den Nvidia-Treiber auf die aktuelle Version in Ubuntu "Quantal Quetzal" bringen. (z.Z. 295.49). Dazu ersetzt ihr das Wort "oneiric" in den vorhergehenden Schritten durch "quantal".
Bei Lubuntu 12.04 und meiner Geforce 9600 GT funktionierten alle drei nur die ersten beiden Möglichkeiten. Nachdem ich jetzt noch etwas länger mit 295.49 experimentiert habe, treten ab und an immer wieder Ruckler und Verzögerungen beim Verschieben von Fenstern auf. Für mich ist daher diese Version nicht die richtige Lösung.

Lighttpd: Webserver-Konfiguration mit SSL und Authentifizierung


Im folgenden Beitrag geht es mal nicht um die Stärken und Schwächen verschiedener Webserver, sondern um die Konfiguration des Webservers für mein Spieleserver-Projekt linuxiuvat.de, das weiter in der Entstehung ist und bei dem ich fast ausschließlich auf statische Inhalte setze. Wer selbst am überlegen ist, ob er einen Ubuntu-LTS- oder Debian-Server in Zukunft aufsetzen und einen Webserver betreiben möchte, findet hier vielleicht die richtigen Informationen.
Der Artikel kann nicht die gesamte Dokumentation zu Lighttpd ersetzen. Wer aber meine kommentierte Konfigurationsdatei liest und die Abschnitte zu den verschiedenen Modulen dazu in Beziehung setzt, sollte einen guten Überblick bekommen, wie man mit ein paar Handgriffen einen ressourcenschonenden Webserver mit SSL und Authentifizierung für einen eigenen Webauftritt gestalten kann.

Warum Lighttpd?

Für ein privates Projekt mit fast ausschließlich statischen Inhalten ist Lighttpd bestens geeignet. Sein Speicherverbrauch ist äußerst gering, was ihn ideal für eine vServer-Umgebung macht. Im Regelfall zeigt mir htop nach einer Basisinstallation an, dass Lighty ungefähr 1% von den verfügbaren 225 MB des vServers für sich beansprucht und auch mit ein paar zusätzlichen Modulen steigt dieser Wert kaum an.
Lighttpd hat in der Vergangenheit bei viel größeren Projekten bewiesen, dass er sich ideal zum Ausliefern von statischen Inhalten eignet. Außerdem ist die Dokumentation ausgezeichnet und die bedingte Konfiguration empfand ich als übersichtlich und logisch.
Das weitere Angebot an freien Webservern ist wirklich groß. Einen guten Überblick verschafft z.B.

aptitude search '~shttpd'


Nginx ragt hier als weitere sehr gute Alternative heraus. Doch alle müssen sich mit der Referenz, Apache, messen lassen. Die Wahl hängt wie immer von den eigenen Ansprüchen ab, weswegen man nicht pauschal einen Webserver zum Non plus ultra erklären kann.
Wer es wirklich genügsam haben möchte, sollte sich Busybox merken, denn das bringt neben vielen UNIX-Werkzeugen auch einen eigenen Webserver mit! 🙂

Installation

aptitude install lighttpd

Wichtige Fakten

  • Zentrale Konfigurationsdatei: /etc/lighttpd/lighttpd.conf
  • Zusätzliche Konfiguration: /etc/lighttpd/conf-available/
  • Aktivieren bzw. Deaktivieren von Modulen: lighty-enable-mod Name_des_Moduls bzw. lighty-disable-mod Name_des_Moduls. Konfigurationsdateien werden von /conf-available/ nach /conf-enabled/ verlinkt und somit aktiviert.
  • Einziger Benutzer: linuxiuvat
  • Standard-Webserver-Root: /var/www/server
  • Ohne SSL: Symlink von /var/www/linuxiuvat.de -> /home/linuxiuvat/linuxiuvat.de
  • Mit SSL: Zwei Subdomains munin.linuxiuvat.de und stats.linuxiuvat.de
  • Standardmodule: mod_access, mod_alias, mod_compress, mod_redirect, mod_expire
  • Zusätzliche Module: mod_ssl, mod_cgi, mod_auth, mod_status, mod_accesslog

Meine lighttpd.conf

Meine eigene lighttpd.conf in kommentierter Fassung. Fragen, Anregungen oder Kritik bitte jederzeit in die Kommentare posten.

lighttpd.conf

Konfiguration

Virtuelle Hosts

Um virtuelle Hosts zu verwalten, bietet Lighttpd verschiedene Möglichkeiten an. Für größere Projekte empfiehlt sich das schlichte und effektive mod_simple_vhost oder das verbesserte mod_evhost. Wer selbst zum Webhoster werden möchte und zahlreiche Domains verwalten muss, sollte sich die datenbankgestützte und programmierbare Lösung namens mod_mysql_vhost genauer anschauen.
Für kleine Projekte mit einer überschaubaren Anzahl von Domains und Subdomains ist aber Lightys bedingte Konfiguration vollkommen ausreichend.

Hauptseite ohne SSL

Die Inhalte werden auf der Hauptseite unverschlüsselt ausgeliefert, wozu die $SERVER["socket"]-Bedingung Anwendung findet. Das Dokumenten-Wurzelverzeichnis wird in das Home-Verzeichnis des Benutzers linuxiuvat verlinkt. Neue Inhalte werden dort eingestellt. Die Host-Bedingung prüft, ob entweder www.linuxiuvat.de oder nur linuxiuvat.de aufgerufen wurde und führt danach alle Anweisungen im Konfigurationsblock aus. Zusätzlich zur Datei access.log, die später noch vorgestellt wird, ist hier noch der Pfad zu einer angepassten 404-Fehlerseite zu sehen, sowie der Pfad zur error.log.

$SERVER["socket"] == "134.0.24.218:80" {
	$HTTP["host"] =~ "^(www.)?linuxiuvat.de$" {
		server.document-root = "/var/www/linuxiuvat.de"
		server.error-handler-404 = "/e404.htm"
		accesslog.filename = "/var/log/lighttpd/linuxiuvat.de/access.log"
		server.errorlog = "/var/log/lighttpd/linuxiuvat.de/error.log"
    }
}

Mit der folgenden Bedingung lässt sich verhindern, dass die Webseite direkt über die Eingabe der IP-Adresse aufgerufen werden kann, wobei das Modul mod_access Anwendung findet.

$HTTP["host"] =~ "134.0.24.218" {
	url.access-deny = ( "" )
}

mod_cgi

Die einzige CGI-Datei, die ich z.Z. benutze, befindet sich im Verzeichnis /cgi-bin/. Sie kommt zum Einsatz, wenn jemand einen Kommentar in meinem mit Chronicle erzeugten Newsblog hinterlassen möchte.
Das Modul wird mit

lighty-enable-mod cgi


aktiviert.

$HTTP["url"] =~ "^/cgi-bin/" {
	cgi.assign = ( "" => "/usr/bin/perl" )
}

mod_accesslog

Mit dem Modul mod_accesslog werden alle Anfragen an den Webserver mitgeloggt. Aktiviert wird es mit

lighty-enable-mod accesslog


1. /etc/lighttpd/conf-available/10-accesslog

server.modules += ( "mod_accesslog" )
accesslog.filename = "/var/log/lighttpd/access.log"

Damit die Datei access.log für jeden Host einzeln angelegt wird, kann man sie wie bei Lighttpd üblich in eine bedingte Konfiguration einbinden.

accesslog.filename = "/var/log/lighttpd/linuxiuvat.de/access.log"

mod_expire

Das Modul mod_expire hilft dabei statische Inhalte aggressiv zu cachen, d.h. Bilder, CSS- und Javascriptdateien erhalten bei der Übertragung an den Webbrowser ein Verfallsdatum bis zu dem der Browser die Dateien aus seinem Cache lädt anstatt sie neu vom Server anzufordern. Das spart Bandbreite und führt zu schnelleren Ladezeiten.
Aktivieren mit

lighty-enable-mod expire


Die Bedingung lässt sich z.B. so schreiben, dass nur Dateien mit einer bestimmten Dateiendung zwischengespeichert werden sollen. In diesem Fall beträgt die Verfallszeit sieben Tage vom ersten Aufruf an.

	$HTTP["url"] =~ ".(jpg|gif|png|css|js)$" {
	     expire.url = ( "" => "access 7 days" )
	}

Natürlich kann man die Bedingung auch so schreiben, dass die Dateien nur aus zwei verschiedenen Verzeichnissen gecached werden sollen.

	$HTTP["url"] =~ "^/img/|/stats/oa/icons/" {
	     expire.url = ("" => "access 7 days")
	}

Mit Hilfe des Firefox-Plugins Live-HTTP-Headers oder mit curl kann man schnell feststellen, ob tatsächlich der richtige HTTP-Header verschickt wird.

curl -I http://linuxiuvat.de/img/openarena.jpg


Quelle: Forum von nixcraft.com.

mod_ssl

Zum Aktivieren einer verschlüsselten SSL-Verbindung per HTTPS genügt wieder ein
lighty-enable-mod ssl
Das SSL-Zertifikat habe ich mir selbst ausgestellt, was ich für kleine Projekte, bei denen man der einzige Betrachter der verschlüsselten Seite ist auch empfehlen kann. Wer jedoch eine Shop-Seite zusammenzimmert sollte seine Kunden wenn möglich nicht mit einer Warnmeldung im Browser verschrecken und ein "richtiges" Zertifikat kaufen. 🙂

Als Superuser:

openssl req -new -x509 -keyout linuxiuvat.de.pem -out linuxiuvat.de.pem -days 365 -nodes


Die Pem-Datei wurde nach /etc/lighttpd/ssl/linuxiuvat.de/linuxiuvat.de.pem kopiert und die Dateirechte aus Sicherheitsgründen mit chmod 400 eingeschränkt.

1. /etc/lighttpd/conf-available/10-ssl.conf
Ich habe die Konfiguration getrennt und den Teil, der sich um die SSL-Engine selbst dreht in der 10-ssl.conf belassen. Wichtig ist hier nur die richtige Adresse für den Socket einzutragen, also eure IP-Adresse und den Port des Webservers. Alternativ kann man auch :443 oder 0.0.0.0:443 schreiben, wenn man möchte, dass der Webserver auf allen Interfaces Anfragen entgegennimmt. Die Schreibweise muss aber überall die gleiche sein.

$SERVER["socket"] == "134.0.24.218:443" {
     ssl.engine = "enable"
     ssl.pemfile = "/etc/lighttpd/ssl/linuxiuvat.de/linuxiuvat.de.pem"
     ssl.cipher-list = "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
     ssl.honor-cipher-order = "enable"
}

2. /etc/lighttpd/lighttpd.conf
Durch die bedingte Konfiguration sind die beiden Subdomains munin.linuxiuvat.de und stats.linuxiuvat.de nur über HTTPS zu erreichen. Es wurde jeweils das Dokumenten-Wurzelverzeichnis geändert, so dass es auf den Standardausgabepfad von Munin und Awffull zeigt. Die Statusseite ist über https://munin.linuxiuvat.de/status zu erreichen und wird durch das Modul mod_status aktiviert.

$SERVER["socket"] == "134.0.24.218:443" {
		$HTTP["host"] =~ "(^|.)munin.linuxiuvat.de$" {
			server.document-root = "/var/cache/munin/www"
			status.status-url = "/status"
		}
		$HTTP["host"] =~ "(^|.)stats.linuxiuvat.de$" {
			server.document-root = "/var/www/awffull/"
		}
}

mod_auth

Das Authentifizierungsmodul ist notwendig, um den Zugriff auf einzelne Verzeichnisse einzuschränken. In meinem Fall genügt es, dass ich die Munin- und Awffull-Statistiken anschauen kann. Das Modul mod_auth wird mit

lighty-enable-mod auth


aktiviert. Es gibt zwei verschiedene Methoden sich zu authentifizieren - Basic und Digest. Je nach Methode existieren unterschiedliche Backends, wie die Passwörter aufgebaut und gespeichert werden. Ich habe mich für Digest und htdigest entschieden, wodurch das Passwort nicht in Klartext übertragen wird und als MD5-Hash abgespeichert wird. Alle Methoden sind dennoch nur dann wirklich sicher, wenn das Passwort über eine verschlüsselte Verbindung übertragen wird.
1. /etc/lighttpd/conf-available/10-auth.conf

server.modules += ( "mod_auth" )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.passwd"
auth.debug = 2
$HTTP["host"] =~ "(^|.)munin.linuxiuvat.de$" {
 auth.require = ( "" =>
    (
    "method" => "digest",
    "realm" => "privat",
    "require" => "valid-user"
    ),
 )
}

Auth.debug=2 ist sehr gesprächig, aber hilfreich, wenn man mehr über erfolgreiche und nicht erfolgreiche Loginversuche wissen möchte. Die versteckte Passwortdatei .passwd mit den benötigten Inhalten lässt sich wie folgt erstellen. Der "Realm" kann beliebig gewählt werden.

htdigest -c /etc/lighttpd/.passwd 'privat' Bob


Das Programm htdigest befindet sich im Paket apache2-utils und wird nur für diese eine Aufgabe benötigt. Danach hat nur noch der Benutzer Bob mit dem zuvor eingegebenen Passwort Zugriff auf das Verzeichnis, wobei die gesamte Verbindung gegenüber Dritten per SSL abgesichert ist.

mod_status

Mit mod_status gibt es Auskunft über Uptime, Anfragen pro Sekunde und aktive Verbindungen, kurz zusammengefasst also über den Status des Webservers. Die HTML-Seite ist schlicht und übersichtlich. Um die Daten per Munin mit einem Graphen zu visualisieren kann man noch ein ?auto an die URL anhängen, wodurch die Ausgabe als Text dargestellt wird. Hierzu in einem anderen Artikel mehr.
Das Modul wird mit
lighty-enable-mod status
aktiviert. Die Zeile

status.status-url = "/status"

muss wie in der Konfiguration gezeigt innerhalb der bedingten Host-Konfiguration eingefügt werden.

Was sonst noch?

Lighttpd bietet noch weit mehr Möglichkeiten und Module. Das sind zur Zeit aber alle, die ich für mein Projekt und dieses Beispiel verwende. Man sollte im Hinterkopf noch mod_evasive und die Variablen

server.kbytes-per-second
connection.kbytes-per-second

behalten, wenn man den Traffic auf dem Webserver besser steuern möchte.
Für Lighttpd gilt: Fast jedes Problem lässt sich mit der bedingten Konfiguration lösen.

Links

Server automatisch mit Hilfe von Unattended-Upgrades und Apticron aktualisieren

Eine der wichtigen Aufgaben als Admin ist es, Sicherheitsaktualisierungen zeitnah auf dem Server einzuspielen. Bei meiner Suche zu Informationen zu Unattended-Upgrades habe ich diesen englischen Artikel auf howtoforge.com gefunden, der sowohl Unattended-Upgrades als auch Apticron vorstellt. Deswegen nur zur Dokumentation für das Spieleserverprojekt, drei wichtige Punkte.

1. Debians Sicherheitsankündigungen

Nicht nur für Serveradmins, sondern auch allgemein zu empfehlen ist Debians Mailingliste für Sicherheitsankündigungen. Hier werden nur sicherheitskritische Meldungen des Sicherheitsteams veröffentlicht, weswegen die Liste ruhig und äußerst informativ ist.

2. Unattended Upgrades

Unattended-Upgrades ist eine Software, die automatisch und unbeaufsichtigt Sicherheitsaktualisierungen herunterladen und aktualisieren kann.
aptitude install unattended-upgrades
/etc/apt/apt.conf.d/50unattended-upgrades:
Die Datei ist gut kommentiert. Hier lässt sich festlegen, welche Debian-Distribution aktualisiert werden soll, ob Pakete auf eine Schwarze Liste kommen und nicht erneuert werden dürfen, ob man per E-Mail informiert werden möchte, der Rechner nach dem Update neugestartet werden soll und so weiter. // leiten Kommentare ein.
Ein Auszug:

// Automatically upgrade packages from these (origin, archive) pairs
Unattended-Upgrade::Allowed-Origins {
"${distro_id} stable";
"${distro_id} ${distro_codename}-security";
// "${distro_id} ${distro_codename}-updates";
// "${distro_id} ${distro_codename}-proposed-updates";
};
// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
// "vim";
// "libc6";
// "libc6-dev";
// "libc6-i686";
};
// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. The package 'mailx'
// must be installed or anything that provides /usr/bin/mail.
Unattended-Upgrade::Mail "root@localhost";

/etc/apt/apt.conf.d/02periodic
In 02periodic wird das eigentliche Paket aktiviert. Täglich wird dann auf Updates überprüft.

// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";
// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";
// Do "apt-get upgrade --download-only" every n-days (0=disable)
APT::Periodic::Download-Upgradeable-Packages "1";
// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";
// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";

Das war es auch schon. Bei einem Update werden alle Nachrichten nach /var/log/unattended-upgrades geschrieben.
Zusätzlich besteht auch die Möglichkeit das Paket mit Hilfe von debconf zu konfigurieren.
dpkg-reconfigure -plow unattended-upgrades

3. Apticron

Als Alternative oder zur Ergänzung kann man apticron installieren, ein Shellskript, das regelmäßig auf Updates überprüft, im Gegensatz zu unattended-upgrades aber die Pakete nicht automatisch installiert. Mit Hilfe von apt-listchanges werden Veränderungen und Neuigkeiten per E-Mail an die eingestellten Adressen verschickt.
Diese werden in /etc/apticron/apticron.conf festgelegt.

Eine Beobachtung mit Debian Sid: Nvidia-Pakete auf hold setzen

Im Mai letzten Jahres habe ich ein Multiboot-System aufgesetzt und mir ein auf Spiele ausgerichtetes Debian Sid installiert. Es sind nur die notwendigen Programme für eine grafische Oberfläche mit Openbox installiert und ich bin sehr zufrieden mit dem Setup. Die Bedienung ist wie gewohnt reaktionsfreudig, einfach und schnell.
Das System ist dadurch immer topaktuell, insbesondere wenn es die Nvidia-Treiber betrifft, die für 3D-Spiele immer noch notwendig sind. Leider haben sie mir in der Vergangenheit auch Probleme bereitet. Ich habe deshalb vor mehreren Monaten beschlossen bei der letzten stabilen Version zu bleiben und die Pakete auf "hold" zu setzen und nicht mehr zu erneuern.
Das geht am einfachsten mit
aptitude hold '~nnvidia'
Mit ~n und dem folgenden Begriff werden alle Pakete, die "nvidia" im Namen führen bei einem Update zurückgehalten.
Mit dem Befehl
aptitude search '~ahold'
lassen sich alle geblockten Pakete anzeigen.
Nun, macht das wirklich Sinn? Ich denke ja. Voraussetzung ist, dass man gerne mit Unstable oder Testing arbeitet, ausprobiert und die neuste Software verwenden möchte. Updates für kritische Pakete, die in der Vergangenheit häufiger Probleme bereitet haben, sollen zurückgehalten werden. Im meinen Fall waren das die unfreien Nvidia-Treiber. Prinzipiell sollte sich das aber auch auf andere Software übertragen lassen.
Die Gefahr besteht natürlich, dass bei übertriebenem Einsatz von "hold" notwendige Updates verhindert werden, die z.B. sicherheitskritisch sind oder die Stabilität des Systems verbessern. Meine bisherige Erfahrung mit den Nvidia-Treibern hat mir aber gezeigt, dass es auch sehr sinnvoll sein kann Updates zu blockieren.
Für diesen Beitrag habe ich zuerst mit Partclone ein Backup der Partition gemacht, auf der das Spielesystem installiert ist. Die Vorgehensweise war die gleiche wie damals bei TinyCore Linux.

Sichern

partclone.extfs -c -d -s /dev/sda7 -o /home/apo/backup/20120422_loki_sda7.img

Wiederherstellen

partclone.restore -d -s /home/apo/backup/20120422_loki_sda7.img -o /dev/sda7
Wie sich mal wieder gezeigt hat, sind Backups einfach unheimlich nützlich. Nachdem ich mit
aptitude unhold '~nnvidia'
die Nvidia-Pakete freigegeben hatte, machte ich ein Update auf die aktuelle Version 290.40. Schon kurze Zeit später stellte ich fest, dass sich Spiele nicht mehr richtig beenden ließen, die grafische Oberfläche einfror und der Rechner nur noch mit Hilfe von SSH und der Konsole neugestartet werden konnte.
Ich bin daraufhin wieder zu Version 275 zurückgewechselt. Der Paketbetreuer für Nvidia kann in diesem Fall wenig machen. Diese Art von Regressionen treten häufig auf und können nur durch Nvidia selbst gelöst werden. Am besten man meldet das Problem im Support-Forum von Nvidia.
Meine Beobachtung ist, dass man bei Debian durchaus auch Pakete einmal auf Halt setzen kann, was der Stabilität keinen Abbruch tut. Eher im Gegenteil.

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.