我试图利用 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
目标,但没有一个有效。有什么方法可以让它正常工作吗?配置挂载应该是可选的,以便虚拟机可以在没有配置挂载的情况下启动。
答案1
今天我一直在努力解决这个问题,到目前为止我已经确定了两个主要解决方案:
- 使用cron来运行
netplan apply
但@reboot
似乎有办法太多的警告附于其上。 - 创建一个 systemd 单元以
netplan apply
在安装后运行。
我选择选项 2,这是 systemd 单元文件:
[Unit]
Description=Execute netplan apply after mount
After=multi-user.target mnt.mount
[Service]
Type=oneshot
ExecStart=/bin/sh -c "netplan apply"
[Install]
WantedBy=multi-user.target
将其保存在 下/etc/systemd/system/network-after-mount.service
并继续systemctl enable network-after-mount
。重新启动即可测试。
在我们的例子中,它是一个内部 USB 记忆棒,安装在/mnt/
包含额外 netplan 配置文件的下方。如果将驱动器安装在另一个路径下,生成的 systemd 安装单元将以不同的名称命名。您可以列出安装单位
systemctl list-units --type=mount
并确定哪一个是正确的目标。