weidner/computer/sysadmin/

Postfix-Konfiguration mit make verwalten

Die Postfix-Konfiguration verteilt sich auf verschiedene Dateien, die unterschiedlich behandelt werden, um die enthaltenen Informationen zu aktivieren.

Änderungen in der lokalen Alias-Datei /etc/aliases werden mit dem Befehl newaliases aktiviert und Maps mit postmap in das gewählte Binärformat umgewandelt. Für Änderungen in main.cf und master.cf schließlich gibt es den Befehl: postfix reload.

Dabei sind viele Abhängigkeiten zu bedenken und gerade, wenn ich die Konfiguration nur selten ändere, habe ich nicht alle nötigen Befehle im Kopf und vergesse gern das eine oder andere.

Ein Skript

Gegen Vergesslichkeit helfen Skripts und ein solches verwende ich, um nach Konfigurationsänderungen am Mailserver diese mit wenig Aufwand zu aktivieren.

Ein Shell-Skript wäre prinzipiell möglich, aber dieses würde entweder die Abhängigkeiten nicht berücksichtigen und immer alle Aktionen ausführen. Oder es wäre so komplex, dass es kompliziert zu schreiben und zu warten wäre.

Ein Makefile hingegen berücksichtigt Abhängigkeiten automatisch anhand des Änderungsdatums von Dateien und kann daher sehr kurz und einfach ausfallen. Damit rufe ich postfix reload, postmap und newaliases genau dann auf, wenn es nötig ist und muss mir nur einen Befehl merken:

make

Diesen muss ich allerdings im Verzeichnis /etc/postfix/ aufrufen.

Wie sieht das Makefile aus?

Ich verwende ein sehr einfaches Makefile:

# Makefile für Postfix

MAPS = /etc/aliases.db \
       transports.db \
#

all: .reloaded

.reloaded: $(MAPS) main.cf master.cf
        postfix reload && touch .reloaded

%.db: %
        postmap $<

/etc/aliases.db: /etc/aliases
        newaliases

Es enthält eine Liste aller Maps (MAPS) sowie Regeln, um diese in das verwendete Binärformat umzuwandeln. Das können generische Musterregeln sein (%.db: %) oder spezifische wie für die lokale Alias-Datenbank.

Eine Vergleichsdatei (.reloaded) hält den Zeitpunkt fest, zu dem die Konfiguration das letzte Mal durch make neu geladen wurde. Diese Datei ist für make abhängig von allen Maps sowie den beiden Konfigurationsdateien. Über die Abhängigkeiten bestimmt make, welche Aktionen auszuführen sind.

Der Bequemlichkeit halber gibt es die allererste Regel (all: .reloaded), die dafür sorgt, dass make beim Aufruf ohne Argumente alles tut, was notwendig ist, um eine geänderte Konfiguration zu aktivieren.

Damit habe ich alles Nötige zusammen, um Änderungen an der Postfix-Konfiguration vollständig zu aktivieren.

Damit ich mir nicht merken muss, dass ich make im Verzeichnis /etc/postfix/ und mit Root-Rechten aufrufen muss, kann ich die Befehlsfolge

cd/etc/postfix && sudo make

als Alias, Shellfunktion oder Skript mit Namen activate_postfix_changes ablegen und brauch mir noch weniger zu merken.

Posted 2019-12-20
Tags: