细节:

细节:

在使用(debian-9.8.0-amd64-netinst.iso)进行最小 debian stretch 安装后,其中主机名保留为默认值debian而域保留为空,安装 postfix 会失败,因为检测到的完全限定主机名包含尾随.字符。

我认为它是在没有网络管理器的最小安装上dhclient保存文件。即使 DHCP 服务器没有发送任何字符(见下文),它的搜索子句中也有尾随字符。resolv.conf.

如果hostname --fqdn为空,postfix 会查找resolv.confsed尝试使用带有尾随的 FQDN,.这会导致 postfix 安装失败(见下文)。

错误在哪里?在postfix.postinst,在dhclient,按照我的理解还是在其他地方?

实际上,从 Dockerfile 安装 postfix 时会失败,但在极简 Debian 安装中也会出现同样的行为,因此它与 Docker 无关,除了您无法控制“主机”/容器的 FQDN,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)

这是因为后缀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 服务器确实不是发送尾随.字符:

DHCP 服务器的响应

答案1

问题出在/var/lib/dpkg/info/postfix.postinst

考虑 Debian 版本及其各自的后缀版本,以及所有失败安装后脚本中出现相同的错误 75:

  • 拉紧有 postfix 3.1.15-0+deb9u1(不再支持,上次发布于2020 年 2 月
  • 破坏者有后缀 3.4.14-0+deb10u1
  • 靶心有后缀 3.5.6-1+b1

它们都具有以下共同的功能myfqdn

mydom=$(sed -n 's/^search[[:space:]]*\([^[:space:]]*\).*/\1/p;s/^domain[[:space:]]*\([^[:space:]]*\).*/\1/p' /etc/resolv.conf | tail -1)
myhostname="$myhostname${mydom:+.$mydom}"

另一方面

不同之处在于myfqdn

#                                    

相关内容