Debian 解決方法 838871:dhcp 網路配置不阻塞啟動過程
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-hotplug
為auto
: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 eth0
orallow hotplug eth0
行/etc/network/interfaces
。你仍然需要你的 lineiface eth0 inet dhcp
。(這一行取決於您的網路介面的名稱,以及是否要添加 ipv6 支持等)。要配置
ifplugd
以顯示介面,請編輯/etc/default/ifplugd
設置INTERFACES=
以包含網路介面的名稱。或者,它建議您可以使用 valueauto
。我不知道auto
在任何最近的系統上效果如何:-)。https://manpages.debian.org/buster/ifplugd/ifplugd.conf.5.en.html
此功能從未由以下人員提供
allow-hotplug
:請注意,連結狀態的檢查並不總是存在,並且無論如何只在啟動時進行。它從不支持在啟動時沒有連接電纜以及稍後插入電纜的情況。–消息 #20
與此相矛盾的消息來源是錯誤的。如果你想要這個特性,你需要執行一個等待“netlink”事件的守護程序。
$$ * $$ Debian
ifupdown
軟體包不包含任何守護程序。allow-hotplug
依賴於 udev 守護程序,它不會讀取必要的 netlink 事件。 udev 守護程序僅讀取 udev“熱插拔”事件(“uevent”)。當乙太網設備檢測到鏈路狀態變化時,沒有“uevent”。您可以使用udevadm monitor
.Linux 核心開發人員故意決定不為此提供“uevent”。請參閱:回复:問:netdev:在網路事件上生成 kobject uevent。
$$ * $$Pedant:技術上
ifplugd
通過定期輪詢連結狀態來工作。所以它不一定依賴“netlink”事件。指出了這種區別netplug
,它確實使用了“netlink”事件。netplug
不具有與ifplugd
.