Debian 回避策 838871: ブートプロセスをブロックせずに dhcp ネットワークを構成する

Debian 回避策 838871: ブートプロセスをブロックせずに dhcp ネットワークを構成する

解決策はありますか?Debian のバグ #838871

Q:次の属性を使用してDebianでネットワーク設定をしたいと思います。

  • ケーブル接続時の自動ifupネットワークインタフェース
  • 接続ケーブルなしで長時間コンピュータの電源を入れても遅延はありません。
  • 初期化システムを切り替えない

これを行う標準的な方法は次のコードです/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を使用することですnetwork-manager。理想的にはNetwork Managerを使いたくありませんが、最後の手段として試してみました。しかし、Debian バスターでは、ネットワーク管理者の依存関係チェーンが私の初期sysvinit-core化システムと衝突します。

私が考えた最後の選択肢は、インターフェイス(5)でeth0を設定しないことでした。これにより、すべてのブートブロックが消えますが、ifup eth0イーサネットケーブルを接続した後に手動でブートする必要があります。

より良いアイデアがありますか?

アップデート:@sourcejediの引用符を解決するために、Debianドキュメントでは、「allow-hotplug」は、「カーネルがインターフェイスでホットプラグイベントを検出したときのインターフェイスの起動」として指定されます。Debian ネットワーク.関連質問:/etc/network/interfaces構文の詳細な説明は何ですか?そしてインターフェイスのホットプラグイベントとは何ですか?

答え1

以前は、network-manager「ケーブルを接続すると自動的にネットワークインタフェースを接続する」方法がよく知られていました。 (原作者注:-P)。 Debian ではまだ利用可能です。私は最近これについての経験はありません。ifupifplugdifplugd

auto eth0まず、または行を削除します。それでもラインが必要です。 (この行は、ネットワークインターフェイス名やipv6サポートを追加するかどうかによって異なります。)allow hotplug eth0/etc/network/interfacesiface eth0 inet dhcp

ifplugdこのインターフェイスを表示するように設定するには、ネットワークインターフェイスの名前を含めるように設定を/etc/default/ifplugd編集します。INTERFACES=またはvalueを使用できることを提案しますautoauto最近のシステムでどれだけうまく機能しているかわかりません:-).

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:ステートメント:netdev:ネットワークイベントでkobject ueventを生成しています。


[*] Pedant:ifplugdリンク状態を定期的にポーリングして技術的に機能します。したがって、必ずしも「netlink」イベントに頼る必要はありません。この違いを指摘しましたがnetplug、ここでする「netlink」イベントを使用してください。 netplugと同じ機能はすべて含まれていませんifplugd

答え2

Debian には、前述の NetworkManager 問題の影響を受けない ConnMan パッケージもあります。ご確認いただくと特典を受けることができます一般的な問題「ヒントとコツ」しかし、Arch Wikiページのセクションです。

あなたと他のシステムでは、policykit-1可能であればアップストリームConnManを使用して、権限のないユーザーに選択的にアクセス権を付与できます。ただし、Debian ConnManパッケージはポリシーパッケージライブラリに動的にリンクされていません。それで、権限のないユーザーのアクセスを制御する方法がわかりません。

もしあなたならしたNetworkManagerを使用したい場合は、Debianパッケージがデーモンを強制的にインストールしなくても問題を解決できるはずです。policykit-1したがって、libpam-systemdなどがあります。インターフェイスを制御するために使用できますsudo nmcli。たとえば、他のパッケージはudisksそれに依存せず、policykit-1単にお勧めします。これは非常に一般的な希望ではないかもしれませんが、他の人が望むなら、Debianに「ウィッシュリスト」のバグを提出することもできます。

関連情報