Aktuelles in der Kategorie Linux

tux.jpgUm Postfix als SMTP-Server für viele Nutzer anzubieten, muss er auf eine Nutzerdatenbank zurück greifen. Dieser Artikel zeigt am Beispiel der Groupware Zarafa, wie Postfix via libsasl mit einer MySQL-Nutzerdatenbank verknüpft wird.

Mit Hilfe von SASL können Nutzer sich gegen Postfix authentifizieren und E-Mails einliefern, damit dieser die weiter zustellt. Dies ist zum Beispiel interessant, wenn der Postfix als zentraler MTA für eine Firma oder größere Institution genutzt werden soll.

Die Schwierigkeit besteht darin, eine vorhandene Nutzerdatenbank einzubinden, hier die MySQL-DB der Groupware Zarafa. Häufig wird dabei auf PAM zurückgegriffen: Postfix authentifiziert gegen PAM, via PAM kann eine Vielzahl verschiedenster Plugins angebunden werden, um z.B. auch auf Datenbanken zurück zu greifen. Ein anderer Weg ist, die Bibliothek libsasl des Cyrus-Projekts zu nutzen, da dies ebenfalls auf verschiedene Plugins zurückgreifen kann.

Dafür muss im ersten Schritt Postfix in der main.cf für die Authentifizierung gegen SASL fit gemacht werden:

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd
smtpd_sender_restrictions = permit_sasl_authenticated, ...

saslauthd wird nicht direkt aufgerufen, es wird nur die libsasl-Bibliothek genutzt. Daher kann /etc/sysconfig/saslauthd auf den Standardwerten bleiben. Der Dienst selbst braucht nicht gestartet werden!

Es fehlt aber noch die eigentliche Konfiguration, in der unter Anderem auch die Syntax der MySQL-Abfrage definiert wird. Diese Konfiguration wird in der smtpd.conf definiert, die standardmäßig unter /usr/lib/sasl2/ erwartet wird. Erst wenn sie dort *nicht* vorliegt, wird sie unter /etc/sasl2/smtpd.conf erwartet. Warum dort nicht zuerst gesucht wird, entzieht sich meinem Verständnis. Es bietet sich also an, einen symbolischen Link auf die Datei unter /etc/ zu erstellen...
So oder so muss der Inhalt wie folgt aussehen:

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN
allow_plaintext: true
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: zarafa
sql_passwd: ******
sql_database: zarafa
sql_select: select value from objectproperty where objectid=(select objectid from objectproperty where value='%s' limit 1) and propname='loginname'

Dabei müssen die natürlich die Sternchen für das Passwort gegen das tatsächliche Passwort ersetzt werden. Sind alle Komponenten neu gestartet worden, können E-Mails von Nutzern eingeliefert werden, die sich via libsasl gegen die MySQL-Datenbank von Zarafa authentifizieren.

Alle Artikel zum Thema CentOS stehen auch als eigene Kategorie mit eigenem Feed zur Verfügung. Falls Ihr tiefergehende Fragen zu Support und Services für Zarafa habt, oder euch Supportangebote für CentOS interessieren, seid ihr bei uns ebenfalls richtig.

Update:
Ursprünglich hatte ich in diesem Artikel auf saslauthd direkt aufgesetzt, dann aber fälschlicherweise nicht gegen die DB, sondern gegen den IMAP-Server von Zarafa (via rimap) authentifiziert. Danke an Uli in den Kommentaren für den Hinweis. Mehr Infos zu saslauthd, libsasl und den unterschiedlichen Einsatzszenarien finden sich im SASL-Readme von Postfix.

tux.jpgGoogle hat den Videocodec VP8 unter einer freien Lizenz veröffentlicht und preist diesen als Standard-Video-Codec für das Internet an.

Google hatte On2-Technologies aufgekauft, und im Zuge dessen auch den Video-Codec VP8 übernommen. Dieser wurde nun unter einer freien Lizenz veröffentlicht und soll dem Willen Googles nach der zukünftige Videostandard des Netzes werden. Das zu diesem Zweck eigenes gegründete Open Web Media Project soll die Firmen und Projekte hinter dem Video-Codec bündeln und diesem so die notwendige Verbreitung und Akzeptanz sichern.

Hintergrund des Schritts ist, dass es für den HTML5-Video-Standard des WWW bisher keinen einheitlichen Codec gibt: kommerzielle Anbieter setzen meist auf H.264, dieser ist jedoch Patentbelastet und erfordert zukünftig Lizenzzahlungen. Freie Projekte setzen daher lieber auf den freien Ogg Theora (das übrigens ebenfalls aus einem Video-Codec von On2 hervor gegangen ist), welches aber häufig wegen einer geringeren Qualität gegenüber H.264 kritisiert wird. Kritiker vermuten außerdem auch bei diesem noch nicht bekannte Patente.

Der von Google vorgestellte Codec soll hier Abhilfe schaffen - die Qualität kann sich sehen lassen, und Google selbst hält diverse Patente an dem Codec selbst. Außerdem ist die Zahl der Unterstützer sehr groß. Medienberichten soll auch Microsofts zukünftiger Browser IE 9 VP8 unterstützen sofern er installiert ist, womit von den großen Software-Herstellern nur noch Apple in der Liste der Unterstützer fehlt.

Es bleibt abzuwarten, ob VP8 sich gegen H.264 durchsetzt, oder aber ob es einen Konter der Interessengruppen rund um H.264 gibt, um zum Beispiel dauerhaft zukünftig eine zumindest kostenfreie Version H.264 zu erlauben.

Alle Blog-Artikel zu aktuellen Themen werden auch als Kategorie News samt eigenem Feed angeboten. Wir bieten zu nahezu allen angesprochenen Open-Source-Themen auch unseren gewohnten Open Source Support.

tux.jpgIn 6 Monaten wird RHEL 3 sowie alle davon abgeleiteten Distributionen das Ende ereilen: sie werden ab da nicht mehr mit Sicherheitsupdates versorgt werden.

Für Red Hats kommerzielle Linux-Distribution werden regulär 7 Jahre lang Updates angeboten. Für den Zweig 3.x der Distribution nähert sich damit das Ende: am 31. Oktober 2010 sind die 7 Jahre um, es wird keinen weiteren Support mehr geben. Dies betrifft auch die Community-Distributionen, die auf den Quellen von RHEL aufbauen, wie CentOS und Scientific Linux.

Nutzern der Distribution legen wir ein Upgrade auf eine neuere Version wärmstens ans Herz, da sonst nicht garantiert werden kann, dass die Maschinen zuverlässig und vor allen Dingen sicher weiter laufen. Zur Zeit liegen für alle genannten Distributionen die aktuell noch gepflegten Zweige 4.x und 5.x vor, ein Release des Zweigs 6.x könnte eventuell noch rechtzeitig zum EOL des Zweigs 3.x veröffentlicht werden.
Da solche Upgrades sehr umfangreich und arbeitsaufwendig sein können, bietet sich alternativ auch eine Migration auf eine andere Distribution wie Debian an.

Ein entsprechender Upgrade-Plan sollte aber in jedem Fall bereits jetzt evaluiert werden - tendenziell sind es gerade die Maschinen des sensiblen produktiven Betriebs, die selten angefasst und noch seltener aktualisiert werden. Eine tiefgehende Analyse des Ist-Zustands so wie der Ansprüche, Notwendigkeiten und Bedingungen an das System vor dem Upgrade sind genau so unerlässlich wie Tests auf Staging-Systemen und eine frühzeitige Migration lange vor dem EoL. Wer bis zum letzten Tag wartet, tut sich keinen Gefallen.

Alle Blog-Artikel zum Thema CentOS werden auch als Kategorie RHEL/CentOS samt eigenem Feed angeboten. Wir bieten natürlich auch Support und Services für CentOS - insbesondere bei Upgrades und Migrationen auf neuere Versionen oder alternative Distributionen.

tux.jpg
Beim Administrieren von Systemen kommt es häufig zu der Situtaion, dass eine SSH-Verbindung auf Host B nur über den SSH-Umweg via Host A möglich ist:
client -> ssh A -> ssh B

Um diesen Zweier-Schritt zu verkürzen, kann ein Eintrag in der ~/.ssh/config den Host A als Jumphost markieren, damit dieser Schritt zukünftig automatisch erfolgt:

Host Bdirekt
Hostname $IP_von_B
User rwo 
ProxyCommand ssh root@A.intern.lan nc %h %p


In der ersten Zeile wird ein Alias definiert - dieser kann beliebig sein, ein Bezug zu B ist aber sicherlich nicht falsch. Die zweite Zeile definiert den Hostname von B - bei Bedarf und je nach Netzwerk ist hier die IP sinnvoller als der Hostname! Die Option ProxyCommand definiert dann die eigentliche Jump-Funktion - hier also den Zugriff via ssh auf A und die Weiterleitung der Daten mittels nc.

Sind nun auch SSH-Keys überall ausreichend verteilt, gibt es auch keine Abfragen mehr. Ein simples ssh Bdirekt führt dann direkt auf den Host B.

Alle Tipps dieses Blogs werden auch als Kategorie Tipp mit eigenem Feed angeboten - und solltet ihr gerade nach Support für Linux suchen, seid ihr bei uns immer richtig.

Spezialisten der credativ GmbH werden ab Mai einige dreitägige Experten-Schulungen im Bereich System- und Netzwerk-Administration bei der Open-Source-School in München halten.

Die Schulungen sind im Einzelnen (Änderungen vorbehalten):
  • Kerberos: Diese Schulung behandelt das Kerberos Authentifizierungsprotokoll, über das eine Vielzahl von Diensten und Betriebssystemen transparent eingebunden werden können. Die Verwendung von Tickets macht ein Single-Sign-On möglich, so dass ein Benutzer mit einmaliger Anmeldung auf alle Dienste zugreifen kann. Die Schulung richtet sich an Netzwerk- und System-Administratoren, die Kerberos in ihrem Firmen- oder Behörden-Netzwerk einführen wollen und behandelt sowohl die Installation und Einrichtung von Kerberos, als auch die Integration von Diensten und Client-Programmen.
    Termine: 03.-05.05.2010 und 13.-15.09.2010
  • Spam- und Virenabwehr: Die Schulung erläutert die Integration und Feinabstimmung der Open-Source-basierten Dienste Postfix, Amavis und SpamAssassin für den Schutz vor unnötiger Netzlast durch Spam-Mails oder Schadsoftware. Sie richtet sich an Administratoren, die die Email-Systeme von Unternehmen oder Behörden gegen Spam und Viren absichern wollen.
    Termine: 26.-28.05.2010 und 18.-20.10.2010
  • Samba in heterogenen Netzen: Diese Schulung behandelt Samba als Ersatz für Windows-Server für nahtlose Integration sowohl von Windows-Clients in Unix-basierte Netzwerke, als auch von Linux-Servern in Windows-basierte Netzwerke. Die Schulung richtet sich an Administratoren, die mit Hilfe von Samba ein Windows-Netzwerk ganz- oder teilweise zu Linux migrieren wollen. Ziel der Schulung ist die Einrichtung und Administration eines LDAP-basierten Primär/Backup Domänen-Controller Setups.
    Termine: 30.06.-02.07.2010
Die Schulungen finden in den Räumlichkeiten der Open-Source-School in der Münchner Innenstadt, Amalienstr. 77 statt. Anmeldungen erfolgen über die Webseite der Open-Source-School oder per Fax-Formular. Für weitere Informationen steht Michael Banck zur Verfügung. Außerdem findet vom 21.04.-23.04.2010 auch wieder eine PostgreSQL-Schulung von credativ-Spezialisten beim Linuxhotel in Essen statt.

debianlogo.pngDas massenhafte Installieren von Debian-Maschinen lässt sich mit Hilfe von Preseeding und Netboot vereinfachen. Friedrich Weber hat in seinem Schülerpraktikum hier bei uns den entsprechenden Prozess gelernt - und in einem Howto fest gehalten.

Man stelle sich die folgende Situation vor: plötzlich finden sich einige zehn bis zwanzig fabrikneue Notebooks und eine wunderbare Idee, was man mit ihnen anstellen könnte: ein deutschsprachiges Debian installieren und das Ganze nach den eigenen Wünschen anpassen. Allerdings wird sofort klar, dass es nicht den geringsten Spaß macht, auf jedem Notebook manuell die Debian-Installation und -Konfiguration vorzunehmen. An dieser Stelle kommt Debian Preseed ins Spiel.

Das Konzept ist einfach und einleuchtend: Der normale Debian-Installer stellt während der Installation eine Reihe Fragen (zu Sprache, Partitionierung, Paketen, Bootloader etc.). Über Preseed kann man nun zu jeder zu stellenden Frage eine Antwort vorgeben. Nur Fragen, für die man nicht schon über Preseed eine Antwort vorgibt, stellt der Debian-Installer überhaupt noch. Im Idealfall werden nun nur noch am Anfang der Installation einige Fragen angezeigt, deren Antworten sich von Zielsystem zu Zielsystem unterscheiden und die der Administrator manuell abhandeln muss - nachdem diese beantwortet wurden, kann die Installation unbeaufsichtigt ablaufen.

Preseed arbeitet mit einer sehr einfach aufgebauten Konfigurationsdatei: der preseed.cfg. Sie beinhaltet, wie oben beschrieben, Antworten auf Fragen während der Installation, und das im debconf-Format. Eine solche Datei besteht aus mehreren Zeilen, von denen jede Zeile eine debconf-Konfigurationsoption - eine Antwort auf eine Frage - festlegt, zum Beispiel so:

    d-i debian-installer/locale	string de_DE.UTF-8

Diese Zeile beinhaltet als erstes Element den Namen des Paketes, das konfiguriert wird (d-i ist hier eine Kurzform für debian-installer), als zweites Element den Namen der Option, die gesetzt wird, als drittes Element den Typ der Option (hier string, eine Zeichenkette), und der Rest ist der Wert der Option. Mit diesem Beispiel wird also die Sprache auf deutsch mit UTF-8-Kodierung gesetzt.

Solche Zeilen kann man sich selbst zusammenbasteln, einfacher geht es aber mit dem Tool debconf-get-selections: Dieses Kommando gibt schlicht und einfach alle Optionen aus, die lokal gesetzt wurden. Aus der Ausgabe können die gewünschten Einstellungen herausgefischt, gegebenenfalls angepasst und in die preseed.cfg kopiert werden.

Hier ein Beispiel einer solchen preseed.cfg:

    d-i debian-installer/locale string de_DE.UTF-8
    d-i debian-installer/keymap select de-latin1
    d-i console-keymaps-at/keymap select de
    d-i languagechooser/language-name-fb select German
    d-i countrychooser/country-name select Germany
    d-i console-setup/layoutcode string de_DE

    d-i clock-setup/utc boolean true
    d-i time/zone string Europe/Berlin
    d-i clock-setup/ntp boolean true
    d-i clock-setup/ntp-server string ntp1

    tasksel tasksel/first multiselect standard, desktop, gnome-desktop, laptop
    d-i pkgsel/include string openssh-client vim less rsync

Mit diesen Optionen werden Spracheinstellungen und Zeitzone gesetzt, außerdem zu installierende Tasks und Pakete ausgewählt.
Vollkommen unbeaufsichtigt wird diese Installation nicht ablaufen, aber ein Anfang ist es auf jeden Fall.

Nun stellt sich die Frage, woher Preseed eigentlich seine Konfigurationsdatei bezieht. Grundsätzlich ist es möglich, Preseed mit CD- und DVD-Images oder USB-Sticks zu nutzen. Wesentlich komfortabler ist es aber, ein Debian-netboot-Image zu benutzen, also einen Installer, der über das Netzwerk gestartet wird und bei dieser Gelegenheit auch seine Preseed-Konfiguration beziehen kann. Dieses Booten über Netzwerk wird mit PXE realisiert und setzt ein System voraus, das von Netzwerkkarte booten kann.

Zunächst wird das System angewiesen, von der Netzwerkkarte zu booten. Dafür fordert es von einem DHCP-Server per Broadcast eine IP-Adresse an. Dieser DHCP-Server übermittelt aber nicht nur eine passende IP, sondern auch die IP eines sogenannten Bootservers. Ein Bootserver ist ein TFTP-Server, der einen Bootloader bereitstellt, mit dem der Administrator den gewünschten Debian-Installer auswählt. Gleichzeitig kann dem Debian-Installer hier über Boot-Optionen mitgeteilt werden, dass er Preseed benutzen soll und wo er die Preseed-Konfiguration finden kann. Hier ein Ausschnitt der PXELINUX-Konfigurationsdatei pxelinux.cfg/default:

    label i386
        kernel debian-installer/i386/linux
        append vga=normal initrd=debian-installer/i386/initrd.gz netcfg/choose_interface=eth0 domain=example.com locale=de_DE debian-installer/country=DE debian-installer/language=de debian-installer/keymap=de-latin1-nodeadkeys console-keymaps-at/keymap=de-latin1-nodeadkeys auto-install/enable=false preseed/url=http://$server/preseed.cfg DEBCONF_DEBUG=5 -- quiet 

Wenn der User also i386 eintippt, wird der Kernel debian-installer/i386/linux (zu finden auf dem TFTP-Server) heruntergeladen und gestartet, diesem werden außerdem eine ganze Menge Bootoptionen mit auf den Weg gegeben. Der Debian-Installer erlaubt das Angeben von debconf-Optionen als Bootparameter. Das ist sehr praktisch, denn dem Installer muss irgendwie mitgeteilt werden, wo die Preseed-Konfiguration im Netzwerk zu finden (preseed/url) ist. Damit er diese Preseed-Konfiguration herunterladen kann, muss er allerdings auch ins Netzwerk eingebunden sein. Dafür werden ihm die nötigen Optionen übergeben (die Option für den Hostnamen wurde hier bewusst ausgelassen, denn jedes Zielsystem hat natürlich einen anderen Hostname). auto-install/enable würde die Spracheinstellungen verzögern, sodass sie erst nach der Netzwerkkonfiguration gestellt würden, damit diese Einstellungen ebenfalls aus der preseed.cfg gelesen werden könnten. Das ist hier nicht notwendig, denn die Spracheinstellungen werden ebenfalls als Kerneloptionen übergeben, um zu gewährleisten, dass auch die Netzwerkkonfiguration deutschsprachig ist.

Die vorgestellten Beispiele und Konfigurationsauszüge sind natürlich sehr allgemein gehalten und stark gekürzt. Trotzdem sollte dieser Blog-Post eine Einführung in das Preseed-Konzept in Verbindung mit netboot geboten haben. Abschließend noch eine vollständigere Fassung der preseed.cfg:

    d-i debian-installer/locale string de_DE.UTF-8
    d-i debian-installer/keymap select de-latin1
    d-i console-keymaps-at/keymap select de
    d-i languagechooser/language-name-fb select German
    d-i countrychooser/country-name select Germany
    d-i console-setup/layoutcode string de_DE

    # Netzwerk
    d-i netcfg/choose_interface select auto
    d-i netcfg/get_hostname string debian
    d-i netcfg/get_domain string example.com

    # Paketmirror
    d-i mirror/protocol string http
    d-i mirror/country string manual
    d-i mirror/http/hostname string debian.example.com
    d-i mirror/http/directory string /debian
    d-i mirror/http/proxy string
    d-i mirror/suite string lenny

    # Zeitzone
    d-i clock-setup/utc boolean true
    d-i time/zone string Europe/Berlin
    d-i clock-setup/ntp boolean true
    d-i clock-setup/ntp-server string ntp.example.com

    # Root-Account
    d-i passwd/make-user boolean false
    d-i passwd/root-password password geheimespasswort
    d-i passwd/root-password-again password geheimespasswort

    # Weitere APT-Optionen
    d-i apt-setup/non-free boolean false
    d-i apt-setup/contrib boolean false
    d-i apt-setup/security-updates boolean true

    d-i apt-setup/local0/source boolean false
    d-i apt-setup/local1/source boolean false
    d-i apt-setup/local2/source boolean false

    # Tasks
    tasksel tasksel/first multiselect standard, desktop
    d-i pkgsel/include string openssh-client vim less rsync
    d-i pkgsel/upgrade select safe-upgrade

    # Popularity-Contest
    popularity-contest popularity-contest/participate boolean true

    # Kommando, das nach der Installation ausgeführt wird. `in-target` bedeutet, dass das folgende
    # Kommando in der installierten Umgebung ausgeführt wird, nicht in der Installationsumgebung.
    # Hier wird http://$server/skript.sh nach /tmp heruntergeladen, ausführbar gemacht und ausgeführt.
    d-i preseed/late_command string in-target wget -P /tmp/ http://$server/skript.sh; in-target chmod +x /tmp/skript.sh; in-target /tmp/skript.sh

Alle Howtos dieses Blogs werden auch als Kategorie Howto samt eigenem Feed angeboten - und falls ihr nach Support und Services für Debian sucht, seit ihr bei uns ebenfalls richtig.

290px-OpenGL_logo.svg.png
Nvidia hat bekannt gegeben, dass der freie nv-Treiber nicht mehr länger unterstützt wird. Beginnend mit den soeben neu veröffentlichten Fermi-Grafikkarten werden zukünftige Karten von Nvidia nicht mehr mit dem Treiber nv funktionieren.

Ursprünglich war der nv-Treiber von Nvidia entwickelt worden, um auf aktueller Hardware eine brauchbare 2D-Performance zu erlangen. 3D-Unterstützung war dort von vornherein weder gewollt noch geplant gewesen, und wurde auch nie angegangen. Nutzer mit 3D-Ansprüchen wurden schon immer auf den proprietären Treiber von Nvidia verwiesen.

Für die Zukunft sollen nun alle Nutzer den proprietären Treiber verwenden - für eine erste Installation unter Linux sei der Vesa-Treiber ausreichend, so Nvidia in einem Statement. Da der nv-Treiber kaum mehr biete als der Vesa-Treiber, sei dies in Ordnung.

Dabei geht die Bekanntgabe in keinster Weise auf den mittlerweile recht weit fortgeschrittenen Treiber nouveau ein, der vor einigen Wochen in den Kernel aufgenommen wurde und daher standardmäßig bei zukünftigen Distributionen für Nvidia-Karten zum Einsatz kommen wird. Denn dieser Treiber bietet neben 2D- auch 3D-Funktionen, es war bereits absehbar, dass dieser den nv-Treiber mittelfristig überflüssig machen würde.

Unter diesem Gesichtspunkt ist die Ankündigung daher wenig überraschend. Es wäre aber wünschenswert gewesen, hätte Nvidia seine Open-Source-Ankündigungen auf den neuen Treiber nouveau verlegt, statt sie vollständig einzustellen. Bisher sieht es damit leider nicht so aus, als würde sich die forcedeth-Geschichte im Grafik-Bereich wiederholen.

Alle Blog-Artikel zum Thema X11 werden auch als Kategorie X11 samt eigenem Feed angeboten - und falls ihr nach Support und Services für Linux sucht, seit ihr bei uns ebenfalls richtig.

Die Resonanz auf die Vorstellung der Open Source Support Card war immens. Im Folgenden listen wir die wichtigsten Reaktionen der Presse und das Feedback der Community auf.

Die gestern erfolgte Vorstellung der Open Source Support Card wurde von einem großen Presse-Echo begleitet - alle großen Nachrichtenportale haben darüber berichtet, und die Berichte waren sehr positiv. Das ist ein deutliches Zeichen dafür, dass Linux-Support für viele Business-Kunden ein interessantes und wichtiges Thema ist - und dass unser Angebot etwas wirklich neues ist - wir lassen "einen frischen Frühlingswind" durch den Markt fegen, wie die Pressemitteilung so schön sagte.

Hier die bisher gefundenen Artikel im deutschsprachigen Raum - bitte hinterlasst Kommentare, wenn wir was übersehen haben:

Aber auch die Reaktionen in diversen Foren waren interessant zu lesen: die Preise, aber auch unser Open Source Support Center (OOSC), unsere Open Source Support Referenzen und unsere Firma an sich wurden ausführlichst besprochen. Diese sehr umfangreichen Diskussionen zeigen ebenfalls, dass wir mit dem Angebot den Puls der Zeit und den Nerv vieler Linux-Admins im professionellen Umfeld getroffen haben.

Für uns alle war es ein dementsprechend bestärkender Tag, und wir sind zufrieden in den Feierabend gegangen. Wir danken für das umfangreiche Feedback, und stehen für Fragen immer gerne zur Verfügung - auch hier im Blog. Allerdings werden wir nicht verraten, welches Thema die nächste Open Source Support Card abdeckt. Ihr könnt ja mal raten. ;-)

Alle Blog-Artikel zu unserer Firma werden auch als Kategorie credativ samt eigenem Feed angeboten.

Ab sofort bietet credativ die Open Source Support Card an. Mit ihr kann Open Source Support für klar umrissene Themen ohne Vertragsbindung eingekauft werden - zu einem festen Preis.

Nach langer Vorbereitungszeit ist es jetzt so weit: ab heute bieten wir mit der Open Source Support Card unseren gewohnten Service auf eine neue, einfachere Art an: Themen-bezogen, im Vorfeld bezahlt und mit festem Kontingent.

frontside_3_shade_bg_white.png

Mit der Open Source Support Card haben die Kunden den Vorteil einer absoluten Kostenkontrolle, und es entfällt die für einige Kunden hinderliche Bindung an einen Vertrag - die Karte wird als normales Produkt erworben! Das kann insbesondere in der Rechnungsführung größerer Unternehmen praktisch sein, nicht zu Unrecht wird sich der ein oder andere Leser an die "Prepaid"-Modelle im Mobilfunkbereich erinnert fühlen. Die Presse-Mitteilung gibt eine ganz gute Übersicht der Vorteile und Bedingungen der Karte:

  • Open Source Support für ein klar umrissenes Thema
  • Themenbezogener Support für alle Desktops und Server des Unternehmens
  • Knackiger Preis: 890 Euro
  • Volle Kostenkontrolle
  • Support per Telefon, E-Mail und Remote
  • Hilfe in englischer oder deutscher Sprache
  • KEINE Abhängigkeit von Zahl der Nutzer, CPUs oder ähnlichem
  • KEINE Vertragsbindung, sondern einfache Bestell-Abwicklung
  • KEIN Call-Center - direkter Support durch uns
  • Die Supporteinheiten können für folgende Dienstleistungen genutzt werden:
    • Administration
    • Installation (Remote)
    • Beratung

Dabei wird der Support auf die credativ-typische Art und Weise geliefert: unabhängig von der Zahl der CPUs, Nutzer oder DB-Einträge, wie auch bei unseren klassischen Verträgen. Support-Einheiten, die mit der Open Source Support Card erworben werden, können für alle vorhandenen Rechner genutzt werden, unternehmensweit. Geleistet wird der Support - selbstverständlich - von unserem Open Source Support Center: dort gibt es keine FAQ-Schleifen oder lästige Diskussionen mit nicht-technischem Personal. Wir sind Linux-Spezialisten und Open-Source-Experten, die allesamt selbst in diversen Projekten aktiv sind - regelmäßigen Lesern dieses Blogs dürfte das aber eh klar sein. ;-)

Für die Community ist das Angebot in so fern interessant, dass der Einsatz freier Distributionen jetzt attraktiver wird. Denn das Preisangebot von unter 1000 Euro dürfte den Anbietern kommerzieller Distributionen einiges an Kopfzerbrechen bereiten, und nicht wenige Firmen können sich jetzt einen Umstieg hin zu Debian oder CentOS ernsthaft überlegen. Die Karte ist sogar so angelegt, dass auch Reseller sie verkaufen können - mit etwas Glück könnt ihr demnächst neben dem Debian-Server auch gleich den Support in den Warenkorb klicken.

Aktuell steht die Support Card in Deutschland für die Distributionen Debian und CentOS zur Verfügung. Weitere Projekte und andere Open-Source-Software werden folgen, genauso wie die Verfügbarkeit in den USA, Großbritannien und Kanada. Wenn ihr weitere Fragen oder vielleicht auch Wünsche habt, hinterlasst bitte Kommentare - wir haben viel Arbeit in dieses Projekt gesteckt, und sind sehr auf die Reaktion unserer Kunden, aber auch der Community selbst, gespannt.

postgreslogo.pngDer OOM-Killer kann auf stark ausgelasteten Maschinen für böse Überraschungen sorgen: Prozesse werden plötzlich und unerwartet beendet. Dieses Verhalten lässt sich aber mit Kernel-Bord-Mitteln sehr genau beeinflussen.

Administratoren auf Linuxmaschinen mit hoher RAM-Nutzung erleben oft eine Begegnung der unheimlichen Art: den Linux OOM-Killer (OOM = Out Of Memory). Der Administrator findet in diesem Szenario eine "abgestürzte" PostgreSQL-Instanz vor, im Serverlog finden sich dann einer oder meist mehrere Einträge der Form

Out of Memory: Killed process PID (Prozessname)

Doch was genau steckt dahinter?

Virtueller Speicher und Overcommit

Virtueller Speicher in Linuxsystemen wird auf vielfältige Weise adressiert: RAM, mmap(), Swap oder Shared Memory, um ein paar Beispiele zu nennen. Es ist möglich, durch das sogenannte Overcommit-Verhalten bei Allokieren von Speicher mehr Ressourcen anzufordern, als tatsächlich im System aktuell vorhanden ist. In solchen Situationen spricht man von einer OOM-Situation, das System hat alle Ressourcen aufgebraucht und ist nicht mehr in der Lage, mehr virtuellen Speicher zu adressieren. Hier wird der OOM-Killer aktiv, der Prozesse nach festgelegten Kriterien auswählt und diese terminiert, um dem System ein wenig Luft zu verschaffen. Dieses Verhalten ist insbesondere für Datenbanksysteme zu berücksichtigen, die nicht auf dedizierter Hardware laufen. Der OOM-Killer bevorzugt in solchen Umgebungen häufig PostgreSQL, da als Kandidaten zum Terminieren solche Prozesse ausgewählt werden, die mit aggressiver Speichernutzung auffallen. Da der OOM-Killer den gesamten Adressraum aller Kinder inklusive Shared Memory in Summe sieht, erkennt man recht schnell, dass PostgreSQL auf jeden Fall weit oben in der Liste der Kandidaten auftauchen wird.
Wie stark der zur Verfügung stehende Speicher genutzt wird, findet man am schnellsten über das /proc-Filesystem heraus:

$ grep Commit /proc/meminfo 
CommitLimit:    376176 kB
Committed_AS:   265476 kB

In diesem Beispiel sind aktuell als Obergrenze 376176 kB(CommitLimit) an Speichernutzung möglich, zugewiesen wurden 265476 kB (Committed_AS). Nähert sich CommitLimit sehr stark an Committed_AS an oder übersteigt diesen sogar, dann ist der Einsatz des OOM-Killers wahrscheinlich.

Der Linux-Kernel stellt einige Schnittstellen zur Verfügung, die das Verhalten des OOM-Killers gegenüber PostgreSQL beeinflusst.

Overcommit abschalten

Die radikalste Methode ist, Overcommit generell im Kernel abzuschalten. Allerdings kommt dies nur für dedizierte Datenbanksysteme in Frage, auf denen PostgreSQL exklusiv läuft. Das Overcommit-Verhalten lässt sich in modernen 2.6ern Kernel in drei Kategorien mit dem Parameter

vm.overcommit_memory = 0

konfigurieren. Die einzelnen Kategorien hierbei sind:

  • 0: Vorsichtiges Overcommitverhalten. Während gemäßigte Allokierungen erlaubt sind, werden extrem große Allokierungen, die zu übermäßigem Overcommit führen, abgelehnt. In diesem Modus kann root auch mehr Speicher allokieren als ein unprivilegierter Benutzer. Dieser Modus ist auch die Standardeinstellung des Kernels.
  • 1: Overcommit unterliegt keinen Einschränkungen
  • 2: Schaltet Overcommitverhalten ab. Generell bedeutet dies, dass der maximale allokierbare tatsächliche Adressraum nicht größer werden kann, als swap + ein konfigurierbarer Anteil an Prozent des physkalischen RAM.

Der Anteil des physikalischen RAM bei Modus 2 wird über den zusätzlichen Parameter

vm.overcommit_ratio = 50

kontrolliert.

Während vm.overcommit_memory=1 für Spezialanwendungen interessant sein könnte, wird es im Praxiseinsatz eher zum Einsatz für die Parameterwerte 0 oder 2 kommen. Wird Overcommit über vm.overcommit_memory=2 abgeschaltet, so wird ein Prozess (in Abhängigkeit von vm_overcommit_ratio) sofort eine "Out Of Memory"-Bedingung beim Allokieren von Speicher erhalten. Abhängig von der Distribution sollte man die Einstellungen permanent in die Datei /etc/sysctl.conf speichern, so dass diese auch nach einem Neustart des Systems aktiv sind:

$ echo "vm.overcommit_memory=2 >> /etc/sysctl.conf
$ echo "vm.overcommit_ratio=60 >> /etc/sysctl.conf
$ sysctl -p /etc/sysctl.conf

Die Änderungen wirken sich sofort auf den virtuellen Speicher aus, man kann dies erneut durch Abrufen von /proc/meminfo überprüfen:

$ grep Commit /proc/meminfo 
CommitLimit:    401440 kB
Committed_AS:   266456 kB

Die Maschine verfügt über 249848 kB Swap und 252656 kB physikalischen RAM. Nach der Formel Swap + vm.overcommit_ratio * RAM ergibt dies ein CommitLimit von 401440 kB.

OOM-Killer auf Prozessebene konfigurieren

Ist PostgreSQL nicht auf einem dedizierten Server installiert und wird mit einer speicherhungrigen Middleware (bspw. JBoss- oder Tomcat-Installation) auf demselben System betrieben, so ist es wünschenswert, Overcommit-Verhalten zwar zu erlauben, im Falle einer "Out Of Memory"-Situation aber PostgreSQL vom OOM-Killer auszunehmen. Seit Kernel 2.6.11 bietet Linux daher ein Interface an, um den OOM-Score eines Prozesses zu tunen, so dass dieser vom OOM-Killer weniger oder stärker berücksichtigt wird. Dies erlaubt ein sehr feinfühliges Einstellen des Systems auf die Speicherbedürfnisse einzelner Prozesse. Die Konfiguration wird über eine Datei im /proc-Filesystem des Kernel vorgenommen, beispielsweise hier für den PostgreSQL-Hauptprozess unter Debian (0 ist die Standardeinstellung für Prozesse):

$ cat /proc/$(cat /var/run/postgresql/8.4-main.pid)/oom_adj
0

Die erlaubten Werte sind von -17 bis +15, negative Werte verringern die Affinität des Prozesses gegenüber den OOM-Killer, positive Werte erhöhen diese. -17 schaltet den OOM-Killer für den jeweiligen Prozess komplett ab. Die Einstellung wird vom Parent an etwaige Kindprozesse weitervererbt. Da PostgreSQL sich für eine Datenbankverbindung forked, reicht es, diese Einstellung dem PostgreSQL-Hauptprozess mitzugeben:

$ echo -17 >> /proc/$(cat /var/run/postgresql/8.4-main.pid)/oom_adj
$ psql -q postgres
test=# SELECT pg_backend_pid();
 pg_backend_pid 
----------------
           3429
(1 Zeile)

test=# 
[1]+  Stopped                 psql -q test
$ cat /proc/3429/oom_adj
-17

Der Nachteil dieser Methode ist, dass dies nun für alle Kindprozesse des PostgreSQL-Hauptprozesses gilt, was eventuell vom DBA nicht mehr gewünscht ist. Beispielsweise möchte man zwar gerne die PostgreSQl-Systemprozesse wie Background Writer oder Autovacuum vor dem OOM-Killer schützen, nicht jedoch normale Datenbankverbindungen.

Das Setzen von /proc/PID/oom_adj erfordert jedoch einen privilegierten Benutzer, so dass man am Besten die Einstellung direkt im Startskript der PostgreSQL-Datenbank vornimmt.

Erweiterungen in PostgreSQL 9.0

PostgreSQL 9.0 wird hinsichtlich der Zusammenarbeit mit dem /proc-Interface ebenfalls einige Neuerungen mitbringen. Zum einen wurde das im Quelltext mitgelieferte Linux-Startskript dahingehend erweitert, zum anderen bietet das Backend nun auch Unterstützung, falls man die /proc-Einstellungen eben nicht an normale Datenbankverbindungen weitervererben möchte. Hierzu kann der PostgreSQL-Server mit dem Makro LINUX_OOM_ADJ=0 kompiliert werden, beispielsweise:

$ ./configure CC="ccache gcc" CFLAGS="-DLINUX_OOM_ADJ=0"

Diese Methode schützt dann die PostgreSQL-Systemprozesse effektiv, erlaubt aber dem OOM-Killer etwaige Amoklaufende Backends trotzdem zu terminieren.

Alternativen

Eine alternative Lösung gibt es auch in Form eines Kernelpatches. Dies ergänzt das /proc-Filesystem um eine Liste an Prozessnamen, die explizit vom OOM-Killer nicht berücksichtigt werden dürfen. Da dies jedoch eine inoffizielle Erweiterung des Kernels ist, muss man seinen eigenen Kernel damit pflegen, auch ist diese Erweiterung bei weitem nicht so flexibel wie das Interface über oom_adj. Des weiteren sind Prozessnamen relativ ungeeignet, um spezifische Prozesse eindeutig zu identifizieren (z.B. Java- oder Perlbasierte Prozesse).

Zusammenfassung

Der Linuxkernel bietet mittlerweile umfassende Möglichkeiten, die Speichernutzung von Prozessen an das Memory Management des Kernels anzupassen. Die flexibelste Lösung stellt das /proc-Filesystem mit dem oom_adj-Interface dar. PostgreSQL 9.0 ergänzt dies durch weitere Maßnahmen. Dedizierte Datenbanksysteme können vom Administrator dahingehend angepasst werden, gar kein Overcommit des virtuellen Speichers zuzulassen, hier muss jedoch sorgfältig abgewogen werden, welche Anforderungen die PostgreSQL-Instanz an die VM des Kernels stellt.

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.