Aufräumtipps Teil III: Debsums – Geänderte oder kaputte Dateien mit Debian und Ubuntu finden

Debians Paketsystem kann mehr als nur Software installieren. Tatsächlich ist jedes Paket nach einem sehr präzisen Schema aufgebaut, dass es ermöglicht zusätzliche Informationen zu speichern. Eine (beinahe) unverwechselbare Eigenart jedes Pakets ist die Md5-Prüfsumme. Beinahe deswegen, weil es mittlerweile möglich ist verschiedene Dateien zu erzeugen, die den gleichen Hashwert besitzen.
Zum Auffinden von geänderten Dateien gibt es das Paket debsums. Ruft man es einfach mit

debsums


auf, ist die Ausgabe sehr wortreich und zeigt mit OK oder FAILED an, ob eine Datei eines installierten Debianpakets manipuliert wurde oder nicht. Ausgeschlossen von dieser Anzeige sind grundsätzlich Konfigurationsdateien. Mit der Option -a, --all werden diese in die Überprüfung miteinbezogen. Gibt man hingegen -e, oder --config an werden nur geänderte Konfigurationsdateien angezeigt.
Die interessanteste Option aber ist -c oder --changed, mit der sich nur die veränderten Dateien anzeigen lassen. Ich hatte vor einigen Wochen die Installationsbeschreibung für meinen neuen Drucker niedergeschrieben und dabei auch dokumentiert, dass ich /lib/udev/rules.d/60-libsane.rules ändern musste.
Ein paar Wochen später wunderte ich mich, warum der Scanner nicht mehr richtig funktionieren wollte. Ich hatte leider vergessen, dass die Regeln durch ein Upgrade von udev überschrieben wurden und somit meine Veränderungen verloren gingen. (Ich muss das im alten Beitrag noch ergänzen. 🙂 )
Mit

debsums --changed


sieht man dann sofort, welche Dateien des Pakets geändert worden sind und kann ggf. Vorsichtsmaßnahmen ergreifen. Nicht jedes Debianpaket bietet eine Md5-Prüfsumme an. Wie Eingangs schon erwähnt besteht auch die Möglichkeit identische Prüfsummen für zwei verschiedene Dateien oder Pakete zu erzeugen, weswegen man sich nicht blind auf debsums bei einem Sicherheitsaudit des eigenen Rechners verlassen sollte. Es gibt auch Software wie z.B Tiger, die eine solche Funktion schon integriert hat.
Insgesamt ist debsums ein sehr nützliches Werkzeug, wenn man schnell wissen möchte, was sich gegenüber dem Originalpaket geändert hat oder wenn man fremde Rechner übernimmt und einen schnellen Überblick über die Veränderungen haben möchte.
Dieser Tipp stammt ebenfalls aus dem englischen Blog von Raphaël Hertzog.

Aufräumtipps Teil II: Automatisch installierte Pakete mit Debian und Ubuntu entfernen

Hier ist ein weiterer Artikel zum Thema Aufräumen mit Debian und Ubuntu, der sich an den letzten Artikel nahtlos anschließt. Raphaël Hertzog hat in seinem englischen Blog daraus eine kleine Serie gemacht, die ich so interessant fand, dass ich sie in Deutsch hier festhalten wollte.
In diesem Fall geht es um automatisch installierte Pakete und wie man sie wieder loswerden kann.
Jeder kennt das sicherlich bei Debian und Ubuntu, wenn man apt-get oder aptitude benutzt und folgende Ausgabe im Terminal zu sehen ist.

apt-get install claws-mail
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Statusinformationen werden eingelesen... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
claws-mail-i18n libcompfaceg1 libetpan15 libpisock9
Vorgeschlagene Pakete:
claws-mail-doc gedit kwrite mousepad nedit claws-mail-tools jpilot pilot-link kpilot gnome-pilot evolution sylpheed
Die folgenden NEUEN Pakete werden installiert:
claws-mail claws-mail-i18n libcompfaceg1 libetpan15 libpisock9
0 aktualisiert, 5 neu installiert, 0 zu entfernen und 2 nicht aktualisiert.
Es müssen 4.356 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 11,3 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]?

Die "folgenden zusätzlichen Pakete" sind die automatisch installierten Pakete, die man zwar nicht explizit installieren wollte, die aber notwendig sind, damit das ursprüngliche Programm, claws-mail, reibungslos funktioniert.
Aptitude stellt für diese Pakete ein Extrafeld zur Verfügung.

Mit aptitude show claws-mail-i18n findet man z.B.

Automatically installed: yes

Je nachdem welches Frontend man bevorzugt, kann man entweder mit

apt-mark showauto

oder

aptitude search ~M


automatisch installierte Pakete finden. Während aptitude diese zusätzlich installierten Pakete mit aptitude remove claws-mail oder aptitude purge claws-mail entfernen würde, benachrichtigt apt-get einem nur über diese Möglichkeit. Tatsächlich muss man noch apt-get autoremove ausführen, damit apt-get diese automatisch installierten Pakete wieder entfernt.
Der Trick mit diesem Feature ist der folgende. Man kann zum einen Software als automatisch installiert markieren.

apt-mark markauto cmus

oder

aptitude markauto cmus

Damit erkennt der Paketmanager, dass diese Pakete nicht mehr gebraucht werden, sofern kein weiteres Paket mehr davon abhängt. Auf meinem System würde der letzte Befehl z.B. sofort zur Deinstallation von cmus führen.
Häufiger hingegen kommt es vor, dass plötzlich ganze Desktopumgebungen deinstalliert werden sollen, wenn man nur daran interessiert ist Teile der Gnome-Desktopumgebung zu entfernen.
Der "Trick" besteht auch hier darin, dem Paketmanager zu signalisieren, was man behalten möchte und was nicht. Stellt man fest, dass Metapakete oder wichtige Software wie gnome-session oder gnome-shell entfernt werden sollen, kann man mit

apt-mark unmarkauto gnome-session gnome-shell oder
aptitude unmarkauto gnome-session gnome-shell


dem System deutlich machen, dass man diese Pakete behalten möchte. Mit dieser Methode lässt sich gezielt automatisch installierte Software entfernen, ohne dass die ganze Distribution dadurch in Mitleidenschaft gezogen wird.
Zusammen mit den weiteren Hilfsmittel ist das eine gute Ausgangsbasis sein Debian minimal und sauber zu halten.

Tetrinet: Tester gesucht

Es müssen ja nicht immer nur Ego-Shooter sein, dachte ich mir und bin auf der Suche nach internetfähigen Spielen über Tetrinet gestolpert. Ich denke bei Tetris werden Erinnerungen wach. In Russland fing alles an, ich habe es zum ersten Mal anno dazumal auf dem Gameboy in schwarz-weiß gespielt und ich wette ohne nachgeschaut zu haben, dass man es als App für Smartphone X irgendwo in 10 verschiedenen Varianten herunterladen kann.
So viel sei verraten, Tetrinet bringt das Spiel zu neuen Höhen und erweitert den Spaß um den Faktor Mehrspieler und Internet. Bis zu sechs Spielerinnen und Spieler können gemeinsam gegeneinander oder in Teams antreten. Das Besondere an dem Spiel ist, dass durch erfolgreiches Abräumen neue Bausteine freigeschaltet werden, mit denen man zu Gunsten oder Ungunsten seiner Mitspieler in das Spiel eingreifen kann.

Das ist gtetrinet, der Gnome-Klient. Ihr startet das Programm, klickt auf "Verbinden" und gebt als Server linuxiuvat.de ein und wählt einen beliebigen Spielernamen. Anschließend befindet ihr euch auf dem Spielfeld und könnt als nächstes den Partyraum (Chat) betreten oder die Gewinnerliste anschauen. Ich denke die restlichen Feature finden sich recht schnell. 😀
Wenn es einen Client gibt, existiert natürlich auch ein Server. Womit wir bei TetrinetX angekommen sind. Sollte die Resonanz positiv sein, stelle ich das Debian-Paket irgendwann genauer vor. Es bringt auf jeden Fall vom Init-Skript, über sauber kommentierte Konfigurationsdateien bis hin zur separaten Logdatei in /var/log alles mit, was man sich als Admin wünschen kann.
Moment, Moment natürlich gibt es auch einen Tetrinet-Client für die Konsole mit dem Namen...Tetrinet-Client.

Ich will nämlich nicht verschweigen, dass gtetrinet fast die gesamte Gnome-Desktopumgebung als Abhängigkeit zieht (ich übertreibe, aber auch nur fast). Für alle Retrozocker, die auch noch über einen Laptop aus dieser Zeit verfügen eine sehr ressourcensparende Alternative. Außerdem besitzt tetrinet-client ein interessantes Feature, was manche vielleicht als Cheat bezeichnen würden. Ich empfinde die grafische Andeutung, wo der Spielstein landen wird, auf jeden Fall als sehr nützlich.

Ihr verbindet euch zu meinem TetrinetX-Server, indem ihr tetrinet-client von der Konsole wie folgt aufruft.

tetrinet-client EuerSpielname linuxiuvat.de

Einfach oder nicht?
Auf was ich hinaus will und der Titel andeutungsweise schon erahnen lässt. Ihr müsst den Server testen und das Spiel wiederbeleben. 🙂 Tetrinet gab es schon vor mehr als einer Dekade, wovon die vielen Internetadressen a la tetrinet.TLD zeugen. Mittlerweile ist das Spielerfeld ein wenig ausgedünnt.
Deswegen mein Angebot: Wenn in den nächsten Wochen sich die Gewinnerliste ein wenig füllt, bastle ich noch eine Siegerliste auf linuxiuvat.de und nehme den Server offiziell in die Reihen der Spiele auf. Falls nicht, tja, dann seid ihr dran Schuld, dass ich ein weiteres Killerspiel installieren muss. 😈

XZ-Kompression, Wheezy Freeze und ab Ubuntu 12.10 keine CDs mehr

Auf der Mailingliste der Debian-Entwickler, debian-devel, wurde vorgestern ein interessantes Thema in Gang gesetzt: "Wheezy release: CDs are not big enough any more"
Irgendwann hat es die Floppies erwischt, nun scheint es so, als ob CDs das gleiche Schicksal ereilen würde. Der Platz geht aus. Debian und Ubuntu unterstützen bisher die Installation einer kompletten Desktopumgebung mit Gnome, KDE, Xfce und LXDE mit jeweils einer separaten CD. Zusätzlich existieren noch Live-CDs, die ich schon scherzhaft in Kebian, Lebian und Xebian umbenennen wollte. Für die restlichen mehr als 30000 Pakete werden weitere CD-Abbilder vorgehalten, die in der Regel nicht gebraucht werden, sofern man über einen Internetanschluss verfügt.
Da der Freeze für Wheezy immer näher rückt, angepeilt ist die zweite Hälfte des Juni, hat Steve McIntyre auf debian-devel die Frage gestellt, wie man nun alle notwendigen Daten auf nur eine CD unterbringen will.

XZ-Kompression

Tatsache ist, dass auch schon in der Vergangenheit nicht jede Komponente des Gnome-Desktops auf der ersten CD Platz fand und deswegen die fehlende Software über das Internet nachgeladen werden mussten. Ein möglicher Lösungsansatz ist die Verwendung von XZ-Kompression anstatt von gzip oder bzip2, das Aufgeben von CDs zu Gunsten von DVDs oder gar die Abkehr von Gnome als Standardinstallation hin zu leichtgewichtigeren Desktopumgebungen wie z.B. LXDE.
XZ-Kompression, auch bekannt unter dem Namen des verwendeten Algorithmus LZMA, bietet hier einige Vorteile. Wer die xz-utils installiert hat und z.B. mit tar und der Option "-J" Daten komprimiert, stellt schon bald die deutlich verbesserte Kompressionsrate fest. XZ scheint bei mir Daten förmlich zu "verdampfen". Große Abbilder von Festplatten oder Partitionen, die ich mit Partimage oder Partclone sichere, werden regelmäßig mit xz komprimiert und auch die ein oder andere SQL-Datei schrumpfte schon von 109 MB auf lediglich 15 MB zusammen. Gerade für Backupzwecke und zum Platzsparen, wenn Daten Monate oder gar Jahre unangetastet bleiben, ist das äußerst nützlich.
Der Nachteil liegt jedoch in der speicher- und zeitintensiveren Erzeugung der Kompression gegenüber den etablierten Formaten gz und bz2. Im Gegensatz dazu erfolgt die Dekompression der Daten nur unwesentlich langsamer als bei gzip und ist ungefähr doppelt so schnell als bei bzip2. Das macht XZ gerade für das Komprimieren von Binärdateien und Softwarepaketen interessant. Arch Linux hat hier schon vor zwei Jahren umgestellt.
Da die Rechenleistung auf den Build-Daemons zur Erzeugung von Binärdateien anfallen, bekommt der Endanwender von der Veränderung nichts mit, sieht man mal von der geringeren Dateigröße ab. Im gleichen Entwickler-Thread wurde aber auch ein Problem eines universellen Betriebssystem angesprochen, denn Debian lässt sich auch mit Hilfe von Debootstrap von fremden Systemen aus installieren. Da ältere Versionen von Debootstrap XZ noch nicht unterstützen, könnte das auch auf Android-Smartphones mit Debian zum Problem werden.

Was macht Ubuntu?

Wie geht Ubuntu mit der selben Herausforderung um? Steve Langasek, Debian-Entwickler, ehemaliger Release Manager und jetzt Angestellter von Canonical, kündigte hier schon mal für Ubuntu 12.10 an, dass es keine CDs mehr geben und die Größe des Installationsabbildes auf 800 MB anwachsen wird. In Zukunft werden also nur noch DVDs, USB-Sticks und natürlich die Netzinstallation unterstützt.
In Anbetracht des bevorstehenden Freeze bei Debian kann ich mir vorstellen, dass die Umstellung auf XZ-Kompression bei den Binärpaketen noch etwas aufgeschoben wird, die das eigentliche Problem leider auch nur verlangsamen können. Für eher wahrscheinlich halte ich da das Szenario "Keine CDs mehr" oder "CD1 + CD2" für eine Desktopinstallation.
Für mich steht aber schon heute fest, ich bleibe weiterhin bei der Netzinstallation bzw. alternativen Installation von Ubuntu. Wie seht ihr das? Sind CDs Geschichte?

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.

Schickes Booten mit Debian und eine Bitte

Vor kurzem war es auch in Debian Testing soweit. Dank einem Update von lsb-base ist das Booten nun endlich schick geworden. Ich kann mich noch dran erinnern, dass ich mich schon vor ungefähr zehn Jahren gefragt habe, warum Debian eine der wenigen Distributionen war, wo es keine farbige Anzeige gab, die signalisierte, ob Dienste erfolgreich gestartet worden waren oder eben nicht.
Hatte es vielleicht technische Gründe oder war man der Meinung, es würde den Benutzer verwirren und vom Wesentlichen ablenken? Ich wusste es nicht, schaute aber immer ein wenig neidisch zu RedHat, Mandriva, SuSe und Arch Linux. Zugegeben es war nicht wirklich kritisch und der bisherige Output gefiel mir sogar besser als die grafische Lösung mit Plymouth.
Ab sofort gibt es jetzt also Statusmeldungen wie

[ ok ]
[info]
[warn]
[FAIL]

in den passenden Signalfarben.
Nur noch ein Wunsch für das Booten bleibt. Bitte, bitte Ubuntu ich möchte nicht nach jedem Kernelupdate einen neuen Eintrag in GRUB vorfinden, weil sich die Versionsnummer wieder um eine Kleinigkeit geändert hat. Schlimmer noch, die alten Kernel nehmen unnötig Platz weg, weswegen ich schon vor vier Jahren den Weg zum Entfernen beschrieben habe...
Eine alte und eine aktuelle Kernelversion, so wie es sie bei Arch Linux gibt, das wäre was. Selbst bei Debian verändert sich momentan an dem 3.2 Kernel nichts. Nein, sonst habe ich keine Probleme. 🙂

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.

ubuntuusers.de: Spendenaufruf für neue Server

Die Gemeinschaft von ubuntuusers.de, die wohl unter anderem eines der größten Foren und Wikis zum Thema Linux führt, braucht eure Hilfe!
Scheinbar müssen die Server im Hintergrund ausgetauscht werden, nachdem sich herausgestellt hat, dass sie veraltet sind und die Administration sich logistisch bisher eher schwierig gestaltet hat.
Mit der Spende tragt ihr also zum dauerhaften Fortbestand dieser Wissensquelle bei und sichert somit die Informationen auch für die nächste Generation. 😉
Ich denke, das ist ein ziemlich guter Grund. Hier gehts lang.

Noch 48h – Ein Rückblick auf das Humble Botanicula Debut

Der Themenschwerpunkt stimmte. Die Erstveröffentlichung von Botanicula und die Spende für den gemeinnützigen World Land Trust, der sich unter anderem um die Bewahrung der Regenwälder kümmert. Da fügte sich Botanicula natürlich mit seiner Umweltthematik und einer Spielperspektive aus der Sicht von Insekten und Baumbewohnern perfekt ins Bild ein.
Als Linuxbenutzer und jemand, der sich über jede Spieleportierung auf die Linuxplattform freut, war ich hingegen ziemlich enttäuscht, dass Botanicula nur mit Adobe AIR funktionierte, ein Produkt, welches Adobe letztes Jahr offiziell für den Linuxdesktop begraben hatte.
Deswegen landet dieser Artikel zu den Humblebundles auch unter der Rubrik Spiele mit Linux und Wine, wo er besser aufgehoben ist als in der nativen Kategorie. Denn so groß ist mein Anspruch schon, dass man ein Spiel nur für die Linuxplattform bewerben sollte, wenn zumindest sichergestellt ist, dass die externen Programme dafür in einer aktuellen Version existieren, wenn sie nicht einmal zur freien Software zählen.
Ok, Schwund ist bekanntlich immer. Das Hauptprodukt hat mich nicht zum Kauf bewogen. Da waren aber noch Machinarium und Samorost2. Beide laufen wunderbar mit GNU Gnash. Da es Machinarium aber z.B schon im Humble Bundle 3 gab, lagen meine Hoffnungen auf Samorost2. Beide Point-and-Click-Abenteuer sind optisch sehr ansprechend, sehr detailreich und phantasievoll. Den Entwicklern kann man für das Design nur ein Lob aussprechen.

Wer mehr als der Durchschnitt gezahlt hatte, konnte sich auch den animierten Film Kooky herunterladen oder per Stream anschauen, der die Geschichte eines Spielzeug-Bären erzählt, welcher den Weg zurück nach Hause finden muss.
Schließlich gab es auch noch das Puzzlespiel Windosill. Es lief auf Anhieb, da der Adobe Flashplayer integriert war und wirkte schon durch die bizarren Objekte und Figuren ein wenig surreal.

Das Humble Botanicula Bundle rief gemischte Gefühle bei mir hervor. Die Linuxversionen waren einfach nicht im selben Maße herausragend, wie das z.B. beim Frozenbyte Bundle oder dem Humble Indie Bundle 4 der Fall war.
Auf der anderen Seite funktionierten alle Spiele außer Botanicula auf Anhieb mit GNU Gnash oder selbständig und es gab noch weiteres Bonusmaterial, das noch einmal Optik und Design der Spiele hervorgehoben hat. Wirklich, die herausragenden Designfähigkeiten der Entwickler sind unbestritten.
Und schließlich kann man sich bei einem "Bezahl-was-du-willst"-Angebot nicht beschweren, wo man jederzeit die Möglichkeit hat sich die Spiele für 1 Cent vorher anzusehen und dann immer noch entscheiden kann, ob sie es wert sind oder nicht. Von daher: Wer die Wahl hat, hat die Qual.

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