vm: Use 'invoke' instead of 'system*'.

* gnu/build/vm.scm (load-in-linux-vm, initialize-partition-table)
(create-ext-file-system, create-fat-file-system)
(install-efi, make-iso9660-image): Use 'invoke' instead
of (unless (zero? (system* ...)) (error ...)).
This commit is contained in:
Ludovic Courtès 2018-03-15 16:30:41 +01:00
parent 0ab5aa056d
commit e1d0f2aa87
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 47 additions and 58 deletions

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org> ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
@ -121,10 +121,8 @@ the #:references-graphs parameter of 'derivation'."
(format #t "creating ~a image of ~,2f MiB...~%" (format #t "creating ~a image of ~,2f MiB...~%"
disk-image-format (/ disk-image-size (expt 2 20))) disk-image-format (/ disk-image-size (expt 2 20)))
(force-output) (force-output)
(unless (zero? (system* "qemu-img" "create" "-f" disk-image-format (invoke "qemu-img" "create" "-f" disk-image-format output
output (number->string disk-image-size)))
(number->string disk-image-size)))
(error "qemu-img failed")))
(mkdir "xchg") (mkdir "xchg")
@ -136,31 +134,29 @@ the #:references-graphs parameter of 'derivation'."
graph-files)) graph-files))
(_ #f)) (_ #f))
(unless (zero? (apply invoke qemu "-nographic" "-no-reboot"
(apply system* qemu "-nographic" "-no-reboot" "-m" (number->string memory-size)
"-m" (number->string memory-size) "-object" "rng-random,filename=/dev/urandom,id=guixsd-vm-rng"
"-object" "rng-random,filename=/dev/urandom,id=guixsd-vm-rng" "-device" "virtio-rng-pci,rng=guixsd-vm-rng"
"-device" "virtio-rng-pci,rng=guixsd-vm-rng" "-virtfs"
"-virtfs" (string-append "local,id=store_dev,path="
(string-append "local,id=store_dev,path=" (%store-directory)
(%store-directory) ",security_model=none,mount_tag=store")
",security_model=none,mount_tag=store") "-virtfs"
"-virtfs" (string-append "local,id=xchg_dev,path=xchg"
(string-append "local,id=xchg_dev,path=xchg" ",security_model=none,mount_tag=xchg")
",security_model=none,mount_tag=xchg") "-kernel" linux
"-kernel" linux "-initrd" initrd
"-initrd" initrd "-append" (string-append "console=ttyS0 --load="
"-append" (string-append "console=ttyS0 --load=" builder)
builder) (append
(append (if make-disk-image?
(if make-disk-image? `("-device" "virtio-blk,drive=myhd"
`("-device" "virtio-blk,drive=myhd" "-drive" ,(string-append "if=none,file=" output
"-drive" ,(string-append "if=none,file=" output ",format=" disk-image-format
",format=" disk-image-format ",id=myhd"))
",id=myhd")) '())
'()) arch-specific-flags))
arch-specific-flags)))
(error "qemu failed" qemu))
;; When MAKE-DISK-IMAGE? is true, the image is in OUTPUT already. ;; When MAKE-DISK-IMAGE? is true, the image is in OUTPUT already.
(unless make-disk-image? (unless make-disk-image?
@ -240,10 +236,9 @@ actual /dev name based on DEVICE."
partition-size) partition-size)
partitions) partitions)
", ")) ", "))
(unless (zero? (apply system* "parted" "--script" (apply invoke "parted" "--script"
device "mklabel" label-type device "mklabel" label-type
(options partitions offset))) (options partitions offset))
(error "failed to create partition table"))
;; Set the 'device' field of each partition. ;; Set the 'device' field of each partition.
(reverse (reverse
@ -265,15 +260,14 @@ actual /dev name based on DEVICE."
"Create an ext-family file system of TYPE on PARTITION. If LABEL is true, "Create an ext-family file system of TYPE on PARTITION. If LABEL is true,
use that as the volume name. If UUID is true, use it as the partition UUID." use that as the volume name. If UUID is true, use it as the partition UUID."
(format #t "creating ~a partition...\n" type) (format #t "creating ~a partition...\n" type)
(unless (zero? (apply system* (string-append "mkfs." type) (apply invoke (string-append "mkfs." type)
"-F" partition "-F" partition
`(,@(if label `(,@(if label
`("-L" ,label) `("-L" ,label)
'()) '())
,@(if uuid ,@(if uuid
`("-U" ,(uuid->string uuid)) `("-U" ,(uuid->string uuid))
'())))) '()))))
(error "failed to create partition")))
(define* (create-fat-file-system partition (define* (create-fat-file-system partition
#:key label uuid) #:key label uuid)
@ -282,11 +276,8 @@ will be determined based on file system size. If LABEL is true, use that as the
volume name." volume name."
;; FIXME: UUID is ignored! ;; FIXME: UUID is ignored!
(format #t "creating FAT partition...\n") (format #t "creating FAT partition...\n")
(unless (zero? (apply system* "mkfs.fat" partition (apply invoke "mkfs.fat" partition
(if label (if label `("-n" ,label) '())))
`("-n" ,label)
'())))
(error "failed to create FAT partition")))
(define* (format-partition partition type (define* (format-partition partition type
#:key label uuid) #:key label uuid)
@ -388,12 +379,11 @@ SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation."
(setenv "TMPDIR" esp) (setenv "TMPDIR" esp)
(mkdir-p efi-directory) (mkdir-p efi-directory)
(unless (zero? (system* grub-mkstandalone "-O" (car efi-targets) (invoke grub-mkstandalone "-O" (car efi-targets)
"-o" (string-append efi-directory "/" "-o" (string-append efi-directory "/"
(cdr efi-targets)) (cdr efi-targets))
;; Graft the configuration file onto the image. ;; Graft the configuration file onto the image.
(string-append "boot/grub/grub.cfg=" config-file))) (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 (define* (make-iso9660-image grub config-file os-drv target
#:key (volume-id "GuixSD_image") (volume-uuid #f) #:key (volume-id "GuixSD_image") (volume-uuid #f)
@ -416,8 +406,8 @@ GRUB configuration and OS-DRV as the stuff in it."
#:deduplicate? #f)) #:deduplicate? #f))
closures)) closures))
(unless (zero? (apply system* (apply invoke
`(,grub-mkrescue "-o" ,target `(,grub-mkrescue "-o" ,target
,(string-append "boot/grub/grub.cfg=" config-file) ,(string-append "boot/grub/grub.cfg=" config-file)
,(string-append "gnu/store=" os-drv "/..") ,(string-append "gnu/store=" os-drv "/..")
"etc=/tmp/root/etc" "etc=/tmp/root/etc"
@ -435,8 +425,7 @@ GRUB configuration and OS-DRV as the stuff in it."
(not (char=? #\- value))) (not (char=? #\- value)))
(iso9660-uuid->string (iso9660-uuid->string
volume-uuid))) volume-uuid)))
`())))) `())))))
(error "failed to create ISO9660 image"))))
(define* (initialize-hard-disk device (define* (initialize-hard-disk device
#:key #:key