~ruther/guix-local

eac026e5c80caae88a6cef317a46007dca343578 — Ludovic Courtès 8 years ago f850e0d
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.
3 files changed, 20 insertions(+), 33 deletions(-)

M doc/guix.texi
M gnu/system/linux-initrd.scm
M gnu/system/vm.scm
M doc/guix.texi => doc/guix.texi +9 -9
@@ 19893,18 19893,18 @@ to it are lost.

@deffn {Monadic Procedure} base-initrd @var{file-systems} @
       [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
       [#:virtio? #t] [#:extra-modules '()]
Return a monadic derivation that builds a generic initrd.  @var{file-systems} is
a list of file systems to be mounted by the initrd like for @code{raw-initrd}.
@var{mapped-devices}, @var{qemu-networking?} and @var{volatile-root?}
also behaves as in @code{raw-initrd}.
       [#:linux-modules '()]
Return a monadic derivation that builds a generic initrd, with kernel
modules taken from @var{linux}.  @var{file-systems} is a list of file-systems to be
mounted by the initrd, possibly in addition to the root file system specified
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
initrd can be used as a QEMU guest with para-virtualized I/O drivers.
@var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.

The initrd is automatically populated with all the kernel modules necessary
for @var{file-systems} and for the given options.  However, additional kernel
modules can be listed in @var{extra-modules}.  They will be added to the initrd, and
for @var{file-systems} and for the given options.  Additional kernel
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.
@end deffn


M gnu/system/linux-initrd.scm => gnu/system/linux-initrd.scm +10 -16
@@ 280,6 280,11 @@ FILE-SYSTEMS."

(define* (default-initrd-modules #:optional (system (%current-system)))
  "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
    "usb-storage" "uas"                     ;for the installation image etc.
    "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)
          '("pata_acpi" "pata_atiixp"    ;for ATA controllers
            "isci")                      ;for SAS controllers like Intel C602
          '())))
          '())

    ,@virtio-modules))

(define-syntax %base-initrd-modules
  ;; This more closely matches our naming convention.


@@ 301,7 308,6 @@ FILE-SYSTEMS."
                      (mapped-devices '())
                      qemu-networking?
                      volatile-root?
                      (virtio? #t)
                      (extra-modules '())         ;deprecated
                      (on-error 'debug))
  "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.

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
for FILE-SYSTEMS and for the given options.  However, additional kernel
modules can be listed in EXTRA-MODULES.  They will be added to the initrd, and
for FILE-SYSTEMS and for the given options.  Additional kernel
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."
  (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*
    ;; Modules added to the initrd and loaded from the initrd.
    `(,@linux-modules
      ,@(if (or virtio? qemu-networking?)
            virtio-modules
            '())
      ,@(file-system-modules file-systems)
      ,@(if volatile-root?
            '("overlay")

M gnu/system/vm.scm => gnu/system/vm.scm +1 -8
@@ 144,7 144,6 @@ made available under the /xchg CIFS share."
                         (base-initrd %linux-vm-file-systems
                                      #:linux linux
                                      #:linux-modules %base-initrd-modules
                                      #:virtio? #t
                                      #:qemu-networking? #t))))

    (define builder


@@ 513,12 512,7 @@ of the GNU system as described by OS."


  (let ((os (operating-system (inherit os)
              ;; Use an initrd with the whole QEMU shebang.
              (initrd (lambda (file-systems . rest)
                        (apply (operating-system-initrd os)
                               file-systems
                               #:virtio? #t
                               rest)))
              ;; Assume we have an initrd with the whole QEMU shebang.

              ;; Force our own root file system.  Refer to it by UUID so that
              ;; 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)
                     file-systems
                     #:volatile-root? #t
                     #:virtio? #t
                     rest)))

    ;; Disable swap.