Subject: bug#31714: Cannot use usb-storage initrd module.

From: [email-masked] (Ludovic Courtès)
Date: Sun, 29 Jul 2018 18:53:21 +0200

Hello,

Tonton <[email-masked]> skribis:

> My config contained:
>
>  (initrd (lambda (file-systems . rest)
> 	   ;; Add a kernel module for RAID-0 (aka. "stripe")
>            ;; and RAID-1 (aka. "mirror").
> 	   (apply base-initrd file-systems
> 		  #:extra-modules '("raid0" "raid1")
> 		  rest)))
>
> And I got an error from guix system reconfigure/build:
>
> <unknown location>: error: you may need these modules in the initrd
> for /dev/sdg2: uas usb_storage
> hint: Try adding them to the `initrd-modules' field of your
> `operating-system' declaration, (initrd-modules (append (list "uas"
> "usb_storage")

[...]

> This works if I use --skip-checks. But with checks it gives me the same error
> as above, changing the initrd-modules line to:
>
>  (initrd-modules (append (list "uas" "usb_storage" "raid0" "raid1")
>
> Gives the following error:
>
> The following derivations will be built:
>    /gnu/store/p5sash3cqywp5kmb9dwh8kbxy0rrdmc0-system.drv
>    /gnu/store/g7pfwc7386x1bxf5pdv5nh1xz6ywxgxm-grub.cfg.drv
>    /gnu/store/w57aw36wpc0388aa1frkj7h7qh8xac6z-parameters.drv
>    /gnu/store/kh9v5z295kz4p79q3kancdv8d86n3cxr-linux-modules.drv
>    /gnu/store/pbrj245mgv9zcy3shid348n8qdpv468v-init.drv
>    /gnu/store/mvl7lb92g39d0qw08r2l2qiysvdf0sgs-raw-initrd.drv
> Backtrace:
>            6 (primitive-load "/gnu/store/hj17134gdpixdpif8nljwyh31k1?")
> In ice-9/eval.scm:
>     619:8  5 (_ #f)
>    626:19  4 (_ #<directory (guile-user) 7cc140>)
>    293:34  3 (_ #<directory (guile-user) 7cc140>)
> In srfi/srfi-1.scm:
>    592:29  2 (map1 _)
>    592:17  1 (map1 ("usb_storage" "raid0" "raid1" "ahci" "usb-sto?" ?))
> In unknown file:
>            0 (scm-error misc-error #f "~A ~S ~S" ("module not fo?" ?) ?)
>
> ERROR: In procedure scm-error:
> module not found "usb_storage.ko"
> "/gnu/store/khxmq6p1470171537z8agikiqmi469jr-linux-libre-4.17/lib/modules"
> builder for `/gnu/store/kh9v5z295kz4p79q3kancdv8d86n3cxr-linux-modules.drv'

The problem was that the hint would specify “usb_storage”, which is the
correct module name but not the right *file* name (it’s “usb-storage”,
notice the hyphen.)

This is fixed in commit fcd068e984078ab74c6842af2525bf88096cd262, which
takes a sledgehammer approach: it tries hyphen and underscore file
names, such that ‘initrd-modules’ can contain either “usb_storage” or
“usb-storage”.

Thanks,
Ludo’.