From b0c84a411f9f23f4f1a4155ba5efa68cac9004a2 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Thu, 13 Jan 2022 11:35:40 +0100 Subject: [PATCH 1/2] scripts: system: Rationalize persistency. Make sure that the images are created with a non volatile root by default and the vm are created with a volatile root by default. Break the --volatile option into --volatile-image and --persistent-vm options. * guix/scripts/system.scm (perform-action): Turn volatile? argument into volatile-vm-root?. (show-help): Introduce --volatile-image and --persistent-vm options instead of --volatile. (%default-options): Adapt it. (%options): Handle those options. (process-action): Honor them. * doc/guix.texi (Invoking guix system): Adapt it accordingly. --- doc/guix.texi | 15 ++++++++++----- guix/scripts/system.scm | 25 +++++++++++++++++-------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index bc289bad7b..9f763bcfa7 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -35152,6 +35152,11 @@ $ $(guix system vm my-config.scm) -m 1024 -smp 2 -nic user,model=virtio-net-pci The VM shares its store with the host system. +By default, the root file system of the VM is mounted volatile; the +@option{--persistent-vm} option can be provided to make it persistent +instead. In that case, the VM disk-image file will be copied from the +store to the @env{TMPDIR} directory to make it writable. + Additional file systems can be shared between the host and the VM using the @option{--share} and @option{--expose} command-line options: the former specifies a directory to be shared with write access, while the latter @@ -35189,14 +35194,14 @@ QEMU monitor and the VM. @cindex Creating system images in various formats @item image @cindex image, creating disk images -The @code{image} command can produce various image types. The -image type can be selected using the @option{--image-type} option. It +The @code{image} command can produce various image types. The image +type can be selected using the @option{--image-type} option. It defaults to @code{efi-raw}. When its value is @code{iso9660}, the @option{--label} option can be used to specify a volume ID with @code{image}. By default, the root file system of a disk image is -mounted non-volatile; the @option{--volatile} option can be provided to -make it volatile instead. When using @code{image}, the bootloader -installed on the generated image is taken from the provided +mounted non-volatile; the @option{--volatile-image} option can be +provided to make it volatile instead. When using @code{image}, the +bootloader installed on the generated image is taken from the provided @code{operating-system} definition. The following example demonstrates how to generate an image that uses the @code{grub-efi-bootloader} bootloader and boot it with QEMU: diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 98e788c657..3ca5592e34 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -772,7 +772,7 @@ (define* (perform-action action image dry-run? derivations-only? use-substitutes? target full-boot? - volatile? + volatile-vm-root? (graphic? #t) container-shared-network? (mappings '()) @@ -827,7 +827,8 @@ (define bootcfg (mlet* %store-monad ((sys (system-derivation-for-action image action #:full-boot? full-boot? - #:volatile? volatile? + #:volatile? + volatile-vm-root? #:graphic? graphic? #:container-shared-network? container-shared-network? #:mappings mappings)) @@ -997,7 +998,9 @@ (define (show-help) (display (G_ " --no-bootloader for 'init', do not install a bootloader")) (display (G_ " - --volatile for 'image', make the root file system volatile")) + --volatile-image for 'image', make the root file system volatile")) + (display (G_ " + --persistent-vm for 'vm', make the root file system persistent")) (display (G_ " --label=LABEL for 'image', label disk image with LABEL")) (display (G_ " @@ -1078,9 +1081,12 @@ (define %options (option '("no-bootloader" "no-grub") #f #f (lambda (opt name arg result) (alist-cons 'install-bootloader? #f result))) - (option '("volatile") #f #f + (option '("volatile-image") #f #f + (lambda (opt name arg result) + (alist-cons 'volatile-image-root? #t result))) + (option '("persistent-vm") #f #f (lambda (opt name arg result) - (alist-cons 'volatile-root? #t result))) + (alist-cons 'volatile-vm-root? #f result))) (option '("label") #t #f (lambda (opt name arg result) (alist-cons 'label arg result))) @@ -1149,7 +1155,8 @@ (define %default-options (image-size . guess) (install-bootloader? . #t) (label . #f) - (volatile-root? . #f) + (volatile-image-root? . #f) + (volatile-vm-root? . #t) (graph-backend . "graphviz"))) (define (verbosity-level opts) @@ -1219,7 +1226,8 @@ (define save-provenance? ((docker-image) docker-image-type) (else image-type))) (image-size (assoc-ref opts 'image-size)) - (volatile? (assoc-ref opts 'volatile-root?)) + (volatile? + (assoc-ref opts 'volatile-image-root?)) (shared-network? (assoc-ref opts 'container-shared-network?)) (base-image (if (operating-system? obj) @@ -1279,7 +1287,8 @@ (define (graph-backend) #:validate-reconfigure (assoc-ref opts 'validate-reconfigure) #:full-boot? (assoc-ref opts 'full-boot?) - #:volatile? (assoc-ref opts 'volatile-root?) + #:volatile-vm-root? + (assoc-ref opts 'volatile-vm-root?) #:graphic? (not (assoc-ref opts 'no-graphic?)) #:container-shared-network? (assoc-ref opts 'container-shared-network?) -- 2.34.0