我试图利用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目标,但它们都不起作用。有什么办法让这件事正常运作吗?配置挂载应该是可选的,这样就可以在没有虚拟机的情况下启动虚拟机。
发布于 2018-11-30 00:19:48
我今天一直在努力解决这个问题,到目前为止,我已经找到了两种主要的解决方案:
@reboot上运行D3,但是似乎有太多的警告附加到它的方式。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找出哪一个是正确的目标。
https://unix.stackexchange.com/questions/464094
复制相似问题