From 2d12ec724ea2ab4e96c9040094194ddfa4b2692b Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Thu, 13 Jan 2022 11:35:40 +0100 Subject: [PATCH] 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 | 9 +++++++-- guix/scripts/system.scm | 21 +++++++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 92971a531c..42691570ff 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -35162,6 +35162,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} 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 @@ -35199,8 +35204,8 @@ 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 diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 98e788c657..414e931c8a 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)) @@ -998,6 +999,8 @@ (define (show-help) --no-bootloader for 'init', do not install a bootloader")) (display (G_ " --volatile for 'image', make the root file system volatile")) + (display (G_ " + --persistent for 'vm', make the root file system persistent")) (display (G_ " --label=LABEL for 'image', label disk image with LABEL")) (display (G_ " @@ -1080,7 +1083,10 @@ (define %options (alist-cons 'install-bootloader? #f result))) (option '("volatile") #f #f (lambda (opt name arg result) - (alist-cons 'volatile-root? #t result))) + (alist-cons 'volatile-image-root? #t result))) + (option '("persistent") #f #f + (lambda (opt name arg 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?)