~ruther/guix-local

d57cab764122af69d52d8cc9c843456044e5d7bc — Josselin Poiret 2 years ago 519c3b7
image: Add mbr-raw-image-type and use by default.

* gnu/system/image.scm (mbr-disk-image, mbr-raw-image-type): New variables.
(qcow2-image-type): Inherit mbr-disk-image.
* guix/scripts/system.scm (%default-options): Use mbr-raw-image-type by
default.
* gnu/tests/install.scm (run-install): Use mbr-raw in the tests.
* doc/guix-cookbook.texi (Guix System Image API): Update the list of image
types.
* doc/guix.texi (Invoking guix system, System Images, image-type Reference):
Add mbr-raw and switch documented default to it.
5 files changed, 39 insertions(+), 14 deletions(-)

M doc/guix-cookbook.texi
M doc/guix.texi
M gnu/system/image.scm
M gnu/tests/install.scm
M guix/scripts/system.scm
M doc/guix-cookbook.texi => doc/guix-cookbook.texi +9 -3
@@ 2019,17 2019,23 @@ One can run:
mathieu@@cervin:~$ guix system --list-image-types
The available image types are:

   - unmatched-raw
   - rock64-raw
   - pinebook-pro-raw
   - pine64-raw
   - novena-raw
   - hurd-raw
   - hurd-qcow2
   - qcow2
   - iso9660
   - uncompressed-iso9660
   - tarball
   - efi-raw
   - arm64-raw
   - arm32-raw
   - iso9660
   - mbr-raw
   - docker
   - wsl2
   - raw-with-offset
   - efi32-raw
@end example

and by writing an @code{operating-system} file based on

M doc/guix.texi => doc/guix.texi +10 -6
@@ 40884,7 40884,7 @@ QEMU monitor and the VM.
@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
defaults to @code{efi-raw}.  When its value is @code{iso9660}, the
defaults to @code{mbr-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


@@ 40903,7 40903,7 @@ qemu-system-x86_64 -enable-kvm -hda /tmp/my-image.qcow2 -m 1000 \
                   -bios $(guix build ovmf)/share/firmware/ovmf_x64.bin
@end example

When using the @code{efi-raw} image type, a raw disk image is produced;
When using the @code{mbr-raw} image type, a raw disk image is produced;
it can be copied as is to a USB stick, for instance.  Assuming
@code{/dev/sdc} is the device corresponding to a USB stick, one can copy
the image to it using the following command:


@@ 41041,7 41041,7 @@ of the image.
For the @code{image} action, create an image with given @var{type}.

When this option is omitted, @command{guix system} uses the
@code{efi-raw} image type.
@code{mbr-raw} image type.

@cindex ISO-9660 format
@cindex CD image format


@@ 45193,7 45193,7 @@ then directly boot from it, without any kind of installation procedure.

The @command{guix system image} command is able to turn an operating
system definition into a bootable image.  This command supports
different image types, such as @code{efi-raw}, @code{iso9660} and
different image types, such as @code{mbr-raw}, @code{iso9660} and
@code{docker}.  Any modern @code{x86_64} machine will probably be able
to boot from an @code{iso9660} image.  However, there are a few machines
out there that require specific image types.  Those machines, in general


@@ 45545,6 45545,10 @@ record.
There are several @code{image-type} records provided by the @code{(gnu
system image)} and the @code{(gnu system images @dots{})} modules.

@defvar mbr-raw-image-type
Build an image based on the @code{mbr-disk-image} image.
@end defvar

@defvar efi-raw-image-type
Build an image based on the @code{efi-disk-image} image.
@end defvar


@@ 45554,7 45558,7 @@ Build an image based on the @code{efi32-disk-image} image.
@end defvar

@defvar qcow2-image-type
Build an image based on the @code{efi-disk-image} image but with the
Build an image based on the @code{mbr-disk-image} image but with the
@code{compressed-qcow2} image format.
@end defvar



@@ 45625,7 45629,7 @@ wsl -d Guix

So, if we get back to the @code{guix system image} command taking an
@code{operating-system} declaration as argument.  By default, the
@code{efi-raw-image-type} is used to turn the provided
@code{mbr-raw-image-type} is used to turn the provided
@code{operating-system} into an actual bootable image.

To use a different @code{image-type}, the @code{--image-type} option can

M gnu/system/image.scm => gnu/system/image.scm +17 -2
@@ 76,6 76,7 @@
            esp32-partition
            root-partition

            mbr-disk-image
            efi-disk-image
            iso9660-image
            docker-image


@@ 84,6 85,7 @@
            raw-with-offset-disk-image

            image-with-os
            mbr-raw-image-type
            efi-raw-image-type
            efi32-raw-image-type
            qcow2-image-type


@@ 145,6 147,15 @@ parent image record."
   (flags '(boot))
   (initializer (gexp initialize-root-partition))))

(define mbr-disk-image
  (image-without-os
   (format 'disk-image)
   (partition-table-type 'mbr)
   (partitions
    (list (partition
           (inherit root-partition)
           (offset root-offset))))))

(define efi-disk-image
  (image-without-os
   (format 'disk-image)


@@ 201,6 212,11 @@ set to the given OS."
   (inherit base-image)
   (operating-system os)))

(define mbr-raw-image-type
  (image-type
   (name 'mbr-raw)
   (constructor (cut image-with-os mbr-disk-image <>))))

(define efi-raw-image-type
  (image-type
   (name 'efi-raw)


@@ 216,8 232,7 @@ set to the given OS."
   (name 'qcow2)
   (constructor (cut image-with-os
                 (image
                  (inherit efi-disk-image)
                  (partition-table-type 'mbr)
                  (inherit mbr-disk-image)
                  (name 'image.qcow2)
                  (format 'compressed-qcow2))
                 <>))))

M gnu/tests/install.scm => gnu/tests/install.scm +2 -2
@@ 229,7 229,7 @@ reboot\n")
                                                (gnu installer tests)
                                                (guix combinators))))
                      (uefi-support? #f)
                      (installation-image-type 'efi-raw)
                      (installation-image-type 'mbr-raw)
                      (install-size 'guess)
                      (target-size (* 2200 MiB))
                      (number-of-disks 1))


@@ 291,7 291,7 @@ such as for RAID systems."
                       '("-bios" #$uefi-firmware)
                       '())
                 #$@(cond
                     ((eq? 'efi-raw installation-image-type)
                     ((eq? 'mbr-raw installation-image-type)
                      #~("-drive"
                         ,(string-append "file=" #$image
                                         ",if=virtio,readonly")))

M guix/scripts/system.scm => guix/scripts/system.scm +1 -1
@@ 1169,7 1169,7 @@ Some ACTIONS support additional ARGS.\n"))
    (debug . 0)
    (verbosity . #f)                              ;default
    (validate-reconfigure . ,ensure-forward-reconfigure)
    (image-type . efi-raw)
    (image-type . mbr-raw)
    (image-size . guess)
    (install-bootloader? . #t)
    (label . #f)