从可选的挂载目标加载 netplan 脚本

从可选的挂载目标加载 netplan 脚本

我试图利用 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 generatenetplan apply启动后,所有接口都会正确配置。

我尝试了很多不同的x-systemd.before目标,但没有一个有效。有什么方法可以让它正常工作吗?配置挂载应该是可选的,以便虚拟机可以在没有配置挂载的情况下启动。

答案1

今天我一直在努力解决这个问题,到目前为止我已经确定了两个主要解决方案:

  1. 使用cron来运行netplan apply@reboot似乎有办法太多的警告附于其上。
  2. 创建一个 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

并确定哪一个是正确的目标。

相关内容