diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 291dd63256..5e08927af3 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -1727,6 +1727,17 @@ (define (wait-for-udevd) (setenv "EUDEV_RULES_DIRECTORY" #$(file-append rules "/lib/udev/rules.d")) + (let* ((kernel-release + (utsname:release (uname))) + (linux-module-directory + (getenv "LINUX_MODULE_DIRECTORY")) + (directory + (string-append linux-module-directory "/" + kernel-release)) + (old-umask (umask #o022))) + (make-static-device-nodes directory) + (umask old-umask)) + (let ((pid (primitive-fork))) (case pid ((0) @@ -1750,7 +1761,10 @@ (define (wait-for-udevd) ;; When halting the system, 'udev' is actually killed by ;; 'user-processes', i.e., before its own 'stop' method was called. ;; Thus, make sure it is not respawned. - (respawn? #f))))))) + (respawn? #f) + ;; We need additional modules. + (modules `((gnu build linux-boot) + ,@%default-modules)))))))) (define udev-service-type (service-type (name 'udev)