systemd, kmod e os device nodes estáticos

Apesar da maioria dos módulos criarem seus device nodes automaticamente (devtmpfs), alguns ainda precisam ser criados manualmente. Até o systemd 205, era o systemd-udevd que lia o arquivo /lib/modules/$(uname -r)/modules.devname, gerado pelos pacotes das distribuições com o comando depmod, e criava-os.

Na versão 14, o kmod, sucessor das ferramentas da suíte module-init-tools, ganhou o comando static-nodes, que é capaz de exportar a informação no formato do systemd-tmpfiles.

Então, a partir do systemd 206, o novo serviço kmod-static-nodes.service encarrega-se de rodar bem cedo no boot, antes de systemd-tmpfiles-setup-dev.service, para criar /run/tmpfiles.d/kmod.conf (/run é volátil) com a lista dos device nodes coletada de modules.devname, que é usada pelo segundo serviço.

kmod-static-nodes.service tem algumas restrições para rodar: se não for possível criar device nodes (ConditionCapability), o serviço não é iniciado, o que evita erros rodando em containers; usando o especificador %v (systemd ≥ 206), se o arquivo modules.devname não existir (ConditionPathExists), o serviço também não é executado.

A primeira restrição foi adicionada no systemd 207. A segunda no 208. Na versão 15, o kmod já havia sido modificado para gerar um aviso ao invés de erro no caso do arquivo não existir (incomum, mas possível).

No kmod, depmod, insmod, lsmod, modinfo, modprobe, rmmod, são links para o binário /usr/bin/kmod. De acordo com o link pelo qual for chamado, o programa se comporta como as ferramentas antigas.

Comentários