* [bug#60442] [PATCH] bootloader: grub: Add support for root on lvm.
@ 2022-12-31 1:25 Michael Rohleder
2023-03-21 17:39 ` Maxim Cournoyer
0 siblings, 1 reply; 4+ messages in thread
From: Michael Rohleder @ 2022-12-31 1:25 UTC (permalink / raw)
To: 60442; +Cc: Michael Rohleder
This fixes <https://issues.guix.gnu.org/44877>.
* gnu/bootloader/grub.scm (install-grub)
(install-grub-efi)
(install-grub-efi-removable)
(install-grub-efi32): Add setting GRUB_PRELOAD_MODULES to lvm.
* gnu/tests/install.scm (test-lvm-root-os): New variable.
---
gnu/bootloader/grub.scm | 9 +++++
gnu/tests/install.scm | 81 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 89 insertions(+), 1 deletion(-)
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index ecd44e7f3c..1e2d142452 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -9,6 +9,7 @@
;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
;;; Copyright © 2022 Karl Hallsby <karl@hallsby.com>
;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -557,6 +558,8 @@ (define install-grub
;; Tell 'grub-install' that there might be a LUKS-encrypted
;; /boot or root partition.
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
+ ;; Let us boot from lvm
+ (setenv "GRUB_PRELOAD_MODULES" "lvm")
;; Hide potentially confusing messages from the user, such as
;; "Installing for i386-pc platform."
@@ -629,6 +632,8 @@ (define install-grub-efi
;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
;; root partition.
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
+ ;; Let us boot from lvm
+ (setenv "GRUB_PRELOAD_MODULES" "lvm")
(invoke/quiet grub-install "--boot-directory" install-dir
"--bootloader-id=Guix"
"--efi-directory" target-esp)))))
@@ -652,6 +657,8 @@ (define install-grub-efi-removable
;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
;; root partition.
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
+ ;; Let us boot from lvm
+ (setenv "GRUB_PRELOAD_MODULES" "lvm")
(invoke/quiet grub-install "--boot-directory" install-dir
"--removable"
;; "--no-nvram"
@@ -675,6 +682,8 @@ (define install-grub-efi32
;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
;; root partition.
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
+ ;; Let us boot from lvm
+ (setenv "GRUB_PRELOAD_MODULES" "lvm")
(invoke/quiet grub-install "--boot-directory" install-dir
"--bootloader-id=Guix"
(cond ((target-x86?) "--target=i386-efi")
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 4e0e274e66..f9d34c1e28 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -76,6 +77,7 @@ (define-module (gnu tests install)
%test-jfs-root-os
%test-f2fs-root-os
%test-xfs-root-os
+ %test-lvm-root-os
%test-lvm-separate-home-os
%test-gui-installed-os
@@ -831,7 +833,6 @@ (define %test-encrypted-root-os
;;; Separate /home on LVM
;;;
-;; Since LVM support in guix currently doesn't allow root-on-LVM we use /home on LVM
(define-os-with-source (%lvm-separate-home-os %lvm-separate-home-os-source)
(use-modules (gnu) (gnu tests))
@@ -913,6 +914,84 @@ (define %test-lvm-separate-home-os
`(,@command) "lvm-separate-home-os")))))
\f
+
+;;;
+;;; LVM root device.
+;;;
+
+(define-os-with-source (%lvm-root-os %lvm-root-os-source)
+ (use-modules (gnu) (gnu tests))
+
+ (operating-system
+ (host-name "root-os-on-lvm")
+ (timezone "Europe/Paris")
+ (locale "en_US.utf8")
+
+ (bootloader (bootloader-configuration
+ (bootloader grub-bootloader)
+ (targets (list "/dev/vdb"))))
+ (kernel-arguments '("console=ttyS0"))
+
+ (mapped-devices (list (mapped-device
+ (source "vg0")
+ (target "vg0-root")
+ (type lvm-device-mapping))))
+ (file-systems (cons* (file-system
+ (device "/dev/mapper/vg0-root")
+ (mount-point "/")
+ (type "ext4")
+ (dependencies mapped-devices))
+ %base-file-systems))
+ (users %base-user-accounts)
+ (services (cons (service marionette-service-type
+ (marionette-configuration
+ (imported-modules '((gnu services herd)
+ (guix combinators)))))
+ %base-services))))
+
+(define %lvm-root-os-installation-script
+ "\
+. /etc/profile
+set -e -x
+guix --version
+
+export GUIX_BUILD_OPTIONS=--no-grafts
+parted --script /dev/vdb mklabel gpt \\
+ mkpart primary ext2 1M 3M \\
+ mkpart primary 3M 1.7G \\
+ set 1 boot on \\
+ set 1 bios_grub on
+pvcreate /dev/vdb2
+vgcreate vg0 /dev/vdb2
+lvcreate -l 100%FREE -n root vg0
+vgchange -ay
+mkfs.ext4 -L root-fs /dev/mapper/vg0-root
+mount /dev/mapper/vg0-root /mnt
+herd start cow-store /mnt
+mkdir /mnt/etc
+cp /etc/target-config.scm /mnt/etc/config.scm
+guix system init /mnt/etc/config.scm /mnt --no-substitutes
+sync
+reboot\n")
+
+(define %test-lvm-root-os
+ (system-test
+ (name "lvm-root-os")
+ (description
+ "Test functionality of an OS installed with a LVM / partition")
+ (value
+ (mlet* %store-monad ((image (run-install %lvm-root-os
+ %lvm-root-os-source
+ #:script
+ %lvm-root-os-installation-script
+ #:packages (list lvm2-static)))
+ (command (qemu-command* image
+ #:memory-size 512)))
+ (run-basic-test %lvm-root-os
+ `(,@command) "lvm-root-os")))))
+
+\f
+
;;;
;;; LUKS-encrypted /home, unencrypted root.
;;;
--
2.38.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [bug#60442] [PATCH] bootloader: grub: Add support for root on lvm.
2022-12-31 1:25 [bug#60442] [PATCH] bootloader: grub: Add support for root on lvm Michael Rohleder
@ 2023-03-21 17:39 ` Maxim Cournoyer
2023-03-23 3:17 ` Michael Rohleder
0 siblings, 1 reply; 4+ messages in thread
From: Maxim Cournoyer @ 2023-03-21 17:39 UTC (permalink / raw)
To: Michael Rohleder; +Cc: 60442
Hi Michael,
Michael Rohleder <mike@rohleder.de> writes:
> This fixes <https://issues.guix.gnu.org/44877>.
>
> * gnu/bootloader/grub.scm (install-grub)
> (install-grub-efi)
> (install-grub-efi-removable)
> (install-grub-efi32): Add setting GRUB_PRELOAD_MODULES to lvm.
> * gnu/tests/install.scm (test-lvm-root-os): New variable.
> ---
> gnu/bootloader/grub.scm | 9 +++++
> gnu/tests/install.scm | 81 ++++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 89 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
> index ecd44e7f3c..1e2d142452 100644
> --- a/gnu/bootloader/grub.scm
> +++ b/gnu/bootloader/grub.scm
> @@ -9,6 +9,7 @@
> ;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
> ;;; Copyright © 2022 Karl Hallsby <karl@hallsby.com>
> ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
> +;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -557,6 +558,8 @@ (define install-grub
> ;; Tell 'grub-install' that there might be a LUKS-encrypted
> ;; /boot or root partition.
> (setenv "GRUB_ENABLE_CRYPTODISK" "y")
> + ;; Let us boot from lvm
> + (setenv "GRUB_PRELOAD_MODULES" "lvm")
>
> ;; Hide potentially confusing messages from the user, such as
> ;; "Installing for i386-pc platform."
> @@ -629,6 +632,8 @@ (define install-grub-efi
> ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
> ;; root partition.
> (setenv "GRUB_ENABLE_CRYPTODISK" "y")
> + ;; Let us boot from lvm
> + (setenv "GRUB_PRELOAD_MODULES" "lvm")
> (invoke/quiet grub-install "--boot-directory" install-dir
> "--bootloader-id=Guix"
> "--efi-directory" target-esp)))))
> @@ -652,6 +657,8 @@ (define install-grub-efi-removable
> ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
> ;; root partition.
> (setenv "GRUB_ENABLE_CRYPTODISK" "y")
> + ;; Let us boot from lvm
> + (setenv "GRUB_PRELOAD_MODULES" "lvm")
> (invoke/quiet grub-install "--boot-directory" install-dir
> "--removable"
> ;; "--no-nvram"
> @@ -675,6 +682,8 @@ (define install-grub-efi32
> ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
> ;; root partition.
> (setenv "GRUB_ENABLE_CRYPTODISK" "y")
> + ;; Let us boot from lvm
> + (setenv "GRUB_PRELOAD_MODULES" "lvm")
> (invoke/quiet grub-install "--boot-directory" install-dir
> "--bootloader-id=Guix"
> (cond ((target-x86?) "--target=i386-efi")
> diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
> index 4e0e274e66..f9d34c1e28 100644
> --- a/gnu/tests/install.scm
> +++ b/gnu/tests/install.scm
> @@ -5,6 +5,7 @@
> ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
> ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
> ;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
> +;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -76,6 +77,7 @@ (define-module (gnu tests install)
> %test-jfs-root-os
> %test-f2fs-root-os
> %test-xfs-root-os
> + %test-lvm-root-os
> %test-lvm-separate-home-os
>
> %test-gui-installed-os
> @@ -831,7 +833,6 @@ (define %test-encrypted-root-os
> ;;; Separate /home on LVM
> ;;;
>
> -;; Since LVM support in guix currently doesn't allow root-on-LVM we use /home on LVM
> (define-os-with-source (%lvm-separate-home-os %lvm-separate-home-os-source)
> (use-modules (gnu) (gnu tests))
>
> @@ -913,6 +914,84 @@ (define %test-lvm-separate-home-os
> `(,@command) "lvm-separate-home-os")))))
>
> \f
> +
> +;;;
> +;;; LVM root device.
> +;;;
> +
> +(define-os-with-source (%lvm-root-os %lvm-root-os-source)
> + (use-modules (gnu) (gnu tests))
> +
> + (operating-system
> + (host-name "root-os-on-lvm")
> + (timezone "Europe/Paris")
> + (locale "en_US.utf8")
> +
> + (bootloader (bootloader-configuration
> + (bootloader grub-bootloader)
> + (targets (list "/dev/vdb"))))
> + (kernel-arguments '("console=ttyS0"))
> +
> + (mapped-devices (list (mapped-device
> + (source "vg0")
> + (target "vg0-root")
> + (type lvm-device-mapping))))
> + (file-systems (cons* (file-system
> + (device "/dev/mapper/vg0-root")
> + (mount-point "/")
> + (type "ext4")
> + (dependencies mapped-devices))
> + %base-file-systems))
> + (users %base-user-accounts)
> + (services (cons (service marionette-service-type
> + (marionette-configuration
> + (imported-modules '((gnu services herd)
> + (guix combinators)))))
> + %base-services))))
> +
> +(define %lvm-root-os-installation-script
> + "\
> +. /etc/profile
> +set -e -x
> +guix --version
> +
> +export GUIX_BUILD_OPTIONS=--no-grafts
> +parted --script /dev/vdb mklabel gpt \\
> + mkpart primary ext2 1M 3M \\
> + mkpart primary 3M 1.7G \\
> + set 1 boot on \\
> + set 1 bios_grub on
> +pvcreate /dev/vdb2
> +vgcreate vg0 /dev/vdb2
> +lvcreate -l 100%FREE -n root vg0
> +vgchange -ay
> +mkfs.ext4 -L root-fs /dev/mapper/vg0-root
> +mount /dev/mapper/vg0-root /mnt
> +herd start cow-store /mnt
> +mkdir /mnt/etc
> +cp /etc/target-config.scm /mnt/etc/config.scm
> +guix system init /mnt/etc/config.scm /mnt --no-substitutes
> +sync
> +reboot\n")
> +
> +(define %test-lvm-root-os
> + (system-test
> + (name "lvm-root-os")
> + (description
> + "Test functionality of an OS installed with a LVM / partition")
> + (value
> + (mlet* %store-monad ((image (run-install %lvm-root-os
> + %lvm-root-os-source
> + #:script
> + %lvm-root-os-installation-script
> + #:packages (list lvm2-static)))
> + (command (qemu-command* image
> + #:memory-size 512)))
> + (run-basic-test %lvm-root-os
> + `(,@command) "lvm-root-os")))))
> +
> +\f
> +
Thanks for this patch. I've applied the change locally, and wanted to
see the test fail first, so I've reverted the following:
--8<---------------cut here---------------start------------->8---
Unstaged changes (1)
modified gnu/bootloader/grub.scm
@@ -632,8 +632,6 @@ (define install-grub-efi
;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
;; root partition.
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
- ;; Let us boot from lvm
- (setenv "GRUB_PRELOAD_MODULES" "lvm")
(invoke/quiet grub-install "--boot-directory" install-dir
"--bootloader-id=Guix"
"--efi-directory" target-esp)))))
@@ -657,8 +655,6 @@ (define install-grub-efi-removable
;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
;; root partition.
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
- ;; Let us boot from lvm
- (setenv "GRUB_PRELOAD_MODULES" "lvm")
(invoke/quiet grub-install "--boot-directory" install-dir
"--removable"
;; "--no-nvram"
@@ -682,8 +678,6 @@ (define install-grub-efi32
;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
;; root partition.
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
- ;; Let us boot from lvm
- (setenv "GRUB_PRELOAD_MODULES" "lvm")
(invoke/quiet grub-install "--boot-directory" install-dir
"--bootloader-id=Guix"
(cond ((target-x86?) "--target=i386-efi")
--8<---------------cut here---------------end--------------->8---
And to my surprise 'make check-system TESTS=lvm-root-os' passed:
--8<---------------cut here---------------start------------->8---
%%%% Starting test basic (Writing full log to "/gnu/store/m3rifzddpnc4x47r7nhfjkms97nzrc69-lvm-root-os/b)
marionette is ready
PASS: uname
PASS: shepherd socket ready
PASS: stdin is /dev/null
PASS: shell and user commands
PASS: special files
PASS: accounts
;;; (services (guix-daemon syslogd mcron console-font-tty3 file-system-/dev/shm console-font-tty5 file-sy)
PASS: shepherd services
PASS: libc honors /etc/localtime
PASS: /var/log/messages is not world-readable
PASS: homes
PASS: skeletons in home directories
PASS: permissions on /root
PASS: ownership and permissions of /var/empty
PASS: no extra home directories
PASS: login on tty1
PASS: getlogin on tty1
PASS: utmpx entry
PASS: wtmp entry
PASS: host name resolution
PASS: nscd configuration action
PASS: nscd invalidate action
SKIP: nscd invalidate action, wrong table
PASS: host not found
PASS: locale
PASS: /run/current-system is a GC root
PASS: /var/guix/gcroots/profiles is a valid symlink
PASS: guix-daemon set-http-proxy action
PASS: guix-daemon set-http-proxy action, clear
PASS: screendump
PASS: screen text
# of expected passes 29
# of skipped tests 1
Some deprecated features have been used. Set the environment
variable GUILE_WARN_DEPRECATED to "detailed" and rerun the
program to get more information. Set it to "no" to suppress
this message.
successfully built /gnu/store/69naxa7pcjlkn25xz033964z3vgp5c9d-lvm-root-os.drv
/gnu/store/m3rifzddpnc4x47r7nhfjkms97nzrc69-lvm-root-os
--8<---------------cut here---------------end--------------->8---
Are you sure this change is really needed? Otherwise why would the test
pass even without the change?
--
Thanks,
Maxim
^ permalink raw reply [flat|nested] 4+ messages in thread
* [bug#60442] [PATCH] bootloader: grub: Add support for root on lvm.
2023-03-21 17:39 ` Maxim Cournoyer
@ 2023-03-23 3:17 ` Michael Rohleder
2023-05-17 20:42 ` bug#60442: " Josselin Poiret via Guix-patches via
0 siblings, 1 reply; 4+ messages in thread
From: Michael Rohleder @ 2023-03-23 3:17 UTC (permalink / raw)
To: Maxim Cournoyer; +Cc: 60442
[-- Attachment #1: Type: text/plain, Size: 317 bytes --]
Hi Maxim,
Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
> Are you sure this change is really needed? Otherwise why would the test
> pass even without the change?
No, after reading #62140, I'm not sure.
That means the test is also wrong, which I don't understand.
--
All generalizations are bad.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 511 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#60442: [PATCH] bootloader: grub: Add support for root on lvm.
2023-03-23 3:17 ` Michael Rohleder
@ 2023-05-17 20:42 ` Josselin Poiret via Guix-patches via
0 siblings, 0 replies; 4+ messages in thread
From: Josselin Poiret via Guix-patches via @ 2023-05-17 20:42 UTC (permalink / raw)
To: Michael Rohleder, Maxim Cournoyer; +Cc: 60442-done
[-- Attachment #1: Type: text/plain, Size: 412 bytes --]
Hi,
Michael Rohleder <mike@rohleder.de> writes:
> No, after reading #62140, I'm not sure.
> That means the test is also wrong, which I don't understand.
I don't have an LVM system to test on, but I'm pretty sure we just need
to add the corresponding insmod when an LVM mapping is used.
In the meantime, closing this bug, please refer to #62140 for more
discussion.
Best,
--
Josselin Poiret
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 682 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-05-17 20:43 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-31 1:25 [bug#60442] [PATCH] bootloader: grub: Add support for root on lvm Michael Rohleder
2023-03-21 17:39 ` Maxim Cournoyer
2023-03-23 3:17 ` Michael Rohleder
2023-05-17 20:42 ` bug#60442: " Josselin Poiret via Guix-patches via
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).