Debian

Debian 解決方法 838871:dhcp 網路配置不阻塞啟動過程

  • May 23, 2019

Debian Bug #838871有解決方法嗎?

問題:我想在 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-hotplugauto

auto eth0
iface eth0 inet dhcp

這有效地使引導阻止消息消失,但是,系統現在在 tty1 上顯示登錄提示之前立即阻止。這次 dhclient 正在阻塞,因為它試圖在未連接的 eth0 上獲得 dhcp 回复,並等待多次嘗試超時。登錄提示僅在 dhclient 超時後出現。

對於具有圖形 DE 的使用者來說,這可能不是問題,因為他們不需要登錄 tty1,而是他們的 DE 引導並且他們永遠不會看到 dhclient 消息。

另一種解決方法可能是使用network-manager. 理想情況下,我寧願不使用網路管理器,但作為最後的手段,我嘗試了。但是,在 Debian buster 上,network-manager 的依賴鏈與sysvinit-core我的 init 系統衝突。

我想到的最後一個選擇是不在介面(5)中配置 eth0。這使得所有引導塊都消失了,但是,我需要ifup eth0在插入乙太網電纜後手動進行。

有更好的想法嗎?

更新:為了解決來自@sourcejedi 的引用,在Debian 網路下的 Debian 文件中,“allow-hotplug”被指定為“當核心檢測到來自介面的熱插拔事件時啟動介面” 。相關問題:/etc/network/interfaces 語法的詳細解釋?什麼是來自界面的熱插拔事件?

以前network-manager,眾所周知的“ifup插入電纜時自動連接網路介面”的方法是ifplugd. (注意原作者:-P)。 ifplugd在 Debian 中仍然可用。我最近沒有任何經驗。

首先,您將從中刪除auto eth0orallow hotplug eth0/etc/network/interfaces。你仍然需要你的 line iface eth0 inet dhcp。(這一行取決於您的網路介面的名稱,以及是否要添加 ipv6 支持等)。

要配置ifplugd以顯示介面,請編輯/etc/default/ifplugd設置INTERFACES=以包含網路介面的名稱。或者,它建議您可以使用 value auto。我不知道auto在任何最近的系統上效果如何:-)。

https://manpages.debian.org/buster/ifplugd/ifplugd.conf.5.en.html


此功能從未由以下人員提供allow-hotplug

請注意,連結狀態的檢查並不總是存在,並且無論如何只在啟動時進行。它從不支持在啟動時沒有連接電纜以及稍後插入電纜的情況。消息 #20

與此相矛盾的消息來源是錯誤的。如果你想要這個特性,你需要執行一個等待“netlink”事件的守護程序。

$$ * $$ Debianifupdown軟體包不包含任何守護程序。 allow-hotplug依賴於 udev 守護程序,它不會讀取必要的 netlink 事件。 udev 守護程序僅讀取 udev“熱插拔”事件(“uevent”)。當乙太網設備檢測到鏈路狀態變化時,沒有“uevent”。您可以使用udevadm monitor.

Linux 核心開發人員故意決定不為此提供“uevent”。請參閱:回复:問:netdev:在網路事件上生成 kobject uevent


$$ * $$Pedant:技術上ifplugd通過定期輪詢連結狀態來工作。所以它不一定依賴“netlink”事件。指出了這種區別netplug,它確實使用了“netlink”事件。 netplug不具有與ifplugd.

引用自:https://unix.stackexchange.com/questions/520629