Gefixt: Courier-MTA stellt nach Update auf 0.66.3 keine Mails mehr zu

Folgendes Symptom: Nach dem Update von Courier auf Version 0.66.3 werden zwar noch Mails auf SMTP- und sendmail-Ebene angenommen, aber nicht mehr ausgeliefert.

Nach längerer Fehlersuche stellt sich heraus, daß die Mails in die Unterverzeichnisse von /var/spool/courier/tmp/ eingestellt werden, aber die Einreihung in die Queue scheitert. Ein Aufruf von mailq zeigt keine Einträge an.

Ein strace -Ffo out.txt bash -c 'echo test|sendmail adresse@example.com' offenbart, daß eine Datei nicht geöffnet werden kann:

24201 open(“/var/spool/courier/tmp/trigger”, O_WRONLY|O_NONBLOCK|O_LARGEFILE) = -1 ENXIO (No such device or address)

Bei trigger handelt es sich um eine Pipe. Das Schreiben eines einfachen Newlines in die Datei veranlasst den courierd-Prozeß die Daten aus dem tmp-Verzeichnis zu Scannen und in die Mail-Queue einzureihen. Klappt das Öffnen einer Pipe-Datei nicht, ist das ein Zeichen dafür, daß auf der anderen Seite ein Prozeß fehlt, der die Befehle entgegen nimmt.

In der Tat fehlt der zentrale Prozeß courierd. Ein manueller Aufruf mit strace -fo out_courierd.txt /usr/lib/courier/sbin/courier start führt zu der Ursache des Problems:

1938  stat64(“/etc/sysconfig/i18n”, 0xbfe96c10) = -1 ENOENT (No such file or directory)
1938  open(“/etc/sysconfig/i18n”, O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)

1938  write(2, “/etc/courier/courierd: line 43: “…, 79) = 79

Während des Aufstartens wird die Konfigurationsdatei /etc/courier/courierd im Shellkontext aufgerufen. Diese Datei ist im Grunde ein Shell-Skript und setzt bestimmt Umgebungsvariablen, die von später gestarteten Prozessen ausgewertet werden.

Beim Durchlaufen des Skripts ist offenbar ist Zeile 43 ein Fehler aufgetreten, der zum Abbruch führte. Tatsächlich wird dort schlicht /etc/sysconfig.i18n eingebunden (. /etc/sysconfig.i18n).

Aus welchen Gründen auch immer ist auf dem betroffenen System diese Datei nicht vorhanden. Dazu muß man wissen, daß bei courier in letzter Zeit größere Umbau-Arbeiten im Internationalisierungs- und Sprachenbereich stattgefunden haben. Wahrscheinlich deshalb hat das Fehlen der Datei erst in dieser Version zu einem schweren Fehler geführt.

Das Problem lässt sich einfach lösen, indem man die Datei /etc/sysconfig.i18n mit folgenden Standardwerten füllt:

LANG=”de_DE.UTF-8″
SYSFONT=”latarcyrheb-sun16″

Nach einem /etc/init.d/courier restart start auch wieder der courierd – Prozeß und das Queueing funktioniert wieder.