Debian 解决方法 838871:在不阻止启动过程的情况下进行 dhcp 网络配置

Debian 解决方法 838871:在不阻止启动过程的情况下进行 dhcp 网络配置

有没有解决方法Debian 错误 #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 上,网络管理器的依赖链与sysvinit-core我的 init 系统冲突。

我想到的最后一个替代方案是不在接口(5)中配置 eth0。这使得所有启动块消失,但是,我需要ifup eth0在插入以太网电缆后手动启动。

还有更好的想法吗?

更新:为了解决 @sourcejedi 的引用,在 Debian 文档中,“allow-hotplug”被指定为“当内核从接口检测到热插拔事件时启动接口”Debian 网络.相关问题:/etc/network/interfaces 语法的详细解释?什么是接口的热插拔事件?

答案1

以前,“插入电缆时network-manager自动连接网络接口”的众所周知的方法是。 (注意原作者:-P)。 在 Debian 中仍然可用。我最近没有任何这方面的经验。ifupifplugdifplugd

首先,您将从中删除auto eth0or行。你仍然需要你的线路。 (此行取决于您的网络接口的名称,以及您是否要添加 ipv6 支持等)。allow hotplug eth0/etc/network/interfacesiface eth0 inet dhcp

要配置ifplugd为显示该接口,/etc/default/ifplugd请编辑设置INTERFACES=以包含网络接口的名称。或者,它建议您可以使用 value auto。我不知道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


[*] 学究:技术上ifplugd通过定期轮询链接状态来工作。所以它不一定依赖于“netlink”事件。指出了这种区别netplug,其中使用“netlink”事件。 netplug不具有与 相同的所有功能ifplugd

答案2

Debian 还有一个 ConnMan 软件包,它不受您提到的 NetworkManager 问题的影响。您可能会受益于检查常见问题“技巧和窍门”然而,Arch Wiki 页面上的部分。

在与您的系统不同的系统上,只要policykit-1有可用的地方,上游 ConnMan 就可以使用它来有选择地向非特权用户授予访问权限。然而,Debian ConnMan 软件包甚至没有动态链接到策略包库。所以我不确定如何控制非特权用户的访问。

如果你做过想要使用 NetworkManager,我认为 Debian 软件包应该可以修复,而无需强制您安装policykit-1守护程序,因此 libpam-systemd 等等。您只需使用 来控制您的接口sudo nmcli。例如,其他软件包udisks不依赖于policykit-1,它们只是推荐它。这可能不是一个非常常见的愿望,但如果其他人想要它,他们也可以向 Debian 提交“愿望清单”错误。

相关内容