從可選掛載目標載入 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 generate
並netplan apply
在啟動後,所有介面都會正確配置。我嘗試了許多不同
x-systemd.before
的目標,但沒有一個有效。有沒有辦法讓它正常工作?配置掛載應該是可選的,以便可以在沒有配置的情況下啟動虛擬機。
我今天一直在努力解決這個問題,到目前為止我已經確定了兩個主要的解決方案:
- 使用 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
並確定哪個是正確的目標。