From d4e06997e4d6288111801c852b0b8a10177815e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 13 Nov 2025 22:39:32 +0100 Subject: [PATCH] services: hurd-vm: Support persistent images again. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes a regression introduced in bab6434f5855b92631615fdd8a2d2a225da28359 whereby following the example from the manual regarding non-volatile images would no longer work. * gnu/services/virtualization.scm (hurd-vm-shepherd-service): Pass ‘image’ to ‘system-image’ only if it’s an image. * doc/guix.texi (Virtualization Services): Explicitly say that the ‘image’ field can contain a file name. Remove use of ‘const’ for the ‘image’ field in persistent image example and adjust text. Fixes: guix/guix#4130 Reported-by: Maxim Cournoyer Change-Id: I1a81ce27fb45978a681310b8a8788ab671b3edf8 --- doc/guix.texi | 15 ++++++++++----- gnu/services/virtualization.scm | 4 +++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index df75ebd593f..89fa609124d 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -40911,6 +40911,10 @@ The image type name. Use @code{'hurd-qcow2} for a 32-bit image or The image object representing the disk image of this virtual machine (@pxref{System Images}). +Alternatively, this can be the file name (a string) of an image, which +is useful if you want the image to persist across service restarts---see +example below. + @item @code{disk-size} (default: @code{'guess}) The size of the disk image. @@ -41009,15 +41013,16 @@ with the following non-volatile secrets, unless they already exist: @end table @end deftp -Note that by default the VM image is volatile, i.e., once stopped the -contents are lost. If you want a stateful image instead, override the -configuration's @code{image} and @code{options} without -the @code{--snapshot} flag using something along these lines: +Note that by default the VM image is volatile---i.e., once the service +is stopped, the contents are lost. If you want a persistent image +instead, override the configuration's @code{image} and @code{options} +without the @option{--snapshot} flag using something along these lines: @lisp (service hurd-vm-service-type (hurd-vm-configuration - (image (const "/out/of/store/writable/hurd.img")) + ;; Specify an out-of-store, persistent image. + (image "/out/of/store/writable/hurd.img") (options '()))) @end lisp diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index 847c4ca7dda..bd1a5b870ce 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -1904,7 +1904,9 @@ is added to the OS specified in CONFIG." '()) #$@net-options #$@options - "--hda" #+(system-image image) + "--hda" #+(if (image? image) + (system-image image) + image) ;; Cause the service to be respawned if the guest ;; reboots (it can reboot for instance if it did not