我正在尝试利用 netplan 的能力来用字典顺序上的文件覆盖配置,但是当这些文件来自另一个挂载点时,整个事情都会失败。
我创建了一个带有几个接口的虚拟机,这些接口使用/etc/netplan/01-primary.yaml
和/etc/netplan/02-local.yaml
(基本上说“使用 dhcp”)之类的文件配置了合理的默认值。那部分效果很好。但是,我想要实现的是使用可选驱动器安装覆盖设置的能力。
为此,我添加了一个挂载点,/etc/fstab
其中包含以下内容:
/dev/vdb /mnt/config ext4 defaults,nofail,x-systemd.device-timeout=10,x-systemd.before=systemd-networkd.service 0 0
然后我添加/etc/netplan
了指向新配置文件的符号链接,例如ln -s /mnt/config/netplan/11-primary.yaml /etc/netplan/11-primary.yaml
.
我的第一个问题是,如果驱动器不存在且未安装,则整个 netplan 生成在引导时会失败,并且我没有任何接口(我已发布有关缺少指向 netplan的符号链接的错误报告)。我设法通过简单地创建带有空文件的必要目录结构来克服这个问题/mnt/config
。但是,即使存在驱动器,netplan 在引导时也不会看到这些文件。如果我运行netplan generate
并netplan apply
在启动后,所有接口都会正确配置。
我尝试了许多不同x-systemd.before
的目标,但没有一个有效。有没有办法让它正常工作?配置挂载应该是可选的,以便可以在没有配置的情况下启动虚拟机。
我今天一直在努力解决这个问题,到目前为止我已经确定了两个主要的解决方案:
netplan apply
,@reboot
但似乎附加了太多警告。netplan apply
在挂载后运行。我选择选项 2,这是 systemd 单元文件:
将其保存
/etc/systemd/system/network-after-mount.service
在systemctl enable network-after-mount
. 重启测试。在我们的例子中,它是一个内部 USB 记忆棒,它被安装在
/mnt/
包含额外的 netplan 配置文件的下面。如果您将驱动器安装在另一个路径下,生成的 systemd 安装单元将被命名为不同的名称。您可以列出安装单位并确定哪个是正确的目标。