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.