838*_*871 4 networking dhcp debian network-interface dhclient
Debian Bug #838871有解决方法吗?
问题:我想在 Debian 上进行具有以下属性的网络配置:
执行此操作的标准方法是以下代码段/etc/network/interfaces:
allow-hotplug eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)
但是,这会导致链接错误报告中描述的问题:当没有插入网络电缆时,引导过程阻塞 >1 分钟,并显示以下消息:
configuring network interfaces... ifup: waiting for lock on /run/network/ifstate.eth0
Run Code Online (Sandbox Code Playgroud)
此问题中给出的解决方法似乎正在更改allow-hotplug为auto:
auto eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)
这有效地使引导阻止消息消失,但是,系统现在在 tty1 显示登录提示之前阻止。这次 dhclient 阻塞是因为它试图在未连接的 eth0 上获取 dhcp 回复,并等待几次尝试超时。登录提示仅在 dhclient 超时后出现。
对于使用图形 DE 的用户,这可能不是问题,因为他们不需要登录 tty1,而是他们的 DE 启动并且他们永远不会看到 dhclient 消息。
另一种解决方法可能是使用network-manager. 理想情况下,我宁愿不使用 networkmanager,但作为最后的手段,我尝试了。但是,在 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或allow 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”。请参阅:Re: Q: netdev: generate kobject uevent on network events。
[*] Pedant:技术上ifplugd通过定期轮询链接状态来工作。所以它不一定依赖于“netlink”事件。指出了这种区别netplug,它确实使用了“netlink”事件。 netplug不具有与ifplugd.