vm: Make root file system type a parameter, and default to ext4.

* gnu/system/vm.scm (qemu-image): Add #:file-system-type parameter.
  Pass it to 'initialize-hard-disk'.
* guix/build/linux-initrd.scm (mount-root-file-system): Always honor
  TYPE.
  (boot-system): Change #:root-fs-type to default to "ext4".  Update
  docstring.
* guix/build/vm.scm (initialize-hard-disk): Remove #:mkfs parameter; add
  #:file-system-type.  Adjust 'mkfs' invocation and 'mount' call to
  honor #:file-system-type.
This commit is contained in:
Ludovic Courtès 2014-05-03 12:16:10 +02:00
parent e20fd1bf80
commit 03ddfaf5fb
3 changed files with 17 additions and 10 deletions

View file

@ -188,13 +188,15 @@ (define* (qemu-image #:key
(system (%current-system))
(qemu qemu-headless)
(disk-image-size (* 100 (expt 2 20)))
(file-system-type "ext4")
grub-configuration
(initialize-store? #f)
(populate #f)
(inputs-to-copy '()))
"Return a bootable, stand-alone QEMU image. The returned image is a full
disk image, with a GRUB installation that uses GRUB-CONFIGURATION as its
configuration file (GRUB-CONFIGURATION must be the name of a file in the VM.)
"Return a bootable, stand-alone QEMU image, with a root partition of type
FILE-SYSTEM-TYPE. The returned image is a full disk image, with a GRUB
installation that uses GRUB-CONFIGURATION as its configuration
file (GRUB-CONFIGURATION must be the name of a file in the VM.)
INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied
into the image being built. When INITIALIZE-STORE? is true, initialize the
@ -235,6 +237,7 @@ (define* (qemu-image #:key
(initialize-hard-disk #:grub.cfg #$grub-configuration
#:closures-to-copy graphs
#:disk-image-size #$disk-image-size
#:file-system-type #$file-system-type
#:initialize-store? #$initialize-store?
#:directives '#$populate)
(reboot))))
@ -315,7 +318,7 @@ (define (virtualized-operating-system os)
(file-systems (list (file-system
(mount-point "/")
(device "/dev/vda1")
(type "ext3"))
(type "ext4"))
(file-system
(mount-point (%store-prefix))
(device "store")

View file

@ -212,7 +212,7 @@ (define* (mount-root-file-system root type
"/rw-root=RW:/real-root=RO"
"/root"))
(error "unionfs failed")))
(mount root "/root" "ext3")))
(mount root "/root" type)))
(lambda args
(format (current-error-port) "exception while mounting '~a': ~s~%"
root args)
@ -249,7 +249,7 @@ (define* (boot-system #:key
qemu-guest-networking?
guile-modules-in-chroot?
volatile-root? unionfs
(root-fs-type "ext3")
(root-fs-type "ext4")
(mounts '()))
"This procedure is meant to be called from an initrd. Boot a system by
first loading LINUX-MODULES, then setting up QEMU guest networking if
@ -257,6 +257,9 @@ (define* (boot-system #:key
and finally booting into the new root if any. The initrd supports kernel
command-line options '--load', '--root', and '--repl'.
Mount the root file system, of type ROOT-FS-TYPE, specified by the '--root'
command-line argument, if any.
MOUNTS must be a list suitable for 'mount-file-system'.
When GUILE-MODULES-IN-CHROOT? is true, make core Guile modules available in

View file

@ -183,7 +183,7 @@ (define (reset-timestamps directory)
(define* (initialize-hard-disk #:key
grub.cfg
disk-image-size
(mkfs "mkfs.ext3")
(file-system-type "ext4")
initialize-store?
(closures-to-copy '())
(directives '()))
@ -192,13 +192,14 @@ (define* (initialize-hard-disk #:key
(- disk-image-size (* 5 (expt 2 20))))
(error "failed to create partition table"))
(display "creating ext3 partition...\n")
(unless (zero? (system* mkfs "-F" "/dev/sda1"))
(format #t "creating ~a partition...\n" file-system-type)
(unless (zero? (system* (string-append "mkfs." file-system-type)
"-F" "/dev/sda1"))
(error "failed to create partition"))
(display "mounting partition...\n")
(mkdir "/fs")
(mount "/dev/sda1" "/fs" "ext3")
(mount "/dev/sda1" "/fs" file-system-type)
(when (pair? closures-to-copy)
;; Populate the store.