helpful_warnings=no schaltet nicht "override earlier entry" Warnings aus
Axel Beckert
beckert at phys.ethz.ch
Mi Jan 28 11:54:42 CET 2015
Hallo,
wir verteilen unsere main.cf auf Server und Workstations per
Konfigurationsmanagement.
Es gibt eine Default-main.cf, die meistens ausreicht. Braucht es
Abweichungen, so werden diese durch ein beim Deployment angehängtes
per-host-Konfigurationsschnipsel gelöst. In diesem sind
ggf. Einstellungen drin, die in der Default-Datei bereits mit anderen
Wertten drin sind, um diese zu überschreiben.
Mit Debian 7 Wheezy und Postfix 2.9.6 funktioniert dies wunderbar,
aber seit Debian 8 Jessie und Postfix 2.11.3 jammert Postfix in
verschiedensten Situationen über diese "Überschreib"-Methoden:
# postconf > /dev/null
postconf: warning: /etc/postfix/main.cf, line 29: overriding earlier entry: mydestination=
postconf: warning: /etc/postfix/main.cf, line 30: overriding earlier entry: relayhost=smtp.phys.ethz.ch
postconf: warning: /etc/postfix/main.cf, line 31: overriding earlier entry: inet_interfaces=loopback-only
#
Die dazugehörige main.cf sieht wie folgt aus:
---8<---
# Note: file generated by dphys-config DO NOT EDIT IN /etc/postfix/main.cf
# Default settings (hostname has been inserted by the configuration
# deployment tool)
myhostname = silberspitz.ethz.ch
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU Linux)
biff = no
append_dot_mydomain = no
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
relayhost = smtp.phys.ethz.ch
mynetworks = 127.0.0.0/8, [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
sender_canonical_maps = pcre:/etc/postfix/sender_canonical
mydestination =
# Per-host settings
mydestination =
silberspitz.ethz.ch
silberspitz
localhost
bb.phys.ethz.ch
hobbit.phys.ethz.ch
xymon.phys.ethz.ch
relayhost =
inet_interfaces = all
--->8---
(Grundidee bei diesem Beispiel: Alle Standard-Server sollen Mails via
Mailserver verschicken, nicht aber der Monitoring-Server von dem
o.g. Beispiel stammt. Der soll auch noch Mails an das SMS-Gateway
verschicken können, wenn der Mailserver down ist.)
Um o.g. Warnungen zu unterdrücken habe ich dann noch ein
helpful_warnings = no
ganz vorne in der main.cf hinzugefügt.
Gemäss man page unterdrückt dies "warnings about problematic
configuration settings, and helpful suggestions." -- Klang für mich
nach genau der richtigen Einstellung, hat aber leider keinen
Unterschied gemacht.
Deswegen meine Frage: Wie bekomme ich Postfix dazu, diese Warnungen
nicht mehr auszugeben? Sie verursachen diverse Mails von Cron-Jobs,
weil Output (auf STDERR) kommt, z.B. von popularity-contest:
---8<---
Subject: Cron <root at silberspitz> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
/etc/cron.daily/popularity-contest:
sendmail: warning: /etc/postfix/main.cf, line 28: overriding earlier entry: mydestination=
sendmail: warning: /etc/postfix/main.cf, line 29: overriding earlier entry: relayhost=smtp.phys.ethz.ch
sendmail: warning: /etc/postfix/main.cf, line 30: overriding earlier entry: inet_interfaces=loopback-only
postdrop: warning: /etc/postfix/main.cf, line 28: overriding earlier entry: mydestination=
postdrop: warning: /etc/postfix/main.cf, line 29: overriding earlier entry: relayhost=smtp.phys.ethz.ch
postdrop: warning: /etc/postfix/main.cf, line 30: overriding earlier entry: inet_interfaces=loopback-only
--->8---
Und nein, ich will nicht pauschal allen Output nach STDERR
unterdrücken, da könnte ja durchaus mal ein relevanter Fehler drin
sein. :-) (Mal ganz davon abgesehen, dass ich das nicht in jedem
Skript machen will, welches irgendwann mal "sendmail" aufruft.)
Im Changelog habe ich diesen Eintrag gefunden:
20130404
Human factors: warning when a main.cf parameter has multiple
entries with different values. File: util/dict.c.
Aber das ist doch gar kein Bug, das ist ein Feature! ;-)
Code-Stelle dazu ist recht sicher dies hier:
459 if ((old = dict->lookup(dict, member)) != 0
460 && strcmp(old, val) != 0)
461 msg_warn("%s, line %d: overriding earlier entry: %s=%s",
462 VSTREAM_PATH(fp), lineno, member, old);
Bei Weiterverfolgen, ob das Log-Level irgendwo ausgewertet wird und
beeinflusst werden kann, bin ich bis zur Funktion msg_text am Ende von
util/msg_output.c gekommen, aber da haben mich meine C-Kenntnisse dann
irgendwann verlassen...
Mit freundlichem Gruss, Axel Beckert
--
Axel Beckert <beckert at phys.ethz.ch> support: +41 44 633 26 68
IT Services Group, HPT H 6 voice: +41 44 633 41 89
Departement of Physics, ETH Zurich
CH-8093 Zurich, Switzerland http://nic.phys.ethz.ch/
Mehr Informationen über die Mailingliste postfix-users