system: Add 'initrd-modules' field.
* gnu/system.scm (<operating-system>)[initrd-modules]: New field. (operating-system-initrd-file): Pass #:linux-modules to 'make-initrd'. * gnu/system/linux-initrd.scm (default-initrd-modules): New procedure. (%base-initrd-modules): New macro. (base-initrd): Add #:linux-modules and honor it. * gnu/system/install.scm (embedded-installation-os): Use 'initrd-modules' instead of 'initrd'. * gnu/tests/install.scm (%raid-root-os): Likewise. * doc/guix.texi (operating-system Reference): Add 'initrd-modules'. (Initial RAM Disk): Document it. Adjust example to not use #:extra-modules.
This commit is contained in:
parent
615a89e310
commit
bc499b113a
|
@ -8889,11 +8889,16 @@ the command-line of the kernel---e.g., @code{("console=ttyS0")}.
|
||||||
@item @code{bootloader}
|
@item @code{bootloader}
|
||||||
The system bootloader configuration object. @xref{Bootloader Configuration}.
|
The system bootloader configuration object. @xref{Bootloader Configuration}.
|
||||||
|
|
||||||
@item @code{initrd} (default: @code{base-initrd})
|
@item @code{initrd-modules} (default: @code{%base-initrd-modules})
|
||||||
@cindex initrd
|
@cindex initrd
|
||||||
@cindex initial RAM disk
|
@cindex initial RAM disk
|
||||||
A two-argument monadic procedure that returns an initial RAM disk for
|
The list of Linux kernel modules that need to be available in the
|
||||||
the Linux kernel. @xref{Initial RAM Disk}.
|
initial RAM disk. @xref{Initial RAM Disk}.
|
||||||
|
|
||||||
|
@item @code{initrd} (default: @code{base-initrd})
|
||||||
|
A monadic procedure that returns an initial RAM disk for the Linux
|
||||||
|
kernel. This field is provided to support low-level customization and
|
||||||
|
should rarely be needed for casual use. @xref{Initial RAM Disk}.
|
||||||
|
|
||||||
@item @code{firmware} (default: @var{%base-firmware})
|
@item @code{firmware} (default: @var{%base-firmware})
|
||||||
@cindex firmware
|
@cindex firmware
|
||||||
|
@ -19768,7 +19773,27 @@ root file system as well as an initialization script. The latter is
|
||||||
responsible for mounting the real root file system, and for loading any
|
responsible for mounting the real root file system, and for loading any
|
||||||
kernel modules that may be needed to achieve that.
|
kernel modules that may be needed to achieve that.
|
||||||
|
|
||||||
The @code{initrd} field of an @code{operating-system} declaration allows
|
The @code{initrd-modules} field of an @code{operating-system}
|
||||||
|
declaration allows you to specify Linux-libre kernel modules that must
|
||||||
|
be available in the initrd. In particular, this is where you would list
|
||||||
|
modules needed to actually drive the hard disk where your root partition
|
||||||
|
is---although the default value of @code{initrd-modules} should cover
|
||||||
|
most use cases. For example, assuming you need the @code{megaraid_sas}
|
||||||
|
module in addition to the default modules to be able to access your root
|
||||||
|
file system, you would write:
|
||||||
|
|
||||||
|
@example
|
||||||
|
(operating-system
|
||||||
|
;; @dots{}
|
||||||
|
(initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@defvr {Scheme Variable} %base-initrd-modules
|
||||||
|
This is the list of kernel modules included in the initrd by default.
|
||||||
|
@end defvr
|
||||||
|
|
||||||
|
Furthermore, if you need lower-level customization, the @code{initrd}
|
||||||
|
field of an @code{operating-system} declaration allows
|
||||||
you to specify which initrd you would like to use. The @code{(gnu
|
you to specify which initrd you would like to use. The @code{(gnu
|
||||||
system linux-initrd)} module provides three ways to build an initrd: the
|
system linux-initrd)} module provides three ways to build an initrd: the
|
||||||
high-level @code{base-initrd} procedure and the low-level
|
high-level @code{base-initrd} procedure and the low-level
|
||||||
|
@ -19781,11 +19806,10 @@ system declaration like this:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
(initrd (lambda (file-systems . rest)
|
(initrd (lambda (file-systems . rest)
|
||||||
;; Create a standard initrd that has modules "foo.ko"
|
;; Create a standard initrd but set up networking
|
||||||
;; and "bar.ko", as well as their dependencies, in
|
;; with the parameters QEMU expects by default.
|
||||||
;; addition to the modules available by default.
|
|
||||||
(apply base-initrd file-systems
|
(apply base-initrd file-systems
|
||||||
#:extra-modules '("foo" "bar")
|
#:qemu-networking? #t
|
||||||
rest)))
|
rest)))
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
operating-system-kernel
|
operating-system-kernel
|
||||||
operating-system-kernel-file
|
operating-system-kernel-file
|
||||||
operating-system-kernel-arguments
|
operating-system-kernel-arguments
|
||||||
|
operating-system-initrd-modules
|
||||||
operating-system-initrd
|
operating-system-initrd
|
||||||
operating-system-users
|
operating-system-users
|
||||||
operating-system-groups
|
operating-system-groups
|
||||||
|
@ -154,6 +155,10 @@ booted from ROOT-DEVICE"
|
||||||
|
|
||||||
(initrd operating-system-initrd ; (list fs) -> M derivation
|
(initrd operating-system-initrd ; (list fs) -> M derivation
|
||||||
(default base-initrd))
|
(default base-initrd))
|
||||||
|
(initrd-modules operating-system-initrd-modules ; list of strings
|
||||||
|
(thunked) ; it's system-dependent
|
||||||
|
(default %base-initrd-modules))
|
||||||
|
|
||||||
(firmware operating-system-firmware ; list of packages
|
(firmware operating-system-firmware ; list of packages
|
||||||
(default %base-firmware))
|
(default %base-firmware))
|
||||||
|
|
||||||
|
@ -846,6 +851,8 @@ hardware-related operations as necessary when booting a Linux container."
|
||||||
|
|
||||||
(mlet %store-monad ((initrd (make-initrd boot-file-systems
|
(mlet %store-monad ((initrd (make-initrd boot-file-systems
|
||||||
#:linux (operating-system-kernel os)
|
#:linux (operating-system-kernel os)
|
||||||
|
#:linux-modules
|
||||||
|
(operating-system-initrd-modules os)
|
||||||
#:mapped-devices mapped-devices)))
|
#:mapped-devices mapped-devices)))
|
||||||
(return (file-append initrd "/initrd"))))
|
(return (file-append initrd "/initrd"))))
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
|
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
|
||||||
;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
|
;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
|
||||||
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
|
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
|
||||||
|
@ -396,10 +396,7 @@ The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET."
|
||||||
(kernel-arguments
|
(kernel-arguments
|
||||||
(cons (string-append "console=" tty)
|
(cons (string-append "console=" tty)
|
||||||
(operating-system-user-kernel-arguments installation-os)))
|
(operating-system-user-kernel-arguments installation-os)))
|
||||||
(initrd (lambda (fs . rest)
|
(initrd-modules (append extra-modules %base-initrd-modules))))
|
||||||
(apply base-initrd fs
|
|
||||||
#:extra-modules extra-modules
|
|
||||||
rest)))))
|
|
||||||
|
|
||||||
(define beaglebone-black-installation-os
|
(define beaglebone-black-installation-os
|
||||||
(embedded-installation-os u-boot-beaglebone-black-bootloader
|
(embedded-installation-os u-boot-beaglebone-black-bootloader
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
#:export (expression->initrd
|
#:export (expression->initrd
|
||||||
|
%base-initrd-modules
|
||||||
raw-initrd
|
raw-initrd
|
||||||
file-system-packages
|
file-system-packages
|
||||||
base-initrd))
|
base-initrd))
|
||||||
|
@ -277,14 +278,31 @@ FILE-SYSTEMS."
|
||||||
(append-map (compose file-system-type-modules file-system-type)
|
(append-map (compose file-system-type-modules file-system-type)
|
||||||
file-systems))
|
file-systems))
|
||||||
|
|
||||||
|
(define* (default-initrd-modules #:optional (system (%current-system)))
|
||||||
|
"Return the list of modules included in the initrd by default."
|
||||||
|
`("ahci" ;for SATA controllers
|
||||||
|
"usb-storage" "uas" ;for the installation image etc.
|
||||||
|
"usbhid" "hid-generic" "hid-apple" ;keyboards during early boot
|
||||||
|
"dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions
|
||||||
|
"nls_iso8859-1" ;for `mkfs.fat`, et.al
|
||||||
|
,@(if (string-match "^(x86_64|i[3-6]86)-" system)
|
||||||
|
'("pata_acpi" "pata_atiixp" ;for ATA controllers
|
||||||
|
"isci") ;for SAS controllers like Intel C602
|
||||||
|
'())))
|
||||||
|
|
||||||
|
(define-syntax %base-initrd-modules
|
||||||
|
;; This more closely matches our naming convention.
|
||||||
|
(identifier-syntax (default-initrd-modules)))
|
||||||
|
|
||||||
(define* (base-initrd file-systems
|
(define* (base-initrd file-systems
|
||||||
#:key
|
#:key
|
||||||
(linux linux-libre)
|
(linux linux-libre)
|
||||||
|
(linux-modules '())
|
||||||
(mapped-devices '())
|
(mapped-devices '())
|
||||||
qemu-networking?
|
qemu-networking?
|
||||||
volatile-root?
|
volatile-root?
|
||||||
(virtio? #t)
|
(virtio? #t)
|
||||||
(extra-modules '())
|
(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
|
||||||
modules taken from LINUX. FILE-SYSTEMS is a list of file-systems to be
|
modules taken from LINUX. FILE-SYSTEMS is a list of file-systems to be
|
||||||
|
@ -307,17 +325,9 @@ loaded at boot time in the order in which they appear."
|
||||||
'("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
|
'("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
|
||||||
"virtio_console"))
|
"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.
|
||||||
`("ahci" ;for SATA controllers
|
`(,@linux-modules
|
||||||
"usb-storage" "uas" ;for the installation image etc.
|
|
||||||
"usbhid" "hid-generic" "hid-apple" ;keyboards during early boot
|
|
||||||
"dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions
|
|
||||||
"nls_iso8859-1" ;for `mkfs.fat`, et.al
|
|
||||||
,@(if (string-match "^(x86_64|i[3-6]86)-" (%current-system))
|
|
||||||
'("pata_acpi" "pata_atiixp" ;for ATA controllers
|
|
||||||
"isci") ;for SAS controllers like Intel C602
|
|
||||||
'())
|
|
||||||
,@(if (or virtio? qemu-networking?)
|
,@(if (or virtio? qemu-networking?)
|
||||||
virtio-modules
|
virtio-modules
|
||||||
'())
|
'())
|
||||||
|
@ -332,7 +342,7 @@ loaded at boot time in the order in which they appear."
|
||||||
|
|
||||||
(raw-initrd file-systems
|
(raw-initrd file-systems
|
||||||
#:linux linux
|
#:linux linux
|
||||||
#:linux-modules linux-modules
|
#:linux-modules linux-modules*
|
||||||
#:mapped-devices mapped-devices
|
#:mapped-devices mapped-devices
|
||||||
#:helper-packages helper-packages
|
#:helper-packages helper-packages
|
||||||
#:qemu-networking? qemu-networking?
|
#:qemu-networking? qemu-networking?
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
|
;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
|
@ -565,11 +565,10 @@ where /gnu lives on a separate partition.")
|
||||||
(bootloader grub-bootloader)
|
(bootloader grub-bootloader)
|
||||||
(target "/dev/vdb")))
|
(target "/dev/vdb")))
|
||||||
(kernel-arguments '("console=ttyS0"))
|
(kernel-arguments '("console=ttyS0"))
|
||||||
(initrd (lambda (file-systems . rest)
|
|
||||||
;; Add a kernel module for RAID-0 (aka. "stripe").
|
;; Add a kernel module for RAID-0 (aka. "stripe").
|
||||||
(apply base-initrd file-systems
|
(initrd-modules (cons "raid0" %base-initrd-modules))
|
||||||
#:extra-modules '("raid0")
|
|
||||||
rest)))
|
|
||||||
(mapped-devices (list (mapped-device
|
(mapped-devices (list (mapped-device
|
||||||
(source (list "/dev/vda2" "/dev/vda3"))
|
(source (list "/dev/vda2" "/dev/vda3"))
|
||||||
(target "/dev/md0")
|
(target "/dev/md0")
|
||||||
|
|
Loading…
Reference in New Issue