linux-initrd: Add virtio modules to '%base-initrd-modules'.

Fixes a regression in installation tests, whereby 'guix system init'
would report that virtio modules are missing for the target devices.
In practice virtio modules were always available since 'base-initrd' was
always called with #:virtio? #t.  This commit simply moves them to
'%base-initrd-modules' so that 'guix system' knows they're available.

Reported by Danny Milosavljevic <dannym@scratchpost.org> at
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30629#112>.

* gnu/system/linux-initrd.scm (default-initrd-modules): Add virtio
modules.
(base-initrd): Remove #:virtio? and 'virtio-modules'.
* gnu/system/vm.scm (expression->derivation-in-linux-vm)
(system-qemu-image, virtualized-operating-system): Remove uses of
 #:virtio?.
* doc/guix.texi (Initial RAM Disk): Update 'base-initrd' doc.
master
Ludovic Courtès 2018-03-03 09:33:34 +01:00
parent f850e0da8e
commit eac026e5c8
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
3 changed files with 20 additions and 33 deletions

View File

@ -19893,18 +19893,18 @@ to it are lost.
@deffn {Monadic Procedure} base-initrd @var{file-systems} @ @deffn {Monadic Procedure} base-initrd @var{file-systems} @
[#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@ [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
[#:virtio? #t] [#:extra-modules '()] [#:linux-modules '()]
Return a monadic derivation that builds a generic initrd. @var{file-systems} is Return a monadic derivation that builds a generic initrd, with kernel
a list of file systems to be mounted by the initrd like for @code{raw-initrd}. modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
@var{mapped-devices}, @var{qemu-networking?} and @var{volatile-root?} mounted by the initrd, possibly in addition to the root file system specified
also behaves as in @code{raw-initrd}. on the kernel command line via @code{--root}. @var{mapped-devices} is a list of device
mappings to realize before @var{file-systems} are mounted.
When @var{virtio?} is true, load additional modules so that the @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
initrd can be used as a QEMU guest with para-virtualized I/O drivers.
The initrd is automatically populated with all the kernel modules necessary The initrd is automatically populated with all the kernel modules necessary
for @var{file-systems} and for the given options. However, additional kernel for @var{file-systems} and for the given options. Additional kernel
modules can be listed in @var{extra-modules}. They will be added to the initrd, and modules can be listed in @var{linux-modules}. They will be added to the initrd, and
loaded at boot time in the order in which they appear. loaded at boot time in the order in which they appear.
@end deffn @end deffn

View File

@ -280,6 +280,11 @@ FILE-SYSTEMS."
(define* (default-initrd-modules #:optional (system (%current-system))) (define* (default-initrd-modules #:optional (system (%current-system)))
"Return the list of modules included in the initrd by default." "Return the list of modules included in the initrd by default."
(define virtio-modules
;; Modules for Linux para-virtualized devices, for use in QEMU guests.
'("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
"virtio_console"))
`("ahci" ;for SATA controllers `("ahci" ;for SATA controllers
"usb-storage" "uas" ;for the installation image etc. "usb-storage" "uas" ;for the installation image etc.
"usbhid" "hid-generic" "hid-apple" ;keyboards during early boot "usbhid" "hid-generic" "hid-apple" ;keyboards during early boot
@ -288,7 +293,9 @@ FILE-SYSTEMS."
,@(if (string-match "^(x86_64|i[3-6]86)-" system) ,@(if (string-match "^(x86_64|i[3-6]86)-" system)
'("pata_acpi" "pata_atiixp" ;for ATA controllers '("pata_acpi" "pata_atiixp" ;for ATA controllers
"isci") ;for SAS controllers like Intel C602 "isci") ;for SAS controllers like Intel C602
'()))) '())
,@virtio-modules))
(define-syntax %base-initrd-modules (define-syntax %base-initrd-modules
;; This more closely matches our naming convention. ;; This more closely matches our naming convention.
@ -301,7 +308,6 @@ FILE-SYSTEMS."
(mapped-devices '()) (mapped-devices '())
qemu-networking? qemu-networking?
volatile-root? volatile-root?
(virtio? #t)
(extra-modules '()) ;deprecated (extra-modules '()) ;deprecated
(on-error 'debug)) (on-error 'debug))
"Return a monadic derivation that builds a generic initrd, with kernel "Return a monadic derivation that builds a generic initrd, with kernel
@ -312,25 +318,13 @@ mappings to realize before FILE-SYSTEMS are mounted.
QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd. QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd.
When VIRTIO? is true, load additional modules so the initrd can
be used as a QEMU guest with the root file system on a para-virtualized block
device.
The initrd is automatically populated with all the kernel modules necessary The initrd is automatically populated with all the kernel modules necessary
for FILE-SYSTEMS and for the given options. However, additional kernel for FILE-SYSTEMS and for the given options. Additional kernel
modules can be listed in EXTRA-MODULES. They will be added to the initrd, and modules can be listed in LINUX-MODULES. They will be added to the initrd, and
loaded at boot time in the order in which they appear." loaded at boot time in the order in which they appear."
(define virtio-modules
;; Modules for Linux para-virtualized devices, for use in QEMU guests.
'("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
"virtio_console"))
(define linux-modules* (define linux-modules*
;; Modules added to the initrd and loaded from the initrd. ;; Modules added to the initrd and loaded from the initrd.
`(,@linux-modules `(,@linux-modules
,@(if (or virtio? qemu-networking?)
virtio-modules
'())
,@(file-system-modules file-systems) ,@(file-system-modules file-systems)
,@(if volatile-root? ,@(if volatile-root?
'("overlay") '("overlay")

View File

@ -144,7 +144,6 @@ made available under the /xchg CIFS share."
(base-initrd %linux-vm-file-systems (base-initrd %linux-vm-file-systems
#:linux linux #:linux linux
#:linux-modules %base-initrd-modules #:linux-modules %base-initrd-modules
#:virtio? #t
#:qemu-networking? #t)))) #:qemu-networking? #t))))
(define builder (define builder
@ -513,12 +512,7 @@ of the GNU system as described by OS."
(let ((os (operating-system (inherit os) (let ((os (operating-system (inherit os)
;; Use an initrd with the whole QEMU shebang. ;; Assume we have an initrd with the whole QEMU shebang.
(initrd (lambda (file-systems . rest)
(apply (operating-system-initrd os)
file-systems
#:virtio? #t
rest)))
;; Force our own root file system. Refer to it by UUID so that ;; Force our own root file system. Refer to it by UUID so that
;; it works regardless of how the image is used ("qemu -hda", ;; it works regardless of how the image is used ("qemu -hda",
@ -615,7 +609,6 @@ environment with the store shared with the host. MAPPINGS is a list of
(apply (operating-system-initrd os) (apply (operating-system-initrd os)
file-systems file-systems
#:volatile-root? #t #:volatile-root? #t
#:virtio? #t
rest))) rest)))
;; Disable swap. ;; Disable swap.