Em um dispositivo embarcado baseado em Yocto Linux, meu rootfs é RO, enquanto tenho uma partição adicional para dados RW. Agora quero montar automaticamente na inicialização uma sobreposição em /etc armazenada em uma partição diferente. Aqui está meu fstab:
/dev/mmcblk0p6 /data_local ext4 defaults,sync,noexec,rw 0 2
[...]
overlay /etc overlay defaults,lowerdir=/etc,upperdir=/data_local/overlayfs/upper/etc,workdir=/data_local/overlayfs/workdir,X-mount.mkdir,x-systemd.requires=/data_local,x-systemd.before=local-fs.target,x-systemd.before=systemd-networkd 0 0
No entanto, isso falha porque os diretórios Upperdir e Workdir estão faltando na primeira inicialização. Como posso permitir que fstab ou systemd.mount criem automaticamente esses diretórios?
Acabei usando o recurso overlayfs-etc.bbclass do Yocto, que está disponível desde o Yocto 4.0. Documentação em: https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-overlayfs-etc
O bbclass corrige o processo init em /sbin/init para criar as pastas em tempo de execução antes de montar a sobreposição. Veja: https://git.yoctoproject.org/poky/plain/meta/files/overlayfs-etc-preinit.sh.in
Adicioná-lo à sua imagem é muito simples:
Adicione ao seu machine.conf:
Adicione à sua imagem:
É claro que você deve certificar-se de que sua mídia de inicialização já tenha uma partição extra montada para leitura e gravação disponível (na imagem exibida no cartão SD) - no meu caso mmcblk0p6.