(Raspian)DHCP起動競合状態 - 起動時に多くのサービスが失敗する(約5〜10秒間DNSなし)

(Raspian)DHCP起動競合状態 - 起動時に多くのサービスが失敗する(約5〜10秒間DNSなし)

(編集:これはサフィックスにのみ適用されません。私が発見/デバッグした部分です。)

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

関連情報