Debianバグ#838871の回避策はありますか?
問題:次のプロパティを持つDebianのネットワーク構成が必要です:
- ケーブルが接続されている場合、ネットワークインターフェイスを自動的にifupします
- 起動時にケーブルが接続されていない場合、長時間ブロックせずに起動します
- initシステムを切り替えない
これを行う標準的な方法は、/etc/network/interfaces
にある次のスニペットです。 :
allow-hotplug eth0
iface eth0 inet dhcp
ただし、これにより、リンクされたバグレポートに記載されている問題が発生します。ネットワークケーブルが接続されていない場合、ブートプロセスが1分以上ブロックされ、次のメッセージが表示されます。
configuring network interfaces... ifup: waiting for lock on /run/network/ifstate.eth0
この質問で与えられた回避策は、allow-hotplug
を変更しているようです auto
:
auto eth0
iface eth0 inet dhcp
これにより、ブートブロックメッセージが事実上消えますが、ログインプロンプトがtty1に表示される直前にシステムがブロックするようになりました。今回、dhclientは、接続されていないeth0でdhcp応答を取得しようとし、タイムアウトの試行を数回待機するため、ブロックしています。ログインプロンプトは、dhclientがタイムアウトした後にのみ表示されます。
グラフィカルDEを使用しているユーザーの場合、これは問題ではない可能性があります。tty1にログインする必要がなく、代わりにDEが起動し、dhclientメッセージが表示されないためです。
別の回避策は、おそらくnetwork-manager
を使用することです。 。理想的には、networkmanagerを使用したくないのですが、最後の手段として、それを試しました。ただし、Debianバスターでは、ネットワークマネージャーの依存関係チェーンがsysvinit-core
と競合します 、これは私のinitシステムです。
私の頭に浮かぶ最後の選択肢は、interfaces(5)でeth0を構成しないことです。これにより、すべてのブートブロックがなくなりますが、手動でifup eth0
する必要があります。 イーサネットケーブルを接続した後。
より良いアイデアはありますか?
更新:@sourcejediからの引用に対処するために、DebianネットワークのDebianドキュメントで「カーネルがインターフェースからホットプラグイベントを検出したときにインターフェースを開始する」に「allow-hotplug」が指定されています。関連する質問:/ etc / network / interfaces構文の詳細な説明はありますか?インターフェースからのホットプラグイベントとは何ですか?
承認された回答:
network-manager
の前 、「自動的にifup
するためのよく知られた方法 ケーブルが接続されているときのネットワークインターフェイス」はifplugd
でした 。 (元の作者に注意してください:-P)。 ifplugd
Debianでも引き続き利用できます。最近の経験はありません。
まず、auto eth0
を削除します またはallow hotplug eth0
/etc/network/interfaces
からの行 。 iface eth0 inet dhcp
という行が引き続き必要です。 。 (この行は、ネットワークインターフェイスの名前、およびipv6サポートを追加するかどうかなどによって異なります)。
ifplugd
を構成するには インターフェイスを表示するには、/etc/default/ifplugd
を編集します INTERFACES=
を設定するには ネットワークインターフェイスの名前を含めます。または、値auto
を使用できることを示しています。 。 auto
がどれだけうまくいくかわかりません 最近のシステムで動作します:-)。
https://manpages.debian.org/buster/ifplugd/ifplugd.conf.5.en.html
この機能は、allow-hotplug
によって提供されることはありませんでした :
リンク状態のチェックは常に行われているわけではなく、いずれの場合も起動時にのみ行われることに注意してください。 起動時にケーブルが接続されておらず、後でケーブルを接続した場合はサポートされませんでした。 —メッセージ#20
これと矛盾する情報源は間違っています。この機能が必要な場合は、「netlink」イベントを待機するデーモンを実行する必要があります。[*] Debian ifupdown
パッケージにはデーモンは含まれていません。 allow-hotplug
必要なnetlinkイベントを読み取らないudevデーモンに依存しています。
udevデーモンは、udevの「hotplug」イベント(「uevent」)のみを読み取ります。イーサネットデバイスがリンクステータスの変更を検出した場合、「uevent」は発生しません。これは、udevadm monitor
を使用して確認できます 。
Linuxカーネルの開発者は、このための「uevent」を提供しないことを意図的に決定しました。参照:Re:Q:netdev:ネットワークイベントでkobjectueventを生成します。
[*]衒学者:技術的にはifplugd
リンクステータスを定期的にポーリングすることで機能します。したがって、必ずしも「netlink」イベントに依存するわけではありません。この違いは、netplug
によって指摘されています。 、実行 「netlink」イベントを使用します。 netplug
ifplugd
と同じ機能がすべて備わっているわけではありません 。