From 03ddfaf5fb5fab78f7180089158bea0494072b3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Sat, 3 May 2014 12:16:10 +0200
Subject: [PATCH] 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.
---
 gnu/system/vm.scm           | 11 +++++++----
 guix/build/linux-initrd.scm |  7 +++++--
 guix/build/vm.scm           |  9 +++++----
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index c080317415c..867e01ad5fb 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -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")
diff --git a/guix/build/linux-initrd.scm b/guix/build/linux-initrd.scm
index 1e0d6e27ec8..fd6c0c4673c 100644
--- a/guix/build/linux-initrd.scm
+++ b/guix/build/linux-initrd.scm
@@ -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
diff --git a/guix/build/vm.scm b/guix/build/vm.scm
index 33c898d9687..1d1abad1ddb 100644
--- a/guix/build/vm.scm
+++ b/guix/build/vm.scm
@@ -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.
-- 
GitLab