Debian Bug#838871 の回避策はありますか?
問題:次のプロパティを備えたDebianのネットワーク構成が必要です。
これを行う標準的な方法は、/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に表示される直前にブロックします。接続されていないeth0でdhcp応答を取得しようとするため、今回はdhclientがブロックされ、タイムアウトになるまで数回待機します。ログインプロンプトは、dhclientがタイムアウトした後にのみ表示されます。
グラフィカルDEを使用しているユーザーの場合、tty1にログインする必要がないため、DEが起動し、dhclientメッセージが表示されないため、これは問題ではない可能性があります。
別の回避策は、おそらくnetwork-manager
を使用することです。理想的には、networkmanagerを使用しないほうがいいですが、最後の手段として、それを試しました。ただし、Debianバスターでは、ネットワークマネージャーの依存関係チェーンがsysvinit-core
と競合します。これは、私のinitシステムです。
私の頭に浮かぶ最後の選択肢は、interfaces(5)でeth0を設定しないことです。これにより、すべてのブートブロックがなくなりますが、イーサネットケーブルを接続した後、手動でifup eth0
を実行する必要があります。
より良いアイデアはありますか?
更新:@sourcejediからの引用に対処するために、「allow-hotplug」は、 Debian networking 。関連する質問: / 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
によって提供されたことはありません:
リンク状態のチェックは常に行われるわけではなく、いずれの場合も起動時にのみ行われることに注意してください。 起動時にケーブルが接続されておらず、後でケーブルを接続した場合はサポートされませんでした。 - メッセージ#2
これと矛盾する情報源は間違っています。この機能が必要な場合は、「netlink」イベントを待機するデーモンを実行する必要があります。[*] Debian ifupdown
パッケージにはデーモンが含まれていません。 allow-hotplug
は、必要なnetlinkイベントを読み取らないudevデーモンに依存しています。
Udevデーモンは、udevの「hotplug」イベント(「uevent」)のみを読み取ります。イーサネットデバイスがリンクステータスの変更を検出しても、「uevent」はありません。これはudevadm monitor
を使用して確認できます。
Linuxカーネル開発者は、このための「uevent」を提供しないことを意図的に決定しました。参照: Re:Q:netdev:ネットワークイベントでkobject ueventを生成 。
[*]ペダント:技術的にはifplugd
は定期的にリンクステータスをポーリングすることで機能します。したがって、必ずしも「netlink」イベントに依存するわけではありません。この違いはnetplug
によって指摘されており、doesは「netlink」イベントを使用します。 netplug
には、ifplugd
と同じ機能はありません。
DebianにはConnMan用のパッケージもありますが、NetworkManagerについて述べた問題の影響を受けません。 一般的な問題 "Tips and Tricks" ただし、Arch Wikiページのセクション。
policykit-1
が使用可能なシステムとは異なるシステムでは、上流のConnManはそれを使用して、非特権ユーザーにアクセスを選択的に許可できます。ただし、Debian ConnManパッケージは、policykitライブラリに対して動的にリンクされることすらありません。したがって、権限のないユーザーによるアクセスがどのように制御されているのかわかりません。
あなたdidがNetworkManagerを使用したい場合、policykit-1
デーモンをインストールせずにDebianパッケージが機能するように修正できるように思えます、したがってlibpam-systemdなど。 Sudo nmcli
を使用してインターフェースを制御する必要があるだけです。その他のパッケージ、例えばudisks
はpolicykit-1
に依存せず、推奨するだけです。これはあまり一般的な欲求ではないかもしれませんが、他の誰かがそれを望んだ場合は、「ウィッシュリスト」のバグをDebianに提出することもできます。