guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#27521] [PATCH v5] build: Add iso9660 system image generator.


From: Ludovic Courtès
Subject: [bug#27521] [PATCH v5] build: Add iso9660 system image generator.
Date: Sun, 02 Jul 2017 16:55:47 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

Hi Danny,

Danny Milosavljevic <address@hidden> skribis:

> * build-aux/hydra/gnu-system.scm (qemu-jobs): Add 'iso9660-image .
> * guix/script/system.scm: Add "iso9660-disk-image" action.
> * gnu/build/vm.scm (make-iso9660-image): New variable.  Export it.
> * gnu/system/vm.scm (iso9660-image): New variable.  Use make-iso9660-image.
> (system-disk-image): Use iso9660-image.

This all sounds like excellent news!

(BTW it’s funny to see new versions of this patch set come in regularly;
at least it acts as a reminder.  ;-))

> --- a/gnu/build/vm.scm
> +++ b/gnu/build/vm.scm
> @@ -48,7 +48,8 @@
>  
>              root-partition-initializer
>              initialize-partition-table
> -            initialize-hard-disk))
> +            initialize-hard-disk
> +            make-iso9660-image))
>  
>  ;;; Commentary:
>  ;;;
> @@ -344,6 +345,20 @@ SYSTEM-DIRECTORY is the name of the directory of the 
> 'system' derivation."
>                              (string-append "boot/grub/grub.cfg=" 
> config-file)))
>        (error "failed to create GRUB EFI image"))))
>  
> +(define (make-iso9660-image grub config-file os-drv target)
> +  "Given a GRUB package, creates an iso image as TARGET, using CONFIG-FILE as
> +Grub configuration and OS-DRV as the stuff in it."
> +  (let ((grub-mkrescue (string-append grub "/bin/grub-mkrescue")))
> +    (mkdir-p "/tmp/root/var/run")
> +    (mkdir-p "/tmp/root/run")
> +    (unless (zero? (system* grub-mkrescue "-o" target
> +                            (string-append "boot/grub/grub.cfg=" config-file)
> +                            (string-append "gnu/store=" os-drv "/..")
> +                            "var=/tmp/root/var"
> +                            "run=/tmp/root/run"
> +                            "--" "-volid" "GUIXSD"))

Let’s add #:key (volume-id "GuixSD") and then:

  "--" "-volid" (string-upcase volume-id)

> diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
> index 392737d07..5a865d24b 100644
> --- a/gnu/system/vm.scm
> +++ b/gnu/system/vm.scm
> @@ -34,6 +34,7 @@
>                  #:select (qemu-command))
>    #:use-module (gnu packages base)
>    #:use-module (gnu packages bootloaders)
> +  #:use-module (gnu packages cdrom)
>    #:use-module (gnu packages guile)
>    #:use-module (gnu packages gawk)
>    #:use-module (gnu packages bash)
> @@ -170,6 +171,51 @@ made available under the /xchg CIFS share."
>                        #:guile-for-build guile-for-build
>                        #:references-graphs references-graphs)))
>  
> +(define* (iso9660-image #:key
> +                        (name "iso9660-image")
> +                        (system (%current-system))
> +                        (qemu qemu-minimal)
> +                        os-drv
> +                        bootcfg-drv
> +                        bootloader
> +                        (inputs '()))
> +  "Return a bootable, stand-alone iso9660 image.
> +
> +INPUTS is a list of inputs (as for packages)."
> +  (expression->derivation-in-linux-vm
> +   name
> +   (with-imported-modules (source-module-closure '((gnu build vm)
> +                                                   (guix build utils)))
> +     #~(begin
> +         (use-modules (gnu build vm)
> +                      (guix build utils))
> +
> +         (let ((inputs
> +                '#$(append (list qemu parted e2fsprogs dosfstools xorriso)
> +                           (map canonical-package
> +                                (list sed grep coreutils findutils gawk))))
> +
> +               ;; This variable is unused but allows us to add INPUTS-TO-COPY
> +               ;; as inputs.
> +               (to-register
> +                '#$(map (match-lambda
> +                          ((name thing) thing)
> +                          ((name thing output) `(,thing ,output)))
> +                        inputs)))
> +
> +           (set-path-environment-variable "PATH" '("bin" "sbin") inputs)
> +           (mkdir-p "/tmp")
> +           ;(mount "none" "/tmp" "tmpfs")
> +           ;(mkdir-p "/tmp/extra")
> +           (make-iso9660-image #$(bootloader-package bootloader)
> +                               #$bootcfg-drv
> +                               #$os-drv
> +                               "/xchg/guixsd.iso")
> +           (reboot))))
> +   #:system system
> +   #:make-disk-image? #f
> +   #:references-graphs inputs))

Since this doesn’t have much to do with VMs, what about adding these
things to (gnu system iso9660) and (gnu build iso9660)?

They may have to use procedure from the ‘vm’ modules, but that’s OK.

>  (define* (qemu-image #:key
>                       (name "qemu-image")
>                       (system (%current-system))
> @@ -308,19 +354,30 @@ to USB sticks meant to be read-only."
>  
>      (mlet* %store-monad ((os-drv   (operating-system-derivation os))
>                           (bootcfg  (operating-system-bootcfg os)))
> -      (qemu-image #:name name
> -                  #:os-drv os-drv
> -                  #:bootcfg-drv bootcfg
> -                  #:bootloader (bootloader-configuration-bootloader
> -                                (operating-system-bootloader os))
> -                  #:disk-image-size disk-image-size
> -                  #:disk-image-format "raw"
> -                  #:file-system-type file-system-type
> -                  #:file-system-label root-label
> -                  #:copy-inputs? #t
> -                  #:register-closures? #t
> -                  #:inputs `(("system" ,os-drv)
> -                             ("bootcfg" ,bootcfg))))))
> +      (if (string=? "iso9660" file-system-type)
> +          (iso9660-image #:name name
> +                         #:os-drv os-drv
> +                         #:bootcfg-drv bootcfg
> +                         #:bootloader (bootloader-configuration-bootloader
> +                                        (operating-system-bootloader os))
> +                         #:inputs `(("system" ,os-drv)
> +                                    ("bootcfg" ,bootcfg)))
> +          (qemu-image #:name name

We can also remove this ‘if’: it’s not natural for ‘qemu-image’ to
produce something that’s not a “QEMU image.”

Could you update “Invoking guix system” accordingly?

We could add a installation test that boots from an ISO image, but we
can do that later if you want.

Thank you!

Ludo’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]