(編集:これはサフィックスにのみ適用されません。私が発見/デバッグした部分です。)
postfixをインストールしましたが、起動してchrootを作成すると空のコピーが作成される/etc/resolv.conf
ため、ドメインを確認できません。
Resolve.confがいつ消去されるか、再入力されるのか、そしてpostfixがいつ起動されるのかを確認するために、さまざまなネットワークスクリプトにいくつかのロギングを追加しました...
起動時のログは次のとおりです。
Sun Mar 27 19:12:30 UTC 2016
EXECUTE: root + /sbin/resolvconf2 -d eth0 -f
Sun 27 Mar 19:12:31 UTC 2016
Postfix startup script
Sun Mar 27 19:12:37 UTC 2016
EXECUTE: root + /sbin/resolvconf2 -a eth0
設定を消去するためにresolvconfを呼び出してから再入力するまでに7秒の遅延があります。この間、/etc/resolv.confは事実上空です。 postfix(および他の多くのサービス)が開始されるのは、これらの呼び出しの間です。
resolvconfをクリアして再作成するまでの大きな間隔でサービスを開始するのは奇妙です。
これはPostfixがインストールされたRaspbianの新しいインストールであり、他の変更はありません。
編集する:システムログを見ると、実際にdhcpcdが起動して終了するまでの間にDNSがなく、失敗することがたくさんあります。同時に起動しようとしている他のサービスにバグがあると思いますか?
答え1
まあ、時間を無駄にした後、raspi-confでこれを見つけました...
だからこれはデザインの問題のようです。基本的な「クイックスタート」は、ランダムな欠陥を犠牲にして発生します。 Raspianの新規インストールでは、postfixがインストールされていない場合でも、システムログにDHCPプロセス中にさまざまなスクリプトで発生した多数のDNSエラーが含まれます。
したがって、回避策は、起動時にネットワークを待つスクリプトを生成する「遅い」起動に設定することです。編集するraspi-config
:次のように呼び出しをスクリプトできます。
sudo raspi-config nonint do_wait_for_network Slow
これにより、私が見つけたサフィックスの問題が解決され、通常は起動時にシステムログに記録される多くのDNS関連エラーも解決されます。
私は基本的な動作でこれがクレイジーだと思います。私はすでに投稿しましたGitHubに関するフィードバック。
答え2
この問題を処理する別の方法は、ネットワークが完全に起動した後にresolv.confを再コピーすることです。 systemdを使用して/ etc / systemd / systemのファイルに次の名前を付けてfixpostfix.service
実行することでこれを行うことができますsudo systemctl fixpostfix.service
。再起動するたびにネットワークが完全にオンラインになると、正しく入力されたresolv.confがコピーされます。
[Unit]
Description=Fix poorly copied resolv.conf for postfix
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/cp /etc/resolv.conf /var/spool/postfix/etc/resolv.conf
[Install]
WantedBy=multi-user.target
答え3
考慮すべきもう1つのことは、DHCP割り当てIPアドレスを使用してサーバーにサービスを割り当てるためのデフォルト設定です。
dhcpclient
基本的にIPアドレスを待ちません。ワークステーションではこれを変更することに興味がないかもしれませんが、サーバーでは優先順位の問題が発生します。
デフォルトでは、Soは-nwオプションで呼び出されますdhclient
。手動:
-nw IP アドレスを得るために待たずにすぐに (待たずに) デーモンになります。
この優先順位により、いくつかの問題が発生しました(例:DHCPシャットダウンフックから再起動した後でもBINDが正しく起動しない)。
eth0を次のように変更しました。
iface eth0 inet dhcp
到着
iface eth0 inet manual
pre-up /sbin/dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0