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