systemd-modules-load no puede encontrar módulos
Dado un módulo del kernel, my-module.ko, he seguido los siguientes pasos para intentar cargar automáticamente el módulo en el arranque:
cp my-module.ko /lib/modules/$(uname -r)/my-module.ko echo my-module >> /etc/modules-load.d/my-module.conf # alt: echo my-module >> /etc/modules echo my-module.ko: >> /lib/modules/$(uname -r)/modules.dep
# alt: depmod
systemctl restart systemd-modules-load
# alt: reboot the machine
No importa qué variación intente, el error es siempre el mismo:
● systemd-modules-load.service - Load Kernel Modules
Loaded: loaded (/lib/systemd/system/systemd-modules-load.service; static; vendor preset: enabled)
Active: failed (Result: exit-code) since <date>; 9s ago
Docs: man:systemd-modules-load.service(8)
man:modules-load.d(5)
Process: 318 ExecStart=/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
Main PID: 318 (code=exited, status=1/FAILURE)
Feb 14 03:19:58 localhost systemd[1]: Starting Load Kernel Modules...
Feb 14 03:19:58 localhost systemd-modules-load[318]: Failed to find module 'my-module'
Feb 14 03:19:58 localhost systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
Feb 14 03:19:58 localhost systemd[1]: systemd-modules-load.service: Failed with result 'exit-code'.
Feb 14 03:19:58 localhost systemd[1]: Failed to start Load Kernel Modules.
Específicamente " No se pudo encontrar el módulo ". Puedo ejecutar modprobe my-moduley el módulo se descubre y se carga muy bien. Pasé por alto las fuentes de systemd y libkmod, y el directorio del módulo predeterminado es el /lib/modules/$(uname -r)esperado. Además, el nombre se compara con los distintos archivos modules.dep, modules.aliasetc., por lo que técnicamente el servicio debería poder encontrarlo.
¿Qué más puedo intentar para que esto funcione? Preferiría usar el servicio systemd-modules-load en lugar de escribir mi propio servicio que hace prácticamente lo mismo.
Especificaciones del sistema: ARMv7, Debian, Linux Kernel v4.9.37, Systemd v241-7 ~ deb10u2; Nota: depmod es un enlace sim para busybox
Respuestas
Tras una inspección más cercana desde dentro de libkmod, descubrí que modules.dep.binse estaba utilizando como el archivo de origen de referencia como corresponde a modules.dep.
ls -al /sbin | grep depmod cedido depmod -> /bin/busybox
Cambiando las cosas:
rm /sbin/depmod
apt install kmod
ln -s /usr/bin/kmod /sbin/depmod
depmod
¡Ahora todo está funcionando a la perfección! Resulta que la versión busybox de depmod no estaba actualizando correctamente el module.dep.binarchivo, de ahí que systemd " No pudo encontrar el módulo ".