После минимальной установки debian stretch с использованием (debian-9.8.0-amd64-netinst.iso), где имя хоста оставлено по умолчанию debian
и домен был оставлен пустым, установка постфикса завершилась неудачно, поскольку обнаруженное полное имя хоста содержит завершающий .
персонаж.
Я думаю, что это dhclient
это спасает resolv.conf
файл при минимальной установке без Network Manager. Он имеет конечный .
в предложении поиска, даже если DHCP-сервер их не отправляет (см. ниже).
Если hostname --fqdn
пусто, постфикс заглядывает resolv.conf
с участием sed
находит и пытается использовать полное доменное имя с завершающим .
что приводит к сбою установки postfix (см. ниже).
Где ошибка? В postfix.postinst
, в dhclient
, с моего понимания или еще где?
На самом деле это не удается при установке postfix из файла Docker, но такое же поведение наблюдается при минимальной установке debian, поэтому на самом деле это не связано с Docker, за исключением того факта, что вы не можете контролировать полное доменное имя "host" / контейнер во время docker build
поэтому мы сталкиваемся с этой проблемой. Обходной путь, конечно, исправить resolv.conf
перед установкой postfix, но это в значительной степени хитрость. (Если у вас нет идеи получше?)
/ etc / hosts:
127.0.0.1 localhost
127.0.1.1 debian
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/etc/resolv.conf
domain capmon.lan
search capmon.lan. capmon.
nameserver 10.10.10.251
Сейчас работает apt-get install postfix
:
<snip>
setting myhostname: debian.capmon.lan.
setting alias maps
setting alias database
mailname is not a fully qualified domain name. Not changing /etc/mailname.
setting destinations: $myhostname, debian, localhost.localdomain, , localhost
setting relayhost:
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: all
setting inet_protocols: all
Postfix (main.cf) is now set up with a default configuration. If you need to
make changes, edit /etc/postfix/main.cf (and others) as needed. To view
Postfix configuration values, see postconf(1).
After modifying main.cf, be sure to run 'service postfix reload'.
Running newaliases
newaliases: warning: valid_hostname: misplaced delimiter: debian.capmon.lan.
newaliases: fatal: file /etc/postfix/main.cf: parameter myhostname: bad parameter value: debian.capmon.lan.
dpkg: error processing package postfix (--configure):
subprocess installed post-installation script returned error exit status 75
Processing triggers for systemd (232-25+deb9u12) ...
Processing triggers for rsyslog (8.24.0-1) ...
Errors were encountered while processing:
postfix
E: Sub-process /usr/bin/dpkg returned an error code (1)
И это потому, что postfix myhostname
имеет конечный .
:
# grep ^myhostname /etc/postfix/main.cf
myhostname = debian.capmon.lan.
И это потому что /var/lib/dpkg/info/postfix.postinst
имеет:
# The resolver uses the last one found, and ignores the rest
mydom=$(sed -n 's/^search[[:space:]]*\([^[:space:]]*\).*/\1/p;s/^domain[[:space:]]*\([^[:space:]]*\).*/\1/p' /etc/resolv.conf | tail -1)
myhostname="$myhostname${mydom:+.$mydom}"
и конечно же:
# sed -n 's/^search[[:space:]]*\([^[:space:]]*\).*/\1/p' /etc/resolv.conf
capmon.lan.
Я проверил (также в переданных байтах), и DHCP-сервер делает не отправить трейлинг .
персонажи: