Systemd

從可選掛載目標載入 netplan 腳本

  • January 13, 2019

我正在嘗試利用 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. 使用 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.servicesystemctl enable network-after-mount. 重啟測試。

在我們的例子中,它是一個內部 USB 記憶棒,它安裝在/mnt/包含額外的 netplan 配置文件的下面。如果您將驅動器安裝在另一個路徑下,生成的 systemd 安裝單元將被命名為不同的名稱。您可以列出安裝單位

systemctl list-units --type=mount

並確定哪個是正確的目標。

引用自:https://unix.stackexchange.com/questions/464094