~ruther/guix-local

03ddfaf5fb5fab78f7180089158bea0494072b3c — Ludovic Courtès 12 years ago e20fd1b
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.
3 files changed, 17 insertions(+), 10 deletions(-)

M gnu/system/vm.scm
M guix/build/linux-initrd.scm
M guix/build/vm.scm
M gnu/system/vm.scm => gnu/system/vm.scm +7 -4
@@ 188,13 188,15 @@ made available under the /xchg CIFS share."
                     (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 @@ such as /etc files."
            (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 @@ environment with the store shared with the host."
    (file-systems (list (file-system
                          (mount-point "/")
                          (device "/dev/vda1")
                          (type "ext3"))
                          (type "ext4"))
                        (file-system
                          (mount-point (%store-prefix))
                          (device "store")

M guix/build/linux-initrd.scm => guix/build/linux-initrd.scm +5 -2
@@ 212,7 212,7 @@ UNIONFS."
                                    "/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 @@ FLAGS must be a list of symbols."
                      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 @@ QEMU-GUEST-NETWORKING? is true, mounting the file systems specified in MOUNTS,
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

M guix/build/vm.scm => guix/build/vm.scm +5 -4
@@ 183,7 183,7 @@ as created and modified at the Epoch."
(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 @@ as created and modified at the Epoch."
                                      (- 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.