Archiv für Februar 2010

keyhole-heimdal.pngAuf den Chemnitzer Linux-Tagen hält Alexander Wirt einen Vortrag über Single-Sign-On mit Kerberos. Er gibt eine Einführung in Kerberos so wie in die Konfiguration verschiedener Dienste.

Kerberos ist ein Authentifizierungsprotokoll, mit dessen Hilfe verschiedene Dienste und Betriebssysteme transparent in ein System eingebunden werden können. Damit ist es möglich, ein Single-Sign-On zu ermöglichen: der Nutzer tippt nur einmal sein Passwort ein, und kann danach auf alle gesicherten Dienste im Netzwerk zurückgreifen, die Kerberos unterstützen - vom E-Mail-System bis hin zu den einzelnen Webseiten.

Dieses Vorgehen beschreibt Alexander Wirt, credativs Spezialist auf dem Gebiet, im Detail auf einem Vortrag auf den Chemnitzer Linux-Tagen Mitte März: neben einer Einführung in die allgemeinen Grundlagen von Kerberos beschreibt er die praktische Einrichtung des Kerberos-Servers auf der Basis der Heimdal-Implementierung sowie die Konfiguration der eigentlichen Dienste: SSH, Apache und IMAP sind klassische Beispiele. Durch die Praxisnähe des Vortrags wird der Zuhörer in die Lage versetzt, später ein eigenes Setup zu erstellen und weitere Dienste einzubinden.

Der Vortrag findet am 13. März 2010 um 15:00 Uhr im Raum V4 statt.

PostgreSQL 9.0alpha4 erschienen

| Keine Kommentare | Keine TrackBacks

postgreslogo.pngDas PostgreSQL-Projekt hat die Alpha 4 der kommenden Version PostgreSQL 9.0 veröffentlicht.

Ab sofort steht die Alpha-Version 4 des kommenden PostgreSQL 9.0-Releases zum Download bereit. Alpha4 wird voraussichtlich die letzte Version vor der finalen Betaphase für PostgreSQL 9.0 werden. Einige Highlights der Alphaversion sind:

  • Überarbeitete LISTEN/NOTIFY Infrastrukur. Durch eine reine Hauptspeicherlösung ist diese neue Lösung deutlich performanter als die alte tabellenbasierte Implementierung. Auch unterstützt die neue Lösung sogenannte "Payloads", womit sich bespielsweise Nachrichten übertragen lassen.

  • Streaming Replication, eine integrierte Replikationslösung, die deutlich geringere Latenzen vorweist als die üblichen, auf WAL-Shipping basierende Lösungen.

  • Prozeduraler Code mit plpgsql oder plperl kann nun mit dem DO-Statement ausgeführt werden, ohne vorher eine Funktion mit CREATE FUNCTION erzeugen zu müssen.

Interessierte sind herzlich eingeladen, die Alphaversion zum Testen oder Ausprobieren herunterzuladen. Bugs oder interessante Testresultate sind willkommen, die Vorgehensweise hierfür kann dem Wiki der PostgreSQL-Entwicklergruppe entnommen werden.

tux.jpgBei der Administration einer großen Zahl von Servern ist ein zentrales Konfigurations-Management irgendwann unabdingbar. Dieser Artikel beschreibt in einer ersten Einführung das in Ruby geschriebene Framework Puppet.

Einführung

Teil unseres Tagesgeschäfts ist es, beliebig große Server-Installationen zu verwalten und zu warten. Gerade bei großen Clustern heißt dies, eine Vielzahl von Maschinen mit fast identischer Konfiguration nebeneinander zu betreiben. Ohne eine zentralisierte, automatisierte Konfigurations-Verteilung ist dies kaum machbar - an dieser Stelle tritt Puppet auf den Plan.
Wie auch andere Konfigurations-Management-Werkzeuge greift Puppet auf einen zentralen Server zurück, der die Konfiguration verwaltet. Dort fragen die "Clients" verschlüsselt die Konfiguration ab, und spielen Sie gemäß der Vorgaben des Servers ein, verändern Rechte, führen Befehle aus, etc. Die Vorteile liegen auf der Hand:
  • Arbeitsschritte müssen unabhängig von der Rechner-Zahl nur einmal umgesetzt werden, unnötige Wiederholungen werden vermieden.
  • Für alle Rechner vereinheitlicht sich die Konfiguration zwangsweise - und wird damit einfach wartbar.
  • Die zentrale Infrastruktur ermöglicht einen schnellen Überblick an einer Stelle - ein "Rumlaufen", entfällt.
  • Der zentrale Konfigurationsbaum ermöglicht damit eine Versionierung: das Zurückspielen der Konfiguration für alle Rechner eines Netzwerkes z.B. auf den Stand "PRE-UPDATE" geht mit wenigen Befehlen, für das ganze Netzwerk!

Technische Arbeitsweise

Puppet besteht aus einem zentralen Server, Puppet-Master genannt, und den Clients, genannt Nodes. Diese melden sich beim Master an, und fragen dort nach der aktuellen Konfiguration. Der Master gibt diese an die Nodes weiter - die Möglichkeiten der Anweisungen des Masters sind schier unbegrenzt:
  • Der Server kann Dateien übergeben, die an bestimmte Orte kopiert werden.
  • Die Node kann angewiesen werden, Dateirechte zu prüfen und notfalls zu korrigieren.
  • Je nach Betriebssystem kann erzwungen werden, dass die Node prüft, ob bestimmte Dienste aktiv sind, oder ob bestimmte Pakete auch in der neuesten Version installiert sind.
  • Der Server kann die Node anweisen, bestimmte Befehle auszuführen.
  • usw.
Im Prinzip kann alles mit der Übergabe von Dateien vom Server an die Node erledigt werden, doch ist dies in komplexen Setups weder übersichtlich noch vereinfachend. Gerade die Abstraktion von System-Aufgaben (Dienste neu starten, Paket-Versionen sicherstellen, Nutzer einrichten, etc.) ohne das direkte Überschreiben von Dateien hilft ungemein beim Konfigurieren komplexer Systeme.

Installation

Für die Installation benötigt man einen zentralen Puppet-Master, der die Konfiguration verwaltet: apt-get install puppetmaster Puppet geht davon aus, dass alle beteiligten Rechner FQDNs haben, dies sollte in einem korrekt gewarteten Netzwerk aber eh der Fall sein!
Auf jedem zu verwaltenden Rechner wird ein Puppet-Client mit apt-get install puppet installiert.

Konfiguration von Puppet

Die Puppet-Nodes suchen automatisch nach dem Rechner, der auf den Namen puppet auflöst, so lange der Name korrekt auf den Hauptserver zeigt, brauchen sie nicht weiter konfiguriert werden.
Beim Puppet-Master muss der Dateiserver noch korrekt konfiguriert werden, der wie oben beschrieben Dateien an die Nodes übergeben kann. Je nach Anspruch können die Dateien dabei nah bei der weiteren Konfiguration gehalten werden, oder aber zentral in einem externen Archiv untergebracht werden. Für unser Beispiel werden wir die zu verteilenden Dateien nah bei der eigentlichen Konfiguration halten, ganz so, wie es auch im Best Practice Guide und in der Anleitung Module Configuration der Puppet-Dokumentation beschrieben wird.
Daher reicht es, in der Datei /etc/puppet/fileserver.conf folgende Konfiguration vorzunehmen:
[modules]
allow 192.168.0.1/24
allow *.credativ.de

Konfiguration der Konfiguration - Module

Um eine Server-Konfiguration durch Puppet erledigen zu lassen, ist es am Besten, diese in Aufgabenbereiche oder Themen zu unterteilen, wie zum Beispiel "ssh", "logs", "apache", etc. Diese Bereiche werden in Puppet als "Module" bezeichnet, und sind der Kern von Puppets Konfigurationsverwaltung. Den Aufbau eines Modules beschreiben wir hier anhand einer fiktiven SSH-Konfiguration und halten uns dabei eng an den Best Practice Guide.
Es sei angemerkt, dass die tatsächliche Konfiguration von SSH durch Puppet an einigen Stellen dynamischer wäre, hier wird nur ein vereinfachter Weg gezeigt.

Das SSH-Modul

Der Anspruch des SSH-Moduls ist:
  1. Das openssh-server-Paket soll in neuester Version installiert sein.
  2. Die Datei sshd_config soll der entsprechen, die im Puppet-Master hinterlegt ist.
  3. Falls die Datei sshd_config installiert wird, soll der sshd neu gestartet werden.
  4. Der Nutzer credativ soll bestimmte Dateien in seinem Verzeichnis $HOME/.ssh haben.
Um diesen Ansprüchen gerecht zu werden, erstellen wir die notwendigen Verzeichnisse des Moduls:
mkdir -p /etc/puppet/modules/ssh/manifests
mkdir -p /etc/puppet/modules/ssh/files
Der Ordner Mainfests enthält die eigentlichen Konfigurations-Anweisungen des Moduls, der Ordner files hält Dateien vor, die an die Nodes ausgeliefert werden sollen.
Die Konfigurations-Anweisungen des Modules finden sich in der Datei init.pp im Ordner manifests. Die Gruppe von Anweisungen, um die obigen Ziele 1.-4. zu erfüllen, wird dort als "Klasse" zusammen gefasst. Die Klasse enthält selbst wiederum Untersektionen, sogenannte Types. In unserem Fall findet sich für jedes vorher definierte Ziel ein Type:
class ssh{
        package { "openssh-server":
                 ensure => latest,
        }
        file { "/etc/ssh/sshd_config":
                owner   => root,
                group   => root,
                mode    => 644,
                source  => "puppet:///ssh/sshd_config",
        }
        service { ssh:
                ensure          => running,
                hasrestart      => true,
                subscribe       => File["/etc/ssh/sshd_config"],
        }
        file { "/home/credativ/.ssh":
                path    => "/home/credativ/.ssh",
                owner   => "credativ",
                group   => "credativ",
                mode    => 600,
                recurse => true,
                source  => "puppet:///ssh/ssh",
                ensure  => [directory, present],
        }
}
jeder Type setzt eine gänzlich andere Aktion auf dem Node um:
package
Hier wird sicher gestellt, dass das Paket openssh-server in der neuesten Version installiert ist.
file
Eine Datei auf der Node wird durch die Version vom Server überschrieben und mit entsprechenden Rechten versehen.
service
Der Dienst sshd muss laufen, und wird notfalls gestartet. Falls außerdem die Datei /etc/ssh/sshd_config aktualisiert wird, wird auch der Dienst neu gestartet.
file
Hier taucht noch einmal der Type "file" auf - es wird aber nicht eine einzelne Datei übertragen, sondern gleich ein ganzes Verzeichnis.
Damit das Modul auch korrekt arbeitet, müssen die beim Type "file" definierten Dateien und Verzeichnisse auch unter /etc/puppet/modules/ssh/files/ zu finden sein.

Nodes und Module

Wir haben nun drei Elemente: den Puppet-Master, die Nodes, und die Module. Nun muss die Zuweisung erfolgen, welche Nodes welche Module aufrufen sollen. Dafür muss zuerst das Modul in der Datei /etc/puppet/manifests/modules.pp aktiviert werden:
import "ssh"
Die Zuweisung zu den einzelnen Nodes erfolgt in der Datei /etc/puppet/manifests/nodes.pp. Diese legt für jede Node fest, welches Modul geladen wird. Außerdem gibt es für alle nicht weiter spezifizierten Nodes einen Default-Eintrag, und zu guter Letzt können auch Einträge von anderen abgeleitet werden. Um also für alle Nodes das Modul "rsyslog" zu laden, aber nur für die Node "external" das Modul "ssh", sieht der Eintrag wie folgt aus:
node default {
   include rsyslog
}

node 'external' inherits default {
  include ssh
}
Damit ist Puppet fertig konfiguriert, und nimmt sofort seine Arbeit auf.

Zertifikate - Sichere Kommunikation zwischen Node und Master

Die Kommunikation zwischen Master und Node verläuft verschlüsselt. Um dies zu gewährleisten, müssen Nodes auf dem Master zertifiziert werden. Dies ist möglich, nachdem ein Node das erste Mal eine Anfrage an den Master gestellt hat - der Master setzt diesen Node dann auf wait, und stellt ihm so lange keine Daten zur Verfügung. Erst, wenn die Node durch einen Admin verifiziert wurde, wird die Node frei geschaltet. Mit # puppetca --list wird die Liste der noch zu verifizierenden Nodes angezeigt, verifiziert wird mit: # puppetca --sign external.example.com Bei Bedarf kann dieser Prozess weiter verfeinert werden.

Abschließende Worte

Die hier vorgestellten Beispiele sind natürlich stark vereinfacht. Im Real-Betrieb würde die SSH-Konfiguration komplexer sein, und Schlüssel würden nicht gerade mit dem Type "file" statisch verteilt werden. Aus diesen Beispielen lassen sich aber leicht weitere Module ableiten, und die an vielen Stellen verlinkte Konfiguration tut ihr Übriges, damit der geneigte Leser sich tiefer in die Materie einarbeiten kann.
Wir hier bei credativ haben mit Puppet mittlerweile sehr umfangreiche und sehr gute Erfahrungen gemacht, leisten an vielen Ecken Support und Beratung für Puppet und merken, wie die Nachfrage steigt. Puppet ist derzeit auf der Überholspur, und es wird spannend sein zu beobachten, wie sich der Platzhirsch cfengine angesichts dieser Konkurrenz verhält.
bash.pngEiner der schnellsten und einfachsten Wege, den Zugriff auf einen Pfad eines Webservers auf bestimmte Nutzer zu begrenzen ist der Einsatz einer .htaccess-Datei. Diese wird im zu begrenzenden Pfad hinterlegt, und beschreibt, welche Beschränkungen gelten. Ein simples Beispiel für die Begrenzung des Zugriffs auf alle Nutzer, die in einer entsprechenden htpasswd-Datei definiert sind, ist:
AuthType Digest
AuthName "SecretDir"
AuthUserFile /etc/apache2/passwords/secretdir.htpasswd
Require valid-user
Die .htpasswd-Datei enthält die Nutzernamen und Passwörter - und sollte daher außerhalb des Webverzeichnisses stehen!
htdigest -c /etc/apache2/passwords/secretdir.htpasswd SecretDir someuser
Wichtig ist, dass im Directory-Abschnitt der Verzeichnis-Konfiguration (z.B. unter /etc/apache2/sites-enabled) die Option AllowOverride AuthConfig gesetzt ist. Da in diesem Beispiel auch die wenigstens etwas sichere Authentifizierungs-Methode Digest verwendet wird, muss das Modul mod_auth_digest außerdem geladen sein.

Weitere Informationen, tiefer gehende Konfigurationen und weitere Anpassungen finden sich im Artikel Authentication, Authorization and Access Control der Apache-Dokumentation.

debianlogo.pngDas Debian-Projekt hat bekannt gegeben, dass die projekteigene DNS-Infrastruktur schrittweise auf DNSSEC umgestellt wird. Damit werden zukünftig die DNS-Antworten für debian.com und andere digital signiert, um ihre Echtheit zu gewährleisten.

Das Domain Name System (DNS) ist eines der Kern-Bestandteile des Internet. Das initiale Design des DNS ist aber anfällig gegen eine Reihe von Angriffen wie zum Beispiel Cache-Poisonings, also dem Fälschen von DNS-Antworten. Um diesem Problem entgegenzuwirken, wurde DNSSEC eingeführt (DNSSEC in der Wikipedia, siehe auch dnssec.net). DNSSEC ist eine Erweiterung des DNS, mit dessen Hilfe Einträge von DNS-Servern signiert und damit verifiziert werden können. Wegen der technischen Herausforderungen und dem damit verbundenen Aufwand verläuft die Einführung von DNSSEC bisher aber eher schleppend, die meisten Top Level Domains (TLDs) oder auch Domains großer Projekte oder Firmen sind bisher noch nicht signiert.

Das Debian-Projekt hat sich nun dazu entschlossen, DNSSEC schrittweise für alle Projekt-Domains einzuführen und damit verifizierbare DNS-Antworten zu ermöglichen. Zuerst werden debian.net und debian.com signiert, aufbauend auf allen dabei gesammelten Erfahrungen werden dann die weiteren Domains und Subdomains signiert.

Eines der Probleme beim Einsatz von DNSSEC ist aber bisher noch, dass nicht alle TLDs der Debian-Domains die Debian-Keys signieren können. Um diesem Problem zu entgehen wird Debian die DNSSEC-Schlüssel via DNSSEC Look-aside Validation Registry des ISC veröffentlichen - auf diesem Weg ist eine Validierung der Debian-Schlüssel auch dann möglich, wenn deren TLDs noch nicht auf DNSSEC umgestellt sind.Die Umstellung des Debian-Projekts auf DNSSEC macht den Debian-Teil des Internets ein wenig sicherer. Außerdem werden Erfahrungen, die bei der Umstellung eines so großen, internationalen und viele TLDs überspannenden Projekts gewonnen werden für andere Projekte ähnlicher Größenordnung sehr wertvoll sein.

postgreslogo.pngIn der Serie "PostgreSQL Optimizer Bits" werden Strategien und Besonderheiten des PostgreSQL Optimizers vorgestellt. Den Startpunkt setzt ein neues Feature aus der Version 8.4: Semi und Anti Joins.

PostgreSQL bietet seit Version 8.4 eine neue Optimizerstrategie für die Optimierung von bestimmten Abfragen an: Semi und Anti Joins.
Ein Semi Join ist eine spezielle Form eines Joins, die nur die Schlüssel einer Relation a berücksichtigt, sobald diese ebenfalls in der verknüpften Tabelle b auftreten.

Ein Anti Join ist die negative Form eines Semi Join: Tritt ein in Tabelle a gewählter Schlüssel in Tabelle b nicht auf, so wird er bei dieser speziellen Form berücksichtigt. Ein Semi- bzw. Anti-Join sind also spezielle Formen eines Joins, die einen bestimmten Schlüssel nur auf der linken Seite berücksichtigen. Interessant wird dies nun für Abfragen, die nur ein Vorhandensein eines bestimmten Schlüssels prüfen wollen bzw. dies als Filterprädikat nutzen. Bekannt ist ein solches Vorgehen teils von Object Relation Mapper (ORM), die entsprechende Anfragen mit EXISTS() bzw. NOT EXISTS() formulieren.

Im Vergleich zu PostgreSQL 8.3 ergibt sich für dieselbe Anfrage ein unterschiedlicher und deutlich effizienter Abfrageplan, wie im folgenden Beispiel (mit relativ einfacher Abfrage) dargestellt. Gegeben seien zwei Tabellen a,b und eine Anfrage über EXISTS(). Es soll ein bestimmter Datensatz aus a ermittelt werden, der eine Entsprechung über a.id2 = b.id in b hat. Selbstverständlich lässt sich dies auch über einen Join lösen, beispielhaft soll dies jedoch zeigen, wie der Optimizer eine derartig formulierte Anfrage auflösen kann:
EXPLAIN SELECT id FROM a WHERE a.id = 200 AND EXISTS(SELECT id FROM b WHERE a.id2 = b.id);
Der Optimizer in PostgreSQL 8.3 ermittelt für dieses Beispiel in der Regel folgenden Plan (zu beachten ist, dass die beiden Tabellen a,b jeweils einen Index auf den Spalten id bzw. id2 haben):
                                QUERY PLAN
--------------------------------------------------------------------------
 Index Scan using a_id_idx on a  (cost=0.00..8355.27 rows=503 width=4)
   Index Cond: (id = 200)
   Filter: (subplan)
   SubPlan
     ->  Index Scan using b_id_idx on b  (cost=0.00..8.27 rows=1 width=4)
           Index Cond: ($0 = id)
Im Gegensatz dazu kann PostgreSQL 8.4 hash Semi Join nutzen:
                                QUERY PLAN
---------------------------------------------------------------------------
 Hash Semi Join  (cost=27.52..78.16 rows=969 width=4)
   Hash Cond: (a.id2 = b.id)
   ->  Index Scan using a_id_idx on a  (cost=0.00..37.32 rows=969 width=8)
         Index Cond: (id = 200)
   ->  Hash  (cost=15.01..15.01 rows=1001 width=4)
         ->  Seq Scan on b  (cost=0.00..15.01 rows=1001 width=4)
Man sieht deutlich die reduzierten Kosten des Planes, die auch weniger I/O-Zugriffe bedeuten. Für derartige Abfragen lohnt sich also ein genauerer Blick. So weit zum aktuellen Artikel der Serie, der nächste wird bald folgen. Alle Blog-Artikel zum Thema PostgresQL werden auch als Kategorie PostgreSQL samt eigenem Feed angeboten - und falls ihr nach Support und Services für PostgreSQL sucht, seit Ihr bei uns ebenfalls richtig.

bash.pngEiner der vielen Vorteile von vim ist die Möglichkeit der Syntax-Hervorhebung: verschiedene Wörter und Zeichen werden in einem Text je nach Bedeutung in unterschiedlichen Farben angezeigt.Je mehr Farben zur Verfügung stehen, desto besser - in vielen Fällen zeigt vim aber nur 8 oder 16 unterschiedliche Farben an. Dies kann mit einem Eintrag in der ~/.vimrc schnell gelöst werden:

if &term!="linux"
  set t_Co=256            " vim nutzt 256 Farben
  colorscheme desert256   " ein passendes Farbschema
endif


Der erste Befehl sorg dafür, dass vim zukünftig mit entsprechend vielen Farben umgehen kann, der zweite lädt auch gleich noch ein entsprechend tiefgehendes Farb-Schema, desert256 - das muss dafür aber vorher schon nach ~/.vim/colors/ kopiert werden! Die If-Abfrage stellt sicher, dass in ttys die Konfiguration nicht geladen wird, da diese meist nur 8 Farben unterstützen.

Übrigens: einen Überblick über alle möglichen Vim-Colorschemes für diverse Programmiersprachen findet sich auf der Webseite des Projekts vimcolorschemetest.

tux.jpgSoeben wurde bekannt gegeben, dass Nokia und Intel ihre mobilen Linux-Plattformen verschmelzen, um eine gemeinsame Basis zu schaffen: MeeGo.

Mit Intel und Nokia hatten zwei Technik-Schwergewichte seit geraumer Zeit Ihre jeweils eigene Linux-Plattform für mobile Geräte: Nokia setzte auf Maemo, während Intel Moblin voran trieb. Diese standen sich in einem hart umkämpften Markt gegenüber, in dem auch Android und LiMo mit mischen - ganz zu schweigen von den proprietären Anbietern.

Nun haben Intel und Nokia bekannt gegeben, dass die beiden Projekte zukünftig ihre Kräfte in der gemeinsamen Plattform MeeGo bündeln werden:

Moblin und Maemo werden vereint! Wir nehmen die besten Teile dieser beiden Open-Source-Projekte, und erschaffen damit die MeeGo software platform.

Wirtschaftlich ist dieser Schritt einleuchtend: in einem so hart umkämpften Markt sind Intel und Nokia zwei schwergewichtige Partner, die sich gemeinsam auch gegen Größen wie Google, Apple oder Microsoft stemmen können. Bisher hatten sie jeweils alleine nur wenig Erfolg, Geräte mit Maemo oder Moblin gibt es nur vereinzelt. Darüber hinaus sind beide Plattformen technisch ähnlich gewesen, eine Zusammenarbeit spart hier Ressourcen. Da MeeGo aber auf allen möglichen Geräten, vom Mobiltelefon bis zum Fernseher laufen soll, stellt sich die Frage, ob Nokia und Intel beim Geräteangebot nicht auch in Konkurrenz treten werden.

Technisch ist interessant, dass MeeGo zukünftig auf Qt setzen wird. Dieses mittlerweile von Nokia voran getriebene Framework zum Programmieren grafischer Oberflächen ist unter Anderem die Basis für KDE. Auch wir bei credativ arbeiten häufig mit Qt, leisten bei Kunden dafür Support und kennen daher die Stärken der Oberfläche sehr gut: MeeGo baut mit Qt auf einer modernen und erprobten Oberfläche auf! Darüber hinaus wurde mitgeteilt, dass MeeGo auf RPM aufsetzen wird. Das, zusammen mit dem Hinweis auf "kickstart"-Dateien im Entwickler-Bereich, legt nahe, dass die zukünftige Basis von MeeGo sich in der Nähe von Distributionen wie OpenSuse, Fedora oder RHEL befindet.

Neben dem technischen und wirtschaftlichen Aspekten ist aber vor allen Dingen wichtig, wie die Community integriert wird: während LiMo nachgesagt wird, dass es faktisch die Community außen vor lässt, hat sich Android jede Menge Kritik gefallen lassen müssen, da sie ihre Änderungen an z.B. dem Kernel nicht in diesen einbringen. MeeGo hingegen soll unter der Schirmherrschaft der Linux-Foundation entwickelt werden, die der Community nicht fremd ist und bei der auch namenhafte Entwickler angestellt sind.

Es wird sich zeigen, wie sehr MeeGo sich im Markt behaupten wird - noch gibt es keine Geräte in der Masse. Spannender wird der Wettbewerb dadurch aber allemal.

tux.jpgWenn zwei Django-Instanzen sich den gleichen memcached als Cache-Backend teilen, kann es zu Anzeige-Problemen der Templates kommen. Dieser Artikel beschreibt die Bedingungen sowie eine entsprechende Lösung genauer.

Wenn zwei Django-Instanzen den gleichen memcached als Caching-Backend nutzen, kann dies zu Anzeige-Problemen führen, falls die Templates Dateien mit gleichem Namen, aber unterschiedlichem Inhalt verwenden: es wird das falsche Template zum eigentlichen Inhalt angezeigt.

Dieses Verhalten kann auch in allen Django-Programmen beobachtet werden, welche die Einstellung CACHE_MIDDLEWARE_KEY_PREFIX nicht berücksichtigen. Der entsprechende Bug report erwähnt, dass in einem solchen Fall eine Design-Entscheidung notwendig ist - die oben genannte Einstellung sollte eigentlich nur in Middleware-Installationen genutzt werden, und nicht im Rahmen der Templates. Ohne diese Einstellung können sich aber unterschiedliche Django-Instanzen gegenseitig beeinflussen. Dies ist nicht nur wegen der möglichen optischen Erscheinung der Instanzen von Gewicht, sondern auch wegen der Möglichkeit, CMS-Nutzerberechtigungen in den memcached einzubringen, und so die Rechte anderer Instanzen zu verändern.

Eine Möglichkeit ist nun, sicherzustellen, dass die Konfigurationsoption CACHE_MIDDLEWARE_KEY_PREFIX für jeden Zugriff genutzt wird. Der dargestellte Code, als benutzerdefiniertes Cache-Backend genutzt, garantiert dies.

from django.conf import settings
from django.core.cache.backends.memcached import CacheClass as DjangoMemcachedCacheClass
from django.utils.hashcompat import md5_constructor

class CacheClass(DjangoMemcachedCacheClass):
    def __init__(self, server, params):
        self.key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
        super(CacheClass, self).__init__(server, params)

    def _genkey(self, origkey):
        return md5_constructor("%s:%s" %(self.key_prefix, origkey)).hexdigest()

    def add(self, key, value, timeout=0):
        return super(CacheClass, self).add(self._genkey(key), value, timeout)

    def get(self, key, default=None):
        return super(CacheClass, self).get(self._genkey(key), default)

    def set(self, key, value, timeout=0):
        return super(CacheClass, self).set(self._genkey(key), value, timeout)

    def delete(self, key):
        return super(CacheClass, self).delete(self._genkey(key))

    def get_many(self, keys):
        return super(CacheClass, self).get_many(self._genkey(key))

    def incr(self, key, delta=1):
        return super(CacheClass, self).incr(self._genkey(key), delta)

    def decr(self, key, delta=1):
        return super(CacheClass, self).decr(self._genkey(key), delta)


Darüber hinaus ist es wesentlich schwerer, gefälschten Cache-Inhalt einzufügen, wenn ein md5hex-digest als Schlüssel genutzt wird.

Allerdings sollten sowieso nie wichtige Informationen in einem memcached gespeichert werden - in einem solchen Fall wäre locmem, file oder db als Backend wesentlich besser geeignet, da sie eine bessere Rechteverwaltung ermöglichen!

klogo-official-oxygen-128x128.pngHeute hat das KDE-Projekt die Version 4.4 seiner Software-Sammlung veröffentlicht. Neben neuen wissenschaftlichen Programmen setzt diese Version insbesondere auf Ausbau und Stabilität der vorhandenen Programme und Funktionen.

Das KDE Projekt hat die Version 4.4 seines "KDE Software Compilation" (KDE SC) genannten Software-Pakets veröffentlicht. Die neue Version besticht insbesondere durch viele Detail-Verbesserungen:

kde44-general-desktop-300x187.jpg

Eine Übersicht über alle Neuerungen findet sich im Feature Guide, der diese in Bild und Ton erläutert. Einen ersten Eindruck vermittelt die folgende Liste der wichtigsten Änderungen:

  • Umfangreiche Verbesserungen im semantischen Suchsystem Nepomuk: durch ein neues Standard-Backend ist die Verarbeitung der Daten und die Suche deutlich schneller.
  • Plasma wurde weiter verbessert: Widgets können mit anderen Nutzern im Netzwerk ausgetauscht werden, und der Umgang mit Speichermedien wurde überarbeitet.
  • Neue Programme: neben dem Blog-Programm Blogilo liegen KDE SC 4.4 erstmals die wissenschaftlichen Programme Cantor und Rocs bei.
  • Die Plattform zum Entwickeln neuer KDE-Software wurde um das neue Authentifizierungs-Framework KAuth ergänzt. Damit ist es möglich, den Nutzern auf einfachem und sicheren Weg erweiterte Rechte zu gewährleisten.

Ein anderes neues Feature, dass dem Autor dieses Artikels besonders am Herzen liegt, ist die Unterstützung von automatischen Fenstergrößen, wenn ein Fenster an einen bestimmten Rand geschoben wird: so nehmen Fenster z.B. automatisch die linke Hälfte des Bildschirms ein, wenn sie gegen die linke Bildschirmseite geschoben werden. Dies vereinfacht das Arbeiten mit mehreren Fenstern auf großen Bildschirmen erheblich!

Verglichen mit den letzten KDE-Versionen bringt dieses Release aber trotz der aufgelisteten Neuigkeiten eher wenige fundamentale Änderungen mit sich: die Entwickler haben sich eher auf Stabilität und Detailarbeiten konzentriert. Das Release wird daher auch den Nutzern ans Herz gelegt, die bisher den Wechsel von KDE 3.x auf KDE 4.x nicht gewagt haben. Es ist aber sowieso damit zu rechnen, dass die Distributionen KDE 4.4 zügig als Standard-Version aufnehmen werden.

Im Rahmen der Veröffentlichung von KDE SC 4.4 wurde auch die Webseite des KDE-Projekts überarbeitet: kde.org hat ein neues Design, und greift bei den bereit gestellten Informationen auch auf externe Dienste wie opendesktop.org zurück. Auf diesem Weg werden den interessierten Nutzern deutlich detailliertere und aktuellere Informationen über die verfügbare Software zur Verfügung gestellt.

Wir bei credativ gratulieren dem KDE-Projekt zu diesem beeindruckenden Release und wünschen für die Zukunft nur das Beste!

skole_tux_small.pngDas Skolelinux-Team hat die Version 5.0 seines beliebten Schulservers veröffentlicht, der jetzt auf Debian Lenny aufsetzt.

Die Distribution Skolelinux, auch Debian-Edu genannt, ist eine angepasste Debian-Version für den Betrieb eines Schulnetzes unter Linux: mit nur wenigen Schritten können so auch technisch unbedarfte Nutzer mit wenigen Handgriffen einen zentralen Schulserver mit Terminal-Server und Thin-Clients, Workstations und Laptops als Arbeitsplatzrechner installieren. Auch die Integration von bestehenden Windows-Installationen wird unterstützt.

Mit der Veröffentlichung der Version 5.0 wurde auch Skolelinux auf die Software-Basis aktueller Debian-Installationen gehievt. Neben der deutlich besseren Unterstützung neuerer Hardware ist auch die mitgelieferte Software so deutlich aktueller und somit ansprechender für Schüler und Schulen. Zu den hervorstechenden technischen Neuerungen dieser Version gehören außerdem:

  • Der GNOME Desktop wird nun zusätzlich zu KDE unterstützt.
  • Verbesserter Schüler-Desktop mit Lernsoftware-Verknüpfungen zu GCompris, Kalzium, KGeography, KMplot, KStars, Stopmotion und der OpenOffice Suite.
  • Verbesserte LTSP-Server Konfiguration:
    • Neben den traditionellen Thin Clients sind plattenlose Arbeitsstationen jetzt auch 'out of the box' unterstützt.
    • Das neue PXE-Start-Menü erlaubt plattenlosen Arbeitsstationen das Booten über das Netzwerk oder über lokale Medien.
    • Plattenlose Arbeitsstationen (Diskless Workstations) erhalten ihre Software vom Server und führen sie dann lokal aus, sie kann also zentral auf dem Server gewartet werden.

  • Die Dokumentation wurde weiter verbessert und von Englisch nach Deutsch, Italienisch und Norwegisch übersetzt.
  • Verbessertes und vereinfachtes Benutzer- und Maschinen-Administrations Werkzeug LWAT (LDAP Web-based Administration Tool).
  • Verbesserte Browser-Unterstützung mit freien Softwareprodukten wie Gnash, Java und anderen Plug-ins.
  • PulseAudio sorgt zusätzlich neben ALSA und dem OSS Sound System für eine verbesserte Audio- und Multimedia-Leistung.
  • Verbessertes Maschinen- und Netzwerkmonitoring, das jetzt den Status aller zum Netzwerk hinzugefügten Maschinen automatisch meldet.

Philipp Hübner, ehrenamtlicher Helfer des Skolelinux-Projekts und Mitarbeiter bei credativ unterstreicht insbesondere die Modernität der neuen Version:

Skolelinux hat mit der Lenny-Version einen großen Schritt nach vorn gemacht: durch die nahtlose Integration von Diskless Workstations out-of-the-box wird Skolelinux modernen Anforderungen und der stetig zunehmenden Leistung von Computern gerecht. Auf diesem Weg wird die Performance von Workstations mit dem geringen Wartungsaufwand von Thin-Clients vereint.

Skolelinux wird derzeit in mehreren Bundesländern in Deutschland produktiv eingesetzt oder für den Einsatz getestet. So wurde in Rheinland-Pfalz ein von der credativ GmbH betreutes Skolelinux-Evaluationsprojekt 2009 erfolgreich abgeschlossen. Die Lösung wird dort in immer mehr Schulen im täglichen Schulbetrieb genutzt, zertifizierte Dienstleister wie die credativ GmbH bieten den Schulen und Schulträgern bei Bedarf professionellen Support.

Außerhalb Deutschlands ist die größte bekannte Installation in Extremadura: dort nutzen 250.000 Schüler Skolelinux in ihren Schulen.Wir von credativ gratulieren Skolelinux für dieses Release und wünschen das Beste für die Zukunft!

bash.pngAb und an ist es notwendig, einen Apache aufzusetzen, bei dem der gesamte http-Verkehr nach https umgeleitet wird. Dies ist auf ungefähr 1.376 verschiedene Art- und Weisen möglich, eine davon ist:
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI}
Mit diesen Zeilen in der Konfiguration des VirtualHosts oder sogar in der globalen Apache-Konfiguration werden alle Anfragen entsprechend umgeschrieben.Aber: diese Zeilen sind für simple, einfache Installationen gedacht. Komplexere Setups und tiefer gehende Konfigurationen können damit schnell aus dem Tritt gebracht werden.
tux.jpgWie jedes Jahr laufen auch dieses Jahr einige Versionen von wichtigen Open-Source-Programmen aus: für sie werden keine weiteren Updates mehr veröffentlicht. Wir führen die Wichtigsten auf.

Das Ende einer Software-Version (EOL) bedeutet meist, dass ab dem Zeitpunkt keine Updates mehr geboten werden. In besonderen Ausnahmesituationen wird vielleicht noch mal ein Sicherheitsupdate nachgeschoben, dies ist aber selten, und verlassen sollte man sich darauf erst recht nicht. Daher ist es wichtig, immer einen Blick auf die wichtigsten Projekte zu halten, und deren EOL zu verfolgen. Wir bieten hier eine kleine Übersicht, gegliedert in Projekte und Distributionen.

Projekte

Bei PostgreSQL werden dieses Jahr gleich drei Versionen auf das Altenteil geschoben: PostgreSQL 7.4 und 8.0 werden im Juli, Version 8.1 im November auslaufen.

Auch Apache hat für den Web Server der Serie 1.3 das Ende eingeleitet. Es wird für die 1.3er-Serie allenfalls noch kritische Sicherheitsupdates geben.

Nicht ganz so tragisch, und doch eine Erwähnung wert ist Python: die 2.x-Reihe wird ebenfalls ihr letztes Release noch dieses Jahr sehen. Danach gibt es zwar noch Bugfixes, die Sprache selbst wird aber nur noch im 3.x-Zweig weiter entwickelt.

Distributionen

Auch bei den Distributionen geht der Reigen weiter, und wichtige Versionen werden nicht mehr weiter gepflegt. Den größten Augenmerk verdient hier sicherlich Debian Etch: der Support läuft in wenigen Tagen, am 15. Februar aus. Da Debian Etch gerne als stabiles Server-Betriebssystem verwendet wurde, ist hier besondere Vorsicht geboten, Upgrades auf neuere Versionen sind dringend angeraten!Das Gleiche gilt für CentOS 3: diese häufig im Server-Umfeld eingesetzte Version erreicht das Ende der Lebenszeit im Oktober 2010.Für andere, teilweise mehr auf Endnutzer ausgerichtete Distributionen kommt ebenfalls bald das Ende: openSUSE 11.0 und 11.1 werden noch dieses Jahr eingestellt (im Juni bzw. Dezember), gleiches gilt für Ubuntu 8.10 (Intrepid Ibex) und 9.04 (Jaunty Jackalope), die es im April und Oktober erwischt.Die vermutlich schnelllebigste Distribution Fedora verliert dieses Jahr die Version 11, die im Juni, einen MOnat nach der Veröffentlichung von Version 13, auslaufen dürfte.

Was tun?

In allen genannten Fällen, von Python vielleicht mal abgesehen, sollte die jeweils eingesetzte Software dringend auf eine unterstützte Version aktualisiert werden. Da eine solche Migration eventuell nicht ganz ohne ist, stellen die Projekte meist umfangreiche Informationen zu den Upgrade-Pfaden und -Methoden bereit. Wichtig ist, dass nichts überstürzt wird: ein Upgrade sollte ausgiebig geplant und auf einem Staging-System im Vorfeld getestet werden.

Bei allen genannten Software-Projekten und Distributionen hilft auch gerne unser Open Source Support Center. Wir verfügen über langjährige Erfahrung mit allen Software-Komponenten, Projekten und Distributionen, und können bei Migration jeden Maßstabs bei Planung und/oder Umsetzung helfen

PostgreSQL Agenda 2010

| Keine Kommentare | Keine TrackBacks

PostgreSQL LogoPostgreSQL plant dieses Jahr mehrere große Schritte: die Veröffentlichung der Version 9.0 steht vor der Tür, während einige ältere Versionen das Ende der Lebenszeit erreichen.

PostgreSQL 9.0

PostgreSQL wird im Jahr 2010 mit der Version 9.0 nach längerer Zeit wieder einen großen Versionssprung auf eine neue Hauptversion vollziehen: eine Erhöhung auf die Version 9.0, die das Release als wichtigen Meilenstein kennzeichnen soll, steht an. Ein wichtiger Punkt sind dabei erweiterte Funktionen für den Betrieb von Standby-Servern im Nur-Lese-Modus (Hot Standby) sowie erstmals eine integrierte Replikationslösung.

Hot Standby

Hot Standby wird erstmals einer PostgreSQL-Instanz ermöglichen, Leseanfragen auf sogenannten Standby-Knoten entgegenzunehmen. Das grundlegende Prinzip ist dasselbe, das seit Version 8.0 unter dem Namen PITR (Point In Time Recovery, Wiederherstellen bis zu einem bestimmten Zeitpunkt) bzw. WAL-Shipping bekannt war: Hierbei wird eine Kopie der Datenbank mit den anfallenden Transaktionslogs, dem sogenannten WAL (Write Ahead Log) in kontinuierlichen Intervallen mit allen Änderungen der Hauptdatenbank aktuell gehalten. Dies entspricht einem inkrementellem Nachziehen aller Änderungen, die seit dem Aufsetzen des Standby-Knotens auf dem Hauptknoten vorgenommen wurden. Bisher war dieses Prinzip als Warm Standby implementiert, d.h. die Datenbank auf dem Standby-Knoten war nicht für Anwendungen nutzbar. Mit Hot Standby besteht nun die Möglichkeit, Transaktionen auf diesem Knoten auszuführen, solange diese keine schreibenden Operationen vornehmen. Interessant ist dies vor allem für hochverfügbare PostgreSQL-Systeme oder umfangreichen Auswertungen, die auf einem separaten Knoten laufen können.

Streaming Replication - Eingebaute asynchrone Replikation

Lange war man in der PostgreSQL-Gemeinde unter den Entwicklern der Meinung, dass eine integrierte Replikation aufgrund der vielfältigen Anforderungen und Einsatzszenarien eine für die Entwickler schwer zu wartende Infrastruktur darstellt. Die Flexibilität und Sicherheit, die man von solchen Lösungen erwartet, können durch spezialisierte, externe Lösungen in deutlich vielfältiger Form implementiert werden. In den letzten Jahren hat sich jedoch auch dank der umfangreichen Resonanz von Nutzern herauskristallisiert, dass ein Großteil der gewünschten Funktionalität vor allem im Bereich der Hochverfügbarkeit lokalisiert ist. Nicht zuletzt aufgrund des Einsatzes von PostgreSQL in Bereichen von Datenmengen bis zu Hunderten von Gigabytes, die in einigen Unternehmen bereits alltäglich sind, war eine integrierte Lösung hierfür nicht mehr wegzudenken. Des weiteren ist die Verfügbarkeit einer integrierten Replikationslösung für viele Datenzentren eine wichtige Entscheidungsgrundlage.


Mit Streaming Replication erhält PostgreSQL nun eine integrierte Lösung für asynchrone Replikation von einem primären Datenbankserver (les- und schreibbar) auf mehrere sekundäre Server (nur lesbar). Diese Funktionalität basiert in Teilen auf der mit WAL-Shipping geschaffenen Infrastruktur, ermöglicht jedoch die Replikation von Transaktionen in deutlich geringeren Intervallen, indem die anfallenden Daten direkt vom primären an den sekundären Server gesendet werden (Daher die Bezeichnung Streaming). Ferner gestattet Streaming Replication die einfache Implementierung von PostgreSQL-Clustern mit mehreren Knoten gleichzeitig. Dies ist zwar auch mit Hot Standby Lösungen möglich, erfordert jedoch deutlich mehr Aufwand. Da die replizierenden Daten auf den Informationen des WAL basieren, ist diese Lösung äußerst robust. Im Moment sind hiermit jedoch Einsatzszenarien wie partiell replizierte Datenbanken oder modifizierte Datenbankschemata auf den einzelnen replizierten Knoten nicht möglich. Dies ist aber nach wie vor durch Lösungen wie Slony-I, Londiste oder Bucardo ohne Weiteres realisierbar.

Ein Abgesang auf PostgreSQL 7.4, 8.0 und 8.1

2010 wird auch das Ende für einige PostgreSQL Versionen einläuten. Erstmals laufen drei Hauptversionen im selben Jahr gleichzeitig aus:

  • PostgreSQL 7.4, Juli 2010
  • PostgreSQL 8.0, Juli 2010
  • PostgreSQL 8.1, November 2010

Für die Varianten für Windows lief die Unterstützung von PostgreSQL 8.0 und 8.1 bereits mit dem Erscheinen von PostgreSQL 8.3 im Februar 2008 aus. PostgreSQL 8.0 war das erste Release, das unter Windows nativ ausgeführt werden konnte, jedoch wurden im Laufe der Entwicklung viele Fehler behoben, die nicht mehr in die alten Versionen zurückgeführt werden konnten. Windowsnutzer müssen also schon seit geraumer Zeit mit mindestens PostgreSQL 8.2 fahren. Nun kommt auch das offizielle Ende der Unterstützung für alle anderen unterstützten Plattformen, und auch das letzte der 7er-Releases, PostgreSQL 7.4 wird nach 7 Jahren auslaufen. "Auslaufen" bedeutet im Falle von PostgreSQL in erster Linie, dass keine neuen Binärpakete oder Releases explizit angefertigt werden oder aufwändige Fixes nicht mehr portiert werden. Dennoch bleibt der Quelltext nach wie vor verfügbar. Die PostgreSQL Entwicklergruppe legt in der Regel eine Lebenszeit von fünf Jahren für ein Hauptrelease fest. Wie die Windows-Varianten von PostgreSQL 8.0 und 8.1 zeigen, kann diese für einzelne Plattformen jedoch auch verkürzt sein. Eine Auflistung der Release Policy kann über das Entwickler-Wiki des PostgreSQL-Projektes eingesehen werden.

Ausblick

Noch ist PostgreSQL 9.0 nicht fertig, doch Hot Standby kann mit der Alphaversion 8.5alpha3 bereits getestet werden. Die aktuelle Alphaversion wurde übrigens noch nach dem 8.5 Entwicklerzweig benannt, bevor die Entscheidung für den Schritt zu Version 9.0 fiel. Mit der 9.0alpha4-Version kann Ende Februar gerechnet werden, diese wird dann auch Streaming Replication enthalten. Interessierte legen wir den Leitfaden "How To Beta Test" ans Herz, der einige Richtlinien für Tests oder Feedback definiert.