system: Initialize console keyboard layout in the initrd.
Partially fixes <https://bugs.gnu.org/25453>. * gnu/system.scm (<operating-system>)[keyboard-layout]: New field. (operating-system-initrd-file): Pass #:keyboard-layout to MAKE-INITRD. * gnu/system/linux-initrd.scm (raw-initrd): Add #:keyboard-layout. Pass #:keymap-file to 'boot-system'. (base-initrd): Add #:keyboard-layout. [helper-packages]: Add LOADKEYS-STATIC when KEYBOARD-LAYOUT is true. Pass #:keyboard-layout to 'raw-initrd'. * gnu/build/linux-boot.scm (boot-system): Add #:keymap-file and honor it. * doc/guix.texi (operating-system Reference): Document the 'keyboard-layout' field. (Initial RAM Disk): Update 'raw-initrd' and 'base-initrd' documentation.master
parent
48e595b7a8
commit
ae7a316b9d
|
@ -10405,6 +10405,24 @@ 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{keyboard-layout} (default: @code{#f})
|
||||||
|
This field specifies the keyboard layout to use in the console. It can be
|
||||||
|
either @code{#f}, in which case the default keyboard layout is used (usually
|
||||||
|
US English), or a @code{<keyboard-layout>} record.
|
||||||
|
|
||||||
|
This keyboard layout is in effect as soon as the kernel has booted. For
|
||||||
|
instance, it is the keyboard layout in effect when you type a passphrase if
|
||||||
|
your root file system is on a @code{luks-device-mapping} mapped device
|
||||||
|
(@pxref{Mapped Devices}).
|
||||||
|
|
||||||
|
@quotation Note
|
||||||
|
This does @emph{not} specify the keyboard layout used by the bootloader, nor
|
||||||
|
that used by the graphical display server. @xref{Bootloader Configuration},
|
||||||
|
for information on how to specify the bootloader's keyboard layout. @xref{X
|
||||||
|
Window}, for information on how to specify the keyboard layout used by the X
|
||||||
|
Window System.
|
||||||
|
@end quotation
|
||||||
|
|
||||||
@item @code{initrd-modules} (default: @code{%base-initrd-modules})
|
@item @code{initrd-modules} (default: @code{%base-initrd-modules})
|
||||||
@cindex initrd
|
@cindex initrd
|
||||||
@cindex initial RAM disk
|
@cindex initial RAM disk
|
||||||
|
@ -23493,6 +23511,7 @@ here is how to use it and customize it further.
|
||||||
@cindex initial RAM disk
|
@cindex initial RAM disk
|
||||||
@deffn {Scheme Procedure} raw-initrd @var{file-systems} @
|
@deffn {Scheme Procedure} raw-initrd @var{file-systems} @
|
||||||
[#:linux-modules '()] [#:mapped-devices '()] @
|
[#:linux-modules '()] [#:mapped-devices '()] @
|
||||||
|
[#:keyboard-layout #f] @
|
||||||
[#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
|
[#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
|
||||||
Return a derivation that builds a raw initrd. @var{file-systems} is
|
Return a derivation that builds a raw initrd. @var{file-systems} is
|
||||||
a list of file systems to be mounted by the initrd, possibly in addition to
|
a list of file systems to be mounted by the initrd, possibly in addition to
|
||||||
|
@ -23504,6 +23523,12 @@ the root file system specified on the kernel command line via @code{--root}.
|
||||||
include @code{e2fsck/static} or other packages needed by the initrd to check
|
include @code{e2fsck/static} or other packages needed by the initrd to check
|
||||||
the root file system.
|
the root file system.
|
||||||
|
|
||||||
|
When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
|
||||||
|
the desired console keyboard layout. This is done before @var{mapped-devices}
|
||||||
|
are set up and before @var{file-systems} are mounted such that, should the
|
||||||
|
user need to enter a passphrase or use the REPL, this happens using the
|
||||||
|
intended keyboard layout.
|
||||||
|
|
||||||
When @var{qemu-networking?} is true, set up networking with the standard QEMU
|
When @var{qemu-networking?} is true, set up networking with the standard QEMU
|
||||||
parameters. When @var{virtio?} is true, load additional modules so that the
|
parameters. 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.
|
initrd can be used as a QEMU guest with para-virtualized I/O drivers.
|
||||||
|
@ -23513,7 +23538,8 @@ to it are lost.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Scheme Procedure} base-initrd @var{file-systems} @
|
@deffn {Scheme Procedure} base-initrd @var{file-systems} @
|
||||||
[#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
|
[#:mapped-devices '()] [#:keyboard-layout #f] @
|
||||||
|
[#:qemu-networking? #f] [#:volatile-root? #f] @
|
||||||
[#:linux-modules '()]
|
[#:linux-modules '()]
|
||||||
Return as a file-like object a generic initrd, with kernel
|
Return as a file-like object a generic initrd, with kernel
|
||||||
modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
|
modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
|
||||||
|
@ -23521,6 +23547,12 @@ 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
|
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.
|
mappings to realize before @var{file-systems} are mounted.
|
||||||
|
|
||||||
|
When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
|
||||||
|
the desired console keyboard layout. This is done before @var{mapped-devices}
|
||||||
|
are set up and before @var{file-systems} are mounted such that, should the
|
||||||
|
user need to enter a passphrase or use the REPL, this happens using the
|
||||||
|
intended keyboard layout.
|
||||||
|
|
||||||
@var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
|
@var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
|
||||||
|
|
||||||
The initrd is automatically populated with all the kernel modules necessary
|
The initrd is automatically populated with all the kernel modules necessary
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
|
@ -437,6 +437,7 @@ bailing out.~%root contents: ~s~%" (scandir "/"))
|
||||||
(define* (boot-system #:key
|
(define* (boot-system #:key
|
||||||
(linux-modules '())
|
(linux-modules '())
|
||||||
linux-module-directory
|
linux-module-directory
|
||||||
|
keymap-file
|
||||||
qemu-guest-networking?
|
qemu-guest-networking?
|
||||||
volatile-root?
|
volatile-root?
|
||||||
pre-mount
|
pre-mount
|
||||||
|
@ -444,7 +445,8 @@ bailing out.~%root contents: ~s~%" (scandir "/"))
|
||||||
(on-error 'debug))
|
(on-error 'debug))
|
||||||
"This procedure is meant to be called from an initrd. Boot a system by
|
"This procedure is meant to be called from an initrd. Boot a system by
|
||||||
first loading LINUX-MODULES (a list of module names) from
|
first loading LINUX-MODULES (a list of module names) from
|
||||||
LINUX-MODULE-DIRECTORY, then setting up QEMU guest networking if
|
LINUX-MODULE-DIRECTORY, then installing KEYMAP-FILE with 'loadkeys' (if
|
||||||
|
KEYMAP-FILE is true), then setting up QEMU guest networking if
|
||||||
QEMU-GUEST-NETWORKING? is true, calling PRE-MOUNT, mounting the file systems
|
QEMU-GUEST-NETWORKING? is true, calling PRE-MOUNT, mounting the file systems
|
||||||
specified in MOUNTS, and finally booting into the new root if any. The initrd
|
specified in MOUNTS, and finally booting into the new root if any. The initrd
|
||||||
supports kernel command-line options '--load', '--root', and '--repl'.
|
supports kernel command-line options '--load', '--root', and '--repl'.
|
||||||
|
@ -491,6 +493,15 @@ upon error."
|
||||||
#:lookup-module lookup-module)
|
#:lookup-module lookup-module)
|
||||||
(map lookup-module linux-modules))
|
(map lookup-module linux-modules))
|
||||||
|
|
||||||
|
(when keymap-file
|
||||||
|
(let ((status (system* "loadkeys" keymap-file)))
|
||||||
|
(unless (zero? status)
|
||||||
|
;; Emit a warning rather than abort when we cannot load
|
||||||
|
;; KEYMAP-FILE.
|
||||||
|
(format (current-error-port)
|
||||||
|
"warning: 'loadkeys' exited with status ~a~%"
|
||||||
|
status))))
|
||||||
|
|
||||||
(when qemu-guest-networking?
|
(when qemu-guest-networking?
|
||||||
(unless (configure-qemu-networking)
|
(unless (configure-qemu-networking)
|
||||||
(display "network interface is DOWN\n")))
|
(display "network interface is DOWN\n")))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
|
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
|
||||||
;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
|
;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
|
||||||
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
|
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
|
||||||
|
@ -157,6 +157,8 @@
|
||||||
(default '())) ; list of gexps/strings
|
(default '())) ; list of gexps/strings
|
||||||
(bootloader operating-system-bootloader) ; <bootloader-configuration>
|
(bootloader operating-system-bootloader) ; <bootloader-configuration>
|
||||||
|
|
||||||
|
(keyboard-layout operating-system-keyboard-layout ;#f | <keyboard-layout>
|
||||||
|
(default #f))
|
||||||
(initrd operating-system-initrd ; (list fs) -> file-like
|
(initrd operating-system-initrd ; (list fs) -> file-like
|
||||||
(default base-initrd))
|
(default base-initrd))
|
||||||
(initrd-modules operating-system-initrd-modules ; list of strings
|
(initrd-modules operating-system-initrd-modules ; list of strings
|
||||||
|
@ -878,7 +880,8 @@ hardware-related operations as necessary when booting a Linux container."
|
||||||
#:linux (operating-system-kernel os)
|
#:linux (operating-system-kernel os)
|
||||||
#:linux-modules
|
#:linux-modules
|
||||||
(operating-system-initrd-modules os)
|
(operating-system-initrd-modules os)
|
||||||
#:mapped-devices mapped-devices))
|
#:mapped-devices mapped-devices
|
||||||
|
#:keyboard-layout (operating-system-keyboard-layout os)))
|
||||||
|
|
||||||
(define (locale-name->definition* name)
|
(define (locale-name->definition* name)
|
||||||
"Variant of 'locale-name->definition' that raises an error upon failure."
|
"Variant of 'locale-name->definition' that raises an error upon failure."
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
|
;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
|
||||||
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
|
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||||
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
|
@ -31,10 +31,13 @@
|
||||||
#:use-module (gnu packages disk)
|
#:use-module (gnu packages disk)
|
||||||
#:use-module (gnu packages linux)
|
#:use-module (gnu packages linux)
|
||||||
#:use-module (gnu packages guile)
|
#:use-module (gnu packages guile)
|
||||||
|
#:use-module ((gnu packages xorg)
|
||||||
|
#:select (console-setup xkeyboard-config))
|
||||||
#:use-module ((gnu packages make-bootstrap)
|
#:use-module ((gnu packages make-bootstrap)
|
||||||
#:select (%guile-static-stripped))
|
#:select (%guile-static-stripped))
|
||||||
#:use-module (gnu system file-systems)
|
#:use-module (gnu system file-systems)
|
||||||
#:use-module (gnu system mapped-devices)
|
#:use-module (gnu system mapped-devices)
|
||||||
|
#:use-module (gnu system keyboard)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
#:use-module (ice-9 vlist)
|
#:use-module (ice-9 vlist)
|
||||||
|
@ -139,6 +142,7 @@ MODULES and taken from LINUX."
|
||||||
(linux linux-libre)
|
(linux linux-libre)
|
||||||
(linux-modules '())
|
(linux-modules '())
|
||||||
(mapped-devices '())
|
(mapped-devices '())
|
||||||
|
(keyboard-layout #f)
|
||||||
(helper-packages '())
|
(helper-packages '())
|
||||||
qemu-networking?
|
qemu-networking?
|
||||||
volatile-root?
|
volatile-root?
|
||||||
|
@ -152,6 +156,11 @@ mappings to realize before FILE-SYSTEMS are mounted.
|
||||||
HELPER-PACKAGES is a list of packages to be copied in the initrd. It may include
|
HELPER-PACKAGES is a list of packages to be copied in the initrd. It may include
|
||||||
e2fsck/static or other packages needed by the initrd to check root partition.
|
e2fsck/static or other packages needed by the initrd to check root partition.
|
||||||
|
|
||||||
|
When true, KEYBOARD-LAYOUT is a <keyboard-layout> record denoting the desired
|
||||||
|
console keyboard layout. This is done before MAPPED-DEVICES are set up and
|
||||||
|
before FILE-SYSTEMS are mounted such that, should the user need to enter a
|
||||||
|
passphrase or use the REPL, this happens using the intended keyboard layout.
|
||||||
|
|
||||||
When QEMU-NETWORKING? is true, set up networking with the standard QEMU
|
When QEMU-NETWORKING? is true, set up networking with the standard QEMU
|
||||||
parameters.
|
parameters.
|
||||||
|
|
||||||
|
@ -206,6 +215,8 @@ upon error."
|
||||||
(and #$@device-mapping-commands))
|
(and #$@device-mapping-commands))
|
||||||
#:linux-modules '#$linux-modules
|
#:linux-modules '#$linux-modules
|
||||||
#:linux-module-directory '#$kodir
|
#:linux-module-directory '#$kodir
|
||||||
|
#:keymap-file #+(and=> keyboard-layout
|
||||||
|
keyboard-layout->console-keymap)
|
||||||
#:qemu-guest-networking? #$qemu-networking?
|
#:qemu-guest-networking? #$qemu-networking?
|
||||||
#:volatile-root? '#$volatile-root?
|
#:volatile-root? '#$volatile-root?
|
||||||
#:on-error '#$on-error)))
|
#:on-error '#$on-error)))
|
||||||
|
@ -290,6 +301,7 @@ FILE-SYSTEMS."
|
||||||
(linux linux-libre)
|
(linux linux-libre)
|
||||||
(linux-modules '())
|
(linux-modules '())
|
||||||
(mapped-devices '())
|
(mapped-devices '())
|
||||||
|
(keyboard-layout #f)
|
||||||
qemu-networking?
|
qemu-networking?
|
||||||
volatile-root?
|
volatile-root?
|
||||||
(extra-modules '()) ;deprecated
|
(extra-modules '()) ;deprecated
|
||||||
|
@ -300,6 +312,11 @@ mounted by the initrd, possibly in addition to the root file system specified
|
||||||
on the kernel command line via '--root'. MAPPED-DEVICES is a list of device
|
on the kernel command line via '--root'. MAPPED-DEVICES is a list of device
|
||||||
mappings to realize before FILE-SYSTEMS are mounted.
|
mappings to realize before FILE-SYSTEMS are mounted.
|
||||||
|
|
||||||
|
When true, KEYBOARD-LAYOUT is a <keyboard-layout> record denoting the desired
|
||||||
|
console keyboard layout. This is done before MAPPED-DEVICES are set up and
|
||||||
|
before FILE-SYSTEMS are mounted such that, should the user need to enter a
|
||||||
|
passphrase or use the REPL, this happens using the intended keyboard layout.
|
||||||
|
|
||||||
QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd.
|
QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd.
|
||||||
|
|
||||||
The initrd is automatically populated with all the kernel modules necessary
|
The initrd is automatically populated with all the kernel modules necessary
|
||||||
|
@ -316,13 +333,18 @@ loaded at boot time in the order in which they appear."
|
||||||
,@extra-modules))
|
,@extra-modules))
|
||||||
|
|
||||||
(define helper-packages
|
(define helper-packages
|
||||||
(file-system-packages file-systems #:volatile-root? volatile-root?))
|
(append (file-system-packages file-systems
|
||||||
|
#:volatile-root? volatile-root?)
|
||||||
|
(if keyboard-layout
|
||||||
|
(list loadkeys-static)
|
||||||
|
'())))
|
||||||
|
|
||||||
(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
|
||||||
|
#:keyboard-layout keyboard-layout
|
||||||
#:qemu-networking? qemu-networking?
|
#:qemu-networking? qemu-networking?
|
||||||
#:volatile-root? volatile-root?
|
#:volatile-root? volatile-root?
|
||||||
#:on-error on-error))
|
#:on-error on-error))
|
||||||
|
|
Reference in New Issue