首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从可选的挂载目标加载netplan脚本

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

Unix & Linux用户
提问于 2018-08-22 09:50:24
回答 1查看 512关注 0票数 1

我试图利用netplan的能力,用字典化后的文件覆盖配置,但是当这些文件来自另一个挂载点时,整个过程就失败了。

我创建了一个带有几个接口的虚拟机,这些接口使用/etc/netplan/01-primary.yaml/etc/netplan/02-local.yaml (基本上是“使用dhcp")之类的文件配置为合理的默认设置。那部分效果很好。然而,我试图实现的是使用可选驱动器挂载覆盖设置的能力。

为此,我向/etc/fstab添加了一个挂载点,内容如下:

代码语言:javascript
复制
/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目标,但它们都不起作用。有什么办法让这件事正常运作吗?配置挂载应该是可选的,这样就可以在没有虚拟机的情况下启动虚拟机。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-11-30 00:19:48

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

  1. 使用cron在@reboot上运行D3,但是似乎有太多的警告附加到它的方式。
  2. 创建一个系统单元,以便在挂载后运行netplan apply

我选择了选项2,下面是systemd单元文件:

代码语言:javascript
复制
[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挂载单元将被不同地命名。您可以列出挂载单元

代码语言:javascript
复制
systemctl list-units --type=mount

找出哪一个是正确的目标。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/464094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档