web-dev-qa-db-ja.com

Debianの回避策838871:ブートプロセスをブロックしないdhcpネットワーク構成

Debian Bug#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-hotplugautoに変更しているようです:

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構文の詳細な説明 および からのホットプラグイベントとはインターフェース?

3
838871

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と同じ機能はありません。

3
sourcejedi

DebianにはConnMan用のパッケージもありますが、NetworkManagerについて述べた問題の影響を受けません。 一般的な問題 "Tips and Tricks" ただし、Arch Wikiページのセクション。

policykit-1が使用可能なシステムとは異なるシステムでは、上流のConnManはそれを使用して、非特権ユーザーにアクセスを選択的に許可できます。ただし、Debian ConnManパッケージは、policykitライブラリに対して動的にリンクされることすらありません。したがって、権限のないユーザーによるアクセスがどのように制御されているのかわかりません。

あなたdidがNetworkManagerを使用したい場合、policykit-1デーモンをインストールせずにDebianパッケージが機能するように修正できるように思えます、したがってlibpam-systemdなど。 Sudo nmcliを使用してインターフェースを制御する必要があるだけです。その他のパッケージ、例えばudiskspolicykit-1に依存せず、推奨するだけです。これはあまり一般的な欲求ではないかもしれませんが、他の誰かがそれを望んだ場合は、「ウィッシュリスト」のバグをDebianに提出することもできます。

0
sourcejedi