Package: guix-patches;
Reported by: Mathieu Othacehe <m.othacehe <at> gmail.com>
Date: Fri, 31 Jul 2020 14:49:01 UTC
Severity: normal
Tags: patch
Done: Mathieu Othacehe <othacehe <at> gnu.org>
Bug is archived. No further changes may be made.
Message #11 received at 42634 <at> debbugs.gnu.org (full text, mbox):
From: Mathieu Othacehe <m.othacehe <at> gmail.com> To: 42634 <at> debbugs.gnu.org Cc: Mathieu Othacehe <othacehe <at> gnu.org> Subject: [PATCH 2/3] system: image: Add image-type support. Date: Fri, 31 Jul 2020 16:49:28 +0200
* gnu/system/image.scm (image-with-os): New macro. Rename the old "image-with-os" procedure to ... (image-with-os*): ... this new procedure, (system-image): adapt according, (raw-image-type, iso-image-type, uncompressed-iso-image-type %image-types): new variables, (lookup-image-type-by-name): new procedure. (find-image): remove it. * gnu/system/images/hurd.scm (hurd-image-type): New variable, use it to define ... (hurd-disk-image): ... this variable, using "os->image" procedure. * gnu/tests/install.scm (run-install): Rename installation-disk-image-file-system-type parameter to installation-image-type, use os->config instead of find-image to compute the image passed to system-image, (%test-iso-image-installer) adapt accordingly, (guided-installation-test): ditto. --- gnu/system/image.scm | 88 ++++++++++++++++++++++++++++++-------- gnu/system/images/hurd.scm | 13 ++++-- gnu/tests/install.scm | 46 ++++++++++---------- 3 files changed, 103 insertions(+), 44 deletions(-) diff --git a/gnu/system/image.scm b/gnu/system/image.scm index 36f56e237d..deee8a6412 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -18,6 +18,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu system image) + #:use-module (guix discovery) #:use-module (guix gexp) #:use-module (guix modules) #:use-module (guix monads) @@ -62,8 +63,15 @@ efi-disk-image iso9660-image - find-image - system-image)) + image-with-os + raw-image-type + iso-image-type + uncompressed-iso-image-type + + system-image + + %image-types + lookup-image-type-by-name)) ;;; @@ -110,6 +118,37 @@ (label "GUIX_IMAGE") (flags '(boot))))))) + +;;; +;;; Images types. +;;; + +(define-syntax-rule (image-with-os base-image os) + "Return an image inheriting from BASE-IMAGE, with the operating-system field +set to the given OS." + (image + (inherit base-image) + (operating-system os))) + +(define raw-image-type + (image-type + (name "raw") + (constructor (cut image-with-os efi-disk-image <>)))) + +(define iso-image-type + (image-type + (name "iso9660") + (constructor (cut image-with-os iso9660-image <>)))) + +(define uncompressed-iso-image-type + (image-type + (name "uncompressed-iso9660") + (constructor (cut image-with-os + (image + (inherit iso9660-image) + (compression? #f)) + <>)))) + ;; ;; Helpers. @@ -426,7 +465,7 @@ used in the image. " image-size) (else root-size)))) -(define* (image-with-os base-image os) +(define* (image-with-os* base-image os) "Return an image based on BASE-IMAGE but with the operating-system field set to OS. Also set the UUID and the size of the root partition." (define root-file-system @@ -507,7 +546,7 @@ image, depending on IMAGE format." (with-parameters ((%current-target-system target)) (let* ((os (operating-system-for-image image)) - (image* (image-with-os image os)) + (image* (image-with-os* image os)) (register-closures? (has-guix-service-type? os)) (bootcfg (operating-system-bootcfg os)) (bootloader (bootloader-configuration-bootloader @@ -539,18 +578,33 @@ image, depending on IMAGE format." #:grub-mkrescue-environment '(("MKRESCUE_SED_MODE" . "mbr_only")))))))) -(define (find-image file-system-type target) - "Find and return an image built that could match the given FILE-SYSTEM-TYPE, -built for TARGET. This is useful to adapt to interfaces written before the -addition of the <image> record." - (match file-system-type - ("iso9660" iso9660-image) - (_ (cond - ((and target - (hurd-triplet? target)) - (module-ref (resolve-interface '(gnu system images hurd)) - 'hurd-disk-image)) - (else - efi-disk-image))))) + +;; +;; Image detection. +;; + +(define (image-modules) + "Return the list of image modules." + (cons (resolve-interface '(gnu system image)) + (all-modules (map (lambda (entry) + `(,entry . "gnu/system/images/")) + %load-path) + #:warn warn-about-load-error))) + +(define %image-types + ;; The list of publically-known image types. + (delay (fold-module-public-variables (lambda (obj result) + (if (image-type? obj) + (cons obj result) + result)) + '() + (image-modules)))) + +(define (lookup-image-type-by-name name) + "Return the image type called NAME." + (or (srfi-1:find (lambda (image-type) + (string=? name (image-type-name image-type))) + (force %image-types)) + (leave (G_ "~a: no such image type.~%") name))) ;;; image.scm ends here diff --git a/gnu/system/images/hurd.scm b/gnu/system/images/hurd.scm index d87640e8e3..67f657d289 100644 --- a/gnu/system/images/hurd.scm +++ b/gnu/system/images/hurd.scm @@ -29,8 +29,10 @@ #:use-module (gnu system file-systems) #:use-module (gnu system hurd) #:use-module (gnu system image) + #:use-module (srfi srfi-26) #:export (hurd-barebones-os hurd-disk-image + hurd-image-type hurd-barebones-disk-image)) (define hurd-barebones-os @@ -82,8 +84,13 @@ (flags '(boot)) (initializer hurd-initialize-root-partition)))))) +(define hurd-image-type + (image-type + (name "hurd-raw") + (constructor (cut image-with-os hurd-disk-image <>)))) + (define hurd-barebones-disk-image (image - (inherit hurd-disk-image) - (name 'hurd-barebones-disk-image) - (operating-system hurd-barebones-os))) + (inherit + (os->image hurd-barebones-os #:type hurd-image-type)) + (name 'hurd-barebones-disk-image))) diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm index 9656e5f41f..0be9ee2892 100644 --- a/gnu/tests/install.scm +++ b/gnu/tests/install.scm @@ -218,7 +218,7 @@ reboot\n") #:imported-modules '((gnu services herd) (gnu installer tests) (guix combinators)))) - (installation-disk-image-file-system-type "ext4") + (installation-image-type "raw") (install-size 'guess) (target-size (* 2200 MiB))) "Run SCRIPT (a shell script following the system installation procedure) in @@ -228,10 +228,6 @@ packages defined in installation-os." (mlet* %store-monad ((_ (set-grafting #f)) (system (current-system)) - (target (current-target-system)) - (base-image -> (find-image - installation-disk-image-file-system-type - target)) ;; Since the installation system has no network access, ;; we cheat a little bit by adding TARGET to its GC @@ -239,18 +235,20 @@ packages defined in installation-os." ;; succeed. Also add guile-final, which is pulled in ;; through provenance.drv and may not always be present. (target (operating-system-derivation target-os)) + (base-image -> + (os->image + (operating-system-with-gc-roots + os (list target guile-final)) + #:type (lookup-image-type-by-name + installation-image-type))) (image -> - (system-image - (image - (inherit base-image) - (size install-size) - (operating-system - (operating-system-with-gc-roots - os (list target guile-final))) - ;; Do not compress to speed-up the tests. - (compression? #f) - ;; Don't provide substitutes; too big. - (substitutable? #f))))) + (system-image + (image + (inherit base-image) + (size install-size) + + ;; Don't provide substitutes; too big. + (substitutable? #f))))) (define install (with-imported-modules '((guix build utils) (gnu build marionette)) @@ -270,16 +268,16 @@ packages defined in installation-os." "-no-reboot" "-m" "1200" #$@(cond - ((string=? "ext4" installation-disk-image-file-system-type) + ((string=? "raw" installation-image-type) #~("-drive" ,(string-append "file=" #$image ",if=virtio,readonly"))) - ((string=? "iso9660" installation-disk-image-file-system-type) + ((string-contains installation-image-type "iso9660") #~("-cdrom" #$image)) (else (error - "unsupported installation-disk-image-file-system-type:" - installation-disk-image-file-system-type))) + "unsupported installation-image-type:" + installation-image-type))) "-drive" ,(string-append "file=" #$output ",if=virtio") ,@(if (file-exists? "/dev/kvm") @@ -443,8 +441,8 @@ reboot\n") %minimal-os-on-vda-source #:script %simple-installation-script-for-/dev/vda - #:installation-disk-image-file-system-type - "iso9660")) + #:installation-image-type + "uncompressed-iso9660")) (command (qemu-command/writable-image image))) (run-basic-test %minimal-os-on-vda command name))))) @@ -1309,8 +1307,8 @@ build (current-guix) and then store a couple of full system images.") #:os installation-os-for-gui-tests #:install-size install-size #:target-size target-size - #:installation-disk-image-file-system-type - "iso9660" + #:installation-image-type + "uncompressed-iso9660" #:gui-test (lambda (marionette) (gui-test-program -- 2.26.2
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.