summaryrefslogtreecommitdiff
path: root/gnu/system
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-07-29 18:31:42 +0200
committerLudovic Courtès <ludo@gnu.org>2018-07-29 18:50:28 +0200
commitfcd068e984078ab74c6842af2525bf88096cd262 (patch)
tree01a18470cb88a13a6c9d2dbc33cd098dfa93c083 /gnu/system
parentd2a1cf45f74f4be67bd51068fc531a1b8ae54536 (diff)
linux-initrd: Try several file names when looking up modules.
Fixes <https://bugs.gnu.org/31714>. Reported by Tonton <tonton@riseup.net>. * gnu/build/linux-modules.scm (find-module-file): New procedure. * gnu/system/linux-initrd.scm (flat-linux-module-directory)[build-exp]: Remove 'lookup' procedure and use 'find-module-file' instead. * gnu/system/mapped-devices.scm (check-device-initrd-modules): Add comment.
Diffstat (limited to 'gnu/system')
-rw-r--r--gnu/system/linux-initrd.scm26
-rw-r--r--gnu/system/mapped-devices.scm4
2 files changed, 9 insertions, 21 deletions
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index d73ebfd8d35..a5a111908fd 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -108,34 +108,18 @@ the derivations referenced by EXP are automatically copied to the initrd."
108MODULES and taken from LINUX." 108MODULES and taken from LINUX."
109 (define build-exp 109 (define build-exp
110 (with-imported-modules (source-module-closure 110 (with-imported-modules (source-module-closure
111 '((guix build utils) 111 '((gnu build linux-modules)))
112 (gnu build linux-modules)))
113 #~(begin 112 #~(begin
114 (use-modules (ice-9 match) (ice-9 regex) 113 (use-modules (gnu build linux-modules)
115 (srfi srfi-1) 114 (srfi srfi-1)
116 (guix build utils) 115 (srfi srfi-26))
117 (gnu build linux-modules))
118
119 (define (string->regexp str)
120 ;; Return a regexp that matches STR exactly.
121 (string-append "^" (regexp-quote str) "$"))
122 116
123 (define module-dir 117 (define module-dir
124 (string-append #$linux "/lib/modules")) 118 (string-append #$linux "/lib/modules"))
125 119
126 (define (lookup module)
127 (let ((name (ensure-dot-ko module)))
128 (match (find-files module-dir (string->regexp name))
129 ((file)
130 file)
131 (()
132 (error "module not found" name module-dir))
133 ((_ ...)
134 (error "several modules by that name"
135 name module-dir)))))
136
137 (define modules 120 (define modules
138 (let ((modules (map lookup '#$modules))) 121 (let* ((lookup (cut find-module-file module-dir <>))
122 (modules (map lookup '#$modules)))
139 (append modules 123 (append modules
140 (recursive-module-dependencies modules 124 (recursive-module-dependencies modules
141 #:lookup-module lookup)))) 125 #:lookup-module lookup))))
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index aec49322e7c..384b1aaf7df 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -137,6 +137,10 @@ DEVICE must be a \"/dev\" file name."
137 ;; LINUX-MODULES is file names without '.ko', so normalize them. 137 ;; LINUX-MODULES is file names without '.ko', so normalize them.
138 (provided (map file-name->module-name linux-modules))) 138 (provided (map file-name->module-name linux-modules)))
139 (unless (every (cut member <> provided) modules) 139 (unless (every (cut member <> provided) modules)
140 ;; Note: What we suggest here is a list of module names (e.g.,
141 ;; "usb_storage"), not file names (e.g., "usb-storage.ko"). This is
142 ;; OK because we have machinery that accepts both the hyphen and the
143 ;; underscore version.
140 (raise (condition 144 (raise (condition
141 (&message 145 (&message
142 (message (format #f (G_ "you may need these modules \ 146 (message (format #f (G_ "you may need these modules \