事实证明,我正在尝试创建一个便携式发行版,同时为任何类型的硬件故障做好准备。
我正在创建(或恢复)一个 Debian 发行版多带(或来自我的备份)并要求生成的磁盘可在新的(大部分兼容)硬件上启动,包括VirtualBox 机器。
正如我之前问过,“便携式发行版”所需的少数事情之一是处理网络接口的名称。
例如,在真机上,第一个以太网设备名为enp2s0
,在 VirtualBox 中,它名为enp0s3
。我应该如何/etc/network/interfaces
在启动时生成文件?
是否有一种更通用的方法来重新映射网络接口名称(可能通过符号链接)并让每个应用程序使用这些名称(角色名称),而无需知道底层硬件的真实网络接口名称?
答案1
有几种方法可以解决这个问题。
最熟悉的方法可能是通过使用 boot 选项来禁用新的网络接口命名方案net.ifnames=0
,或者通过使用 覆盖/lib/systemd/network/99-default.link
,ln -s /dev/null /etc/systemd/network/99-default.link
或者通过屏蔽实际实现新样式名称的 udev 规则文件ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
...参见Debian 维基有关恢复经典命名方案的各种方法的更多信息。然后你可以重写你的/etc/network/interfaces
以仅使用eth0
.
最灵活的方法可能是停止使用静态/etc/network/interfaces
并切换到 NetworkManager。如果没有进一步配置,它将自动默认在具有活动链路的网络接口上使用 DHCP。即使您有多个 NIC 但实际插入的只有一个(不一定是第一个),这也会自动处理这种情况。
或者您可以做自己的事情,通过编写一个自定义脚本来读取ip link show
输出(或 中的链接/sys/class/network
)并重写/etc/network/interfaces
(或任何您实际的网络配置文件)以适应。然后您可以使用Wants=network-pre.target
、Before=network-pre.target
和After=module-init-tools.service
可能将脚本添加为 systemd 服务DefaultDependencies=no
。这应该允许脚本作为早期系统设置的一部分运行,在加载所有模块之后但在网络配置开始之前。