guix system: Add 'disk-image' action.

* guix/scripts/system.scm (show-help): Add 'disk-image'.
  (guix-system)[parse-options]: Support 'disk-image' action.
  [option-arguments]: Likewise.
  Handle the 'disk-image' action.
* doc/guix.texi (Invoking guix system): Document 'disk-image'.
This commit is contained in:
Ludovic Courtès 2014-05-22 23:22:15 +02:00
parent 1e77fedb46
commit fb729425dc
2 changed files with 26 additions and 6 deletions

View File

@ -3236,9 +3236,23 @@ Build a virtual machine that contain the operating system declared in
The VM shares its store with the host system.
@item vm-image
Return a virtual machine image of the operating system declared in
@var{file} that stands alone. Use the @option{--image-size} option to
specify the size of the image.
@itemx disk-image
Return a virtual machine or disk image of the operating system declared
in @var{file} that stands alone. Use the @option{--image-size} option
to specify the size of the image.
When using @code{vm-image}, the returned image is in qcow2 format, which
the QEMU emulator can efficiently use.
When using @code{disk-image}, 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 on it
using the following command:
@example
# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
@end example
@end table
@var{options} can contain any of the common build options provided by

View File

@ -129,6 +129,8 @@ Build the operating system declared in FILE according to ACTION.\n"))
(display (_ "\
- 'vm-image', build a freestanding virtual machine image\n"))
(display (_ "\
- 'disk-image', build a disk image, suitable for a USB stick\n"))
(display (_ "\
- 'init', initialize a root file system to run GNU.\n"))
(show-build-options-help)
@ -191,7 +193,7 @@ Build the operating system declared in FILE according to ACTION.\n"))
(alist-cons 'argument arg result)
(let ((action (string->symbol arg)))
(case action
((build vm vm-image init)
((build vm vm-image disk-image init)
(alist-cons 'action action result))
(else (leave (_ "~a: unknown action~%")
action))))))
@ -214,7 +216,7 @@ Build the operating system declared in FILE according to ACTION.\n"))
action))
(case action
((build vm vm-image)
((build vm vm-image disk-image)
(unless (= count 1)
(fail)))
((init)
@ -238,7 +240,11 @@ Build the operating system declared in FILE according to ACTION.\n"))
(system-qemu-image os
#:disk-image-size size)))
((vm)
(system-qemu-image/shared-store-script os))))
(system-qemu-image/shared-store-script os))
((disk-image)
(let ((size (assoc-ref opts 'image-size)))
(system-disk-image os
#:disk-image-size size)))))
(store (open-connection))
(dry? (assoc-ref opts 'dry-run?))
(drv (run-with-store store mdrv))