diff options
Diffstat (limited to 'gnu/system')
-rw-r--r-- | gnu/system/examples/vm-image.tmpl | 28 | ||||
-rw-r--r-- | gnu/system/file-systems.scm | 2 | ||||
-rw-r--r-- | gnu/system/hurd.scm | 4 | ||||
-rw-r--r-- | gnu/system/image.scm | 57 | ||||
-rw-r--r-- | gnu/system/images/orangepi-r1-plus-lts-rk3328.scm | 76 | ||||
-rw-r--r-- | gnu/system/install.scm | 9 | ||||
-rw-r--r-- | gnu/system/mapped-devices.scm | 67 | ||||
-rw-r--r-- | gnu/system/shadow.scm | 116 | ||||
-rw-r--r-- | gnu/system/vm.scm | 6 |
9 files changed, 266 insertions, 99 deletions
diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl index b68183a023..dc9a7542a5 100644 --- a/gnu/system/examples/vm-image.tmpl +++ b/gnu/system/examples/vm-image.tmpl @@ -8,7 +8,7 @@ (use-modules (gnu) (guix) (srfi srfi-1)) (use-service-modules desktop mcron networking spice ssh xorg sddm) (use-package-modules bootloaders certs fonts - package-management xorg) + package-management xdisorg xorg) (define vm-image-motd (plain-file "motd" " \x1b[1;37mThis is the GNU system. Welcome!\x1b[0m @@ -25,18 +25,6 @@ Run '\x1b[1;37minfo guix\x1b[0m' to browse documentation. accounts.\x1b[0m ")) -;;; XXX: Xfce does not implement what is needed for the SPICE dynamic -;;; resolution to work (see: -;;; https://gitlab.xfce.org/xfce/xfce4-settings/-/issues/142). Workaround it -;;; by manually invoking xrandr every second. -(define auto-update-resolution-crutch - #~(job '(next-second) - (lambda () - (setenv "DISPLAY" ":0.0") - (setenv "XAUTHORITY" "/home/guest/.Xauthority") - (execl (string-append #$xrandr "/bin/xrandr") "xrandr" "-s" "0")) - #:user "guest")) - (operating-system (host-name "gnu") (timezone "Etc/UTC") @@ -65,7 +53,7 @@ accounts.\x1b[0m (users (cons (user-account (name "guest") (comment "GNU Guix Live") - (password "") ;no password + (password "") ;no password (group "users") (supplementary-groups '("wheel" "netdev" "audio" "video"))) @@ -77,8 +65,13 @@ accounts.\x1b[0m root ALL=(ALL) ALL %wheel ALL=NOPASSWD: ALL\n")) - (packages (append (list font-bitstream-vera nss-certs) - %base-packages)) + (packages + (append (list font-bitstream-vera nss-certs + ;; Auto-started script providing SPICE dynamic resizing for + ;; Xfce (see: + ;; https://gitlab.xfce.org/xfce/xfce4-settings/-/issues/142). + x-resize) + %base-packages)) (services (append (list (service xfce-desktop-service-type) @@ -104,9 +97,6 @@ root ALL=(ALL) ALL ;; integration with the host, etc. (service spice-vdagent-service-type) - (simple-service 'cron-jobs mcron-service-type - (list auto-update-resolution-crutch)) - ;; Use the DHCP client service rather than NetworkManager. (service dhcp-client-service-type)) diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm index 6d385d71d4..af0567bd3e 100644 --- a/gnu/system/file-systems.scm +++ b/gnu/system/file-systems.scm @@ -369,7 +369,7 @@ TARGET in the other system." ;; List of know pseudo file system types. This is used when validating file ;; system definitions. '("binfmt_misc" "cgroup" "cgroup2" "debugfs" "devpts" "devtmpfs" "efivarfs" "fusectl" - "hugetlbfs" "overlay" "proc" "securityfs" "sysfs" "tmpfs" "xenfs")) + "hugetlbfs" "overlay" "proc" "securityfs" "sysfs" "tmpfs" "tracefs" "xenfs")) (define %fuse-control-file-system ;; Control file system for Linux' file systems in user-space (FUSE). diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm index 3b138bef65..cbe0081382 100644 --- a/gnu/system/hurd.scm +++ b/gnu/system/hurd.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2020-2023 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. @@ -70,7 +70,7 @@ ;; Note: the Shepherd comes before the Hurd, not just because its duty is to ;; shepherd the herd, but also because we want its 'halt' and 'reboot' ;; commands to take precedence. - (list shepherd-0.8 hurd netdde bash coreutils file findutils grep sed + (list shepherd-0.10 hurd netdde bash coreutils file findutils grep sed diffutils patch gawk tar gzip bzip2 xz lzip guile-3.0-latest guile-colorized guile-readline net-base nss-certs inetutils less procps shadow sudo which diff --git a/gnu/system/image.scm b/gnu/system/image.scm index a990c4f861..5456b3a5a0 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> ;;; Copyright © 2022 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2023 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -466,7 +467,9 @@ used in the image." ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be ;; decoded. (setenv "GUIX_LOCPATH" - #+(file-append glibc-utf8-locales "/lib/locale")) + #+(file-append (libc-utf8-locales-for-target + (%current-system)) + "/lib/locale")) (setlocale LC_ALL "en_US.utf8") (initializer image-root @@ -532,7 +535,8 @@ used in the image." (when (and (gpt-image? image) (not - (memq (bootloader-name bootloader) '(grub-efi grub-efi32)))) + (memq (bootloader-name bootloader) + '(grub-efi grub-efi32 grub-efi-removable-bootloader)))) (raise (formatted-message (G_ "EFI bootloader required with GPT partitioning")))) @@ -633,7 +637,8 @@ used in the image. " ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded. (setenv "GUIX_LOCPATH" - #+(file-append glibc-utf8-locales "/lib/locale")) + #+(file-append (libc-utf8-locales-for-target (%current-system)) + "/lib/locale")) (setlocale LC_ALL "en_US.utf8") @@ -683,7 +688,8 @@ returns an image record where the first partition's label is set to <label>." (define* (system-docker-image image #:key - (name "docker-image")) + (name "docker-image") + (archiver tar)) "Build a docker image for IMAGE. NAME is the base name to use for the output file." (define boot-program @@ -728,6 +734,7 @@ output file." (use-modules (guix docker) (guix build utils) (gnu build image) + (srfi srfi-1) (srfi srfi-19) (guix build store-copy) (guix store database)) @@ -737,7 +744,8 @@ output file." ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded. (setenv "GUIX_LOCPATH" - #+(file-append glibc-utf8-locales "/lib/locale")) + #+(file-append (libc-utf8-locales-for-target (%current-system)) + "/lib/locale")) (setlocale LC_ALL "en_US.utf8") (set-path-environment-variable "PATH" '("bin" "sbin") '(#+tar)) @@ -750,18 +758,30 @@ output file." #:register-closures? #$register-closures? #:deduplicate? #f #:system-directory #$os) - (build-docker-image - #$output - (cons* image-root - (map store-info-item - (call-with-input-file #$graph - read-reference-graph))) - #$os - #:entry-point '(#$boot-program #$os) - #:compressor '(#+(file-append gzip "/bin/gzip") "-9n") - #:creation-time (make-time time-utc 0 1) - #:system #$image-target - #:transformations `((,image-root -> "")))))))) + (when #$(image-max-layers image) + (setenv "PATH" + (string-join (list #+(file-append archiver "/bin") + #+(file-append gzip "/bin")) + ":"))) + (apply build-docker-image + (append (list #$output + (append (if #$(image-max-layers image) + '() + (list image-root)) + (map store-info-item + (call-with-input-file #$graph + read-reference-graph))) + #$os + #:entry-point '(#$boot-program #$os) + #:compressor + '(#+(file-append gzip "/bin/gzip") "-9n") + #:creation-time (make-time time-utc 0 1) + #:system #$image-target + #:transformations `((,image-root -> ""))) + (if #$(image-max-layers image) + (list #:root-system image-root + #:max-layers #$(image-max-layers image)) + '())))))))) (computed-file name builder ;; Allow offloading so that this I/O-intensive process @@ -816,7 +836,8 @@ output file." ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded. (setenv "GUIX_LOCPATH" - #+(file-append glibc-utf8-locales "/lib/locale")) + #+(file-append (libc-utf8-locales-for-target (%current-system)) + "/lib/locale")) (setlocale LC_ALL "en_US.utf8") (let ((image-root (string-append (getcwd) "/tmp-root")) diff --git a/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm b/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm new file mode 100644 index 0000000000..eaaa12ba78 --- /dev/null +++ b/gnu/system/images/orangepi-r1-plus-lts-rk3328.scm @@ -0,0 +1,76 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Herman Rimm <herman@rimm.ee> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu system images orangepi-r1-plus-lts-rk3328) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader u-boot) + #:use-module (gnu image) + #:use-module (gnu packages linux) + #:use-module (gnu packages certs) + #:use-module (guix platforms arm) + #:use-module (gnu services) + #:use-module (gnu services base) + #:use-module (gnu services networking) + #:use-module (gnu system) + #:use-module (gnu system file-systems) + #:use-module (gnu system image) + #:use-module (srfi srfi-26) + #:export (orangepi-r1-plus-lts-rk3328-barebones-os + orangepi-r1-plus-lts-rk3328-image-type + orangepi-r1-plus-lts-rk3328-barebones-raw-image)) + +(define orangepi-r1-plus-lts-rk3328-barebones-os + (operating-system + (host-name "windmolen") + (timezone "Europe/Amsterdam") + (locale "en_US.utf8") + (bootloader (bootloader-configuration + (bootloader u-boot-orangepi-r1-plus-lts-rk3328-bootloader) + (targets '("/dev/mmcblk0")))) + (initrd-modules '()) + (kernel linux-libre-arm64-generic) + (file-systems (cons (file-system + (device (file-system-label "my-root")) + (mount-point "/") + (type "ext4")) %base-file-systems)) + (services + (cons* (service agetty-service-type + (agetty-configuration (extra-options '("-L")) ;no carrier detect + (baud-rate "1500000") + (term "vt100") + (tty "ttyS2"))) + (service dhcp-client-service-type) + (service ntp-service-type) %base-services)) + (packages (cons nss-certs %base-packages)))) + +(define orangepi-r1-plus-lts-rk3328-image-type + (image-type (name 'orangepi-r1-plus-lts-rk3328-raw) + (constructor (lambda (os) + (image (inherit (raw-with-offset-disk-image (expt + 2 24))) + (operating-system + os) + (platform aarch64-linux)))))) + +(define orangepi-r1-plus-lts-rk3328-barebones-raw-image + (image (inherit (os+platform->image orangepi-r1-plus-lts-rk3328-barebones-os + aarch64-linux + #:type orangepi-r1-plus-lts-rk3328-image-type)) + (name 'orangepi-r1-plus-lts-rk3328-barebones-raw-image))) + +orangepi-r1-plus-lts-rk3328-barebones-raw-image diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 28161de153..371bfc2a63 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz> +;;; Copyright © 2023 Herman Rimm <herman@rimm.ee> ;;; ;;; This file is part of GNU Guix. ;;; @@ -69,6 +70,7 @@ mx6cuboxi-installation-os nintendo-nes-classic-edition-installation-os novena-installation-os + orangepi-r1-plus-lts-rk3328-installation-os firefly-rk3399-installation-os pine64-plus-installation-os pinebook-installation-os @@ -454,7 +456,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m (service gc-root-service-type (append (list bare-bones-os - glibc-utf8-locales + (libc-utf8-locales-for-target system) texinfo guile-3.0) %default-locale-libcs))) @@ -633,6 +635,11 @@ The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET." "/dev/mmcblk0" ; SD card (solder it yourself) "ttyS0")) +(define orangepi-r1-plus-lts-rk3328-installation-os + (embedded-installation-os u-boot-orangepi-r1-plus-lts-rk3328-bootloader + "/dev/mmcblk0" ; SD card storage + "ttyS0")) + (define pine64-plus-installation-os (embedded-installation-os u-boot-pine64-plus-bootloader "/dev/mmcblk0" ; SD card storage diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm index e6b8970c12..c19a818453 100644 --- a/gnu/system/mapped-devices.scm +++ b/gnu/system/mapped-devices.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014-2022 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2017, 2018 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz> ;;; ;;; This file is part of GNU Guix. ;;; @@ -64,6 +65,7 @@ check-device-initrd-modules ;XXX: needs a better place luks-device-mapping + luks-device-mapping-with-options raid-device-mapping lvm-device-mapping)) @@ -188,7 +190,7 @@ option of @command{guix system}.\n") ;;; Common device mappings. ;;; -(define (open-luks-device source targets) +(define* (open-luks-device source targets #:key key-file) "Return a gexp that maps SOURCE to TARGET as a LUKS device, using 'cryptsetup'." (with-imported-modules (source-module-closure @@ -198,7 +200,8 @@ option of @command{guix system}.\n") ((target) #~(let ((source #$(if (uuid? source) (uuid-bytevector source) - source))) + source)) + (keyfile #$key-file)) ;; XXX: 'use-modules' should be at the top level. (use-modules (rnrs bytevectors) ;bytevector? ((gnu build file-systems) @@ -215,29 +218,35 @@ option of @command{guix system}.\n") ;; 'cryptsetup open' requires standard input to be a tty to allow ;; for interaction but shepherd sets standard input to /dev/null; ;; thus, explicitly request a tty. - (zero? (system*/tty - #$(file-append cryptsetup-static "/sbin/cryptsetup") - "open" "--type" "luks" - - ;; Note: We cannot use the "UUID=source" syntax here - ;; because 'cryptsetup' implements it by searching the - ;; udev-populated /dev/disk/by-id directory but udev may - ;; be unavailable at the time we run this. - (if (bytevector? source) - (or (let loop ((tries-left 10)) - (and (positive? tries-left) - (or (find-partition-by-luks-uuid source) - ;; If the underlying partition is - ;; not found, try again after - ;; waiting a second, up to ten - ;; times. FIXME: This should be - ;; dealt with in a more robust way. - (begin (sleep 1) - (loop (- tries-left 1)))))) - (error "LUKS partition not found" source)) - source) - - #$target))))))) + (let ((partition + ;; Note: We cannot use the "UUID=source" syntax here + ;; because 'cryptsetup' implements it by searching the + ;; udev-populated /dev/disk/by-id directory but udev may + ;; be unavailable at the time we run this. + (if (bytevector? source) + (or (let loop ((tries-left 10)) + (and (positive? tries-left) + (or (find-partition-by-luks-uuid source) + ;; If the underlying partition is + ;; not found, try again after + ;; waiting a second, up to ten + ;; times. FIXME: This should be + ;; dealt with in a more robust way. + (begin (sleep 1) + (loop (- tries-left 1)))))) + (error "LUKS partition not found" source)) + source))) + ;; We want to fallback to the password unlock if the keyfile fails. + (or (and keyfile + (zero? (system*/tty + #$(file-append cryptsetup-static "/sbin/cryptsetup") + "open" "--type" "luks" + "--key-file" keyfile + partition #$target))) + (zero? (system*/tty + #$(file-append cryptsetup-static "/sbin/cryptsetup") + "open" "--type" "luks" + partition #$target))))))))) (define (close-luks-device source targets) "Return a gexp that closes TARGET, a LUKS device." @@ -276,6 +285,14 @@ option of @command{guix system}.\n") (close close-luks-device) (check check-luks-device))) +(define* (luks-device-mapping-with-options #:key key-file) + "Return a luks-device-mapping object with open modified to pass the arguments +into the open-luks-device procedure." + (mapped-device-kind + (inherit luks-device-mapping) + (open (λ (source targets) (open-luks-device source targets + #:key-file key-file))))) + (define (open-raid-device sources targets) "Return a gexp that assembles SOURCES (a list of devices) to the RAID device TARGET (e.g., \"/dev/md0\"), using 'mdadm'." diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 47f19551b6..8b3958ba5c 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -64,6 +64,13 @@ user-group-system?) #:export (%default-bashrc + %default-bash-profile + %default-zprofile + %default-xdefaults + %default-gdbinit + %default-nanorc + %default-dotguile + %default-skeleton-home-config default-skeletons skeleton-directory %base-groups @@ -147,11 +154,8 @@ alias ll='ls -l' alias grep='grep --color=auto' alias ip='ip -color=auto'\n")) -(define (default-skeletons) - "Return the default skeleton files for /etc/skel. These files are copied by -'useradd' in the home directory of newly created user accounts." - - (let ((profile (plain-file "bash_profile" "\ +(define %default-bash-profile + (plain-file "bash_profile" "\ # Set up Guix Home profile if [ -f ~/.profile ]; then . ~/.profile; fi @@ -167,25 +171,23 @@ eval \"$(guix package --search-paths \\ # Prepend setuid programs. export PATH=/run/setuid-programs:$PATH ")) - (bashrc %default-bashrc) - (zprofile (plain-file "zprofile" "\ -# Honor system-wide environment variables -source /etc/profile - -# Merge search-paths from multiple profiles, the order matters. -eval \"$(guix package --search-paths \\ --p $HOME/.config/guix/current \\ --p $HOME/.guix-profile \\ --p /run/current-system/profile)\" -# Prepend setuid programs. -export PATH=/run/setuid-programs:$PATH +(define %default-zprofile + (plain-file "zprofile" "\ +# Set up the system, user profile, and related variables. +source /etc/profile +# Set up the home environment profile. +source ~/.profile ")) - (xdefaults (plain-file "Xdefaults" "\ + +(define %default-xdefaults + (plain-file "Xdefaults" "\ XTerm*utf8: always XTerm*metaSendsEscape: true\n")) - (gdbinit (plain-file "gdbinit" "\ -# Tell GDB where to look for separate debugging files. + +(define %default-gdbinit + (plain-file "gdbinit" + "# Tell GDB where to look for separate debugging files. guile (use-modules (gdb)) (execute (string-append \"set debug-file-directory \" @@ -203,19 +205,16 @@ end # Authorize extensions found in the store, such as the # pretty-printers of libstdc++. -set auto-load safe-path /gnu/store/*/lib\n"))) - `((".bash_profile" ,profile) - (".bashrc" ,bashrc) - ;; Zsh sources ~/.zprofile before ~/.zshrc, and it sources ~/.zlogin - ;; after ~/.zshrc. To avoid interfering with any customizations a user - ;; may have made in their ~/.zshrc, put this in .zprofile, not .zlogin. - (".zprofile" ,zprofile) - (".nanorc" ,(plain-file "nanorc" "\ -# Include all the syntax highlighting modules. +set auto-load safe-path /gnu/store/*/lib\n")) + +(define %default-nanorc + (plain-file "nanorc" + "# Include all the syntax highlighting modules. include /run/current-system/profile/share/nano/*.nanorc\n")) - (".Xdefaults" ,xdefaults) - (".guile" ,(plain-file "dot-guile" - "(cond ((false-if-exception (resolve-interface '(ice-9 readline))) + +(define %default-dotguile + (plain-file "dot-guile" + "(cond ((false-if-exception (resolve-interface '(ice-9 readline))) => (lambda (module) ;; Enable completion and input history at the REPL. @@ -233,7 +232,58 @@ convenient interactive line editing and input history.\\n\\n\"))) (else (display \"Consider installing the 'guile-colorized' package for a colorful Guile experience.\\n\\n\"))))\n")) - (".gdbinit" ,gdbinit)))) + +(define %default-skeleton-home-config + (plain-file "default-home-config" "\ +;; This is a sample Guix Home configuration which can help setup your +;; home directory in the same declarative manner as Guix System. +;; For more information, see the Home Configuration section of the manual. +(define-module (guix-home-config) + #:use-module (gnu home) + #:use-module (gnu home services) + #:use-module (gnu home services shells) + #:use-module (gnu services) + #:use-module (gnu system shadow)) + +(define home-config + (home-environment + (services + (list + ;; Uncomment the shell you wish to use for your user: + ;(service home-bash-service-type) + ;(service home-fish-service-type) + ;(service home-zsh-service-type) + + (service home-files-service-type + `((\".guile\" ,%default-dotguile) + (\".Xdefaults\" ,%default-xdefaults))) + + (service home-xdg-configuration-files-service-type + `((\"gdb/gdbinit\" ,%default-gdbinit) + (\"nano/nanorc\" ,%default-nanorc))))))) + +home-config")) + +(define (default-skeletons) + "Return the default skeleton files for /etc/skel. These files are copied by +'useradd' in the home directory of newly created user accounts." + + (let ((profile %default-bash-profile) + (bashrc %default-bashrc) + (zprofile %default-zprofile) + (xdefaults %default-xdefaults) + (gdbinit %default-gdbinit)) + `((".bash_profile" ,profile) + (".bashrc" ,bashrc) + ;; Zsh sources ~/.zprofile before ~/.zshrc, and it sources ~/.zlogin + ;; after ~/.zshrc. To avoid interfering with any customizations a user + ;; may have made in their ~/.zshrc, put this in .zprofile, not .zlogin. + (".zprofile" ,zprofile) + (".nanorc" ,%default-nanorc) + (".Xdefaults" ,xdefaults) + (".guile" ,%default-dotguile) + (".gdbinit" ,gdbinit) + ("guix-home-config.scm" ,%default-skeleton-home-config)))) (define (skeleton-directory skeletons) "Return a directory containing SKELETONS, a list of name/derivation tuples." diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 70f7b00116..8c27ff787d 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -168,6 +168,12 @@ environment with the store shared with the host. MAPPINGS is a list of file-systems #:volatile-root? volatile? rest))) + ;; The (QEMU-only) "cirrus" graphics driver is still expected by some + ;; VPS with old QEMU versions. See <https://bugs.gnu.org/36069>. + (initrd-modules (let ((modules (operating-system-initrd-modules os))) + (if (member "cirrus" modules) + modules + (cons "cirrus" modules)))) ;; Disable swap. (swap-devices '()) |