Estou tentando aproveitar a capacidade do netplan de substituir configurações com arquivos lexicograficamente posteriores, mas quando esses arquivos vêm de outro ponto de montagem, a coisa toda falha.
Eu criei uma máquina virtual com algumas interfaces, e elas são configuradas com padrões sensatos usando arquivos como /etc/netplan/01-primary.yaml
e /etc/netplan/02-local.yaml
(que basicamente dizem "usar dhcp"). Essa parte funciona bem. No entanto, o que estou tentando alcançar é a capacidade de substituir as configurações usando uma montagem de unidade opcional .
Para isso, adicionei um ponto de montagem /etc/fstab
com o seguinte conteúdo:
/dev/vdb /mnt/config ext4 defaults,nofail,x-systemd.device-timeout=10,x-systemd.before=systemd-networkd.service 0 0
E então adicionei links simbólicos para /etc/netplan
esse ponto em novos arquivos de configuração, como ln -s /mnt/config/netplan/11-primary.yaml /etc/netplan/11-primary.yaml
.
Meu primeiro problema foi que, se a unidade não estiver presente e montada, todo o netplan gera falhas no momento da inicialização e fico sem nenhuma interface (emiti um relatório de bug sobre a falta de links simbólicos para o netplan). Consegui superar esse problema simplesmente criando a estrutura de diretórios necessária com arquivos vazios em /mnt/config
. No entanto, mesmo com a unidade presente, o netplan não vê esses arquivos no momento da inicialização. Se eu executar netplan generate
e netplan apply
após a inicialização, todas as interfaces serão configuradas corretamente.
Eu tentei muitos x-systemd.before
alvos diferentes, mas nenhum deles funciona. Existe alguma maneira de fazer isso funcionar corretamente? A montagem de configuração deve ser opcional para que a máquina virtual possa ser inicializada sem uma.
Eu tenho lutado com isso hoje e identifiquei duas soluções principais para isso até agora:
netplan apply
,@reboot
mas parecia haver muitas advertências anexadas a ele.netplan apply
após a montagem.Eu escolho a opção 2 e aqui está o arquivo da unidade systemd:
Salve-o abaixo
/etc/systemd/system/network-after-mount.service
e vásystemctl enable network-after-mount
. Reinicie para testar.No nosso caso, é um pendrive interno que é montado abaixo
/mnt/
contendo os arquivos extras de configuração do netplan. Se você montar sua unidade em outro caminho, a unidade de montagem systemd gerada será nomeada de maneira diferente. Você pode listar as unidades de montagem come identificar qual é o correto para segmentar.