diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm index 4fe673cca..8cae4fb63 100644 --- a/gnu/build/linux-modules.scm +++ b/gnu/build/linux-modules.scm @@ -40,6 +40,7 @@ current-module-debugging-port device-module-aliases + current-alias-file known-module-aliases matching-modules)) diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 1eb5f5130..16a8c4375 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -353,17 +353,27 @@ loaded at boot time in the order in which they appear." (define (check-device-initrd-modules device linux-modules location) "Raise an error if DEVICE needs modules beyond LINUX-MODULES to operate. DEVICE must be a \"/dev\" file name." - (let ((modules (delete-duplicates - (append-map matching-modules - (device-module-aliases device))))) - (unless (every (cute member <> linux-modules) modules) - (raise (condition - (&message - (message (format #f (G_ "you may need these modules \ + (define aliases + ;; Attempt to load 'modules.alias' from the current kernel, assuming we're + ;; on GuixSD, and assuming that corresponds to the kernel we'll be + ;; installing. Skip the whole thing if that file cannot be read. + (catch 'system-error + (lambda () + (known-module-aliases)) + (const #f))) + + (when aliases + (let ((modules (delete-duplicates + (append-map (cut matching-modules <> aliases) + (device-module-aliases device))))) + (unless (every (cute member <> linux-modules) modules) + (raise (condition + (&message + (message (format #f (G_ "you may need these modules \ in the initrd for ~a:~{ ~a~}") - device modules))) - (&fix-hint - (hint (format #f (G_ "Try adding them to the + device modules))) + (&fix-hint + (hint (format #f (G_ "Try adding them to the @code{initrd-modules} field of your @code{operating-system} declaration, along these lines: @@ -373,8 +383,8 @@ these lines: (initrd-modules (append (list~{ ~s~}) %base-initrd-modules))) @end example\n") - modules))) - (&error-location - (location (source-properties->location location)))))))) + modules))) + (&error-location + (location (source-properties->location location))))))))) ;;; linux-initrd.scm ends here