Назад | Перейти на главную страницу

Предложение Postfix myhostname имеет в конце '.' Где ошибка? В dhclient, postfix или где?

После минимальной установки 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-сервер делает не отправить трейлинг . персонажи: