summary refs log tree commit diff
path: root/gnu/build
diff options
context:
space:
mode:
authorGuillaume Le Vaillant <glv@posteo.net>2019-11-17 14:15:21 +0100
committerLudovic Courtès <ludo@gnu.org>2019-11-18 12:18:42 +0100
commit900ef20b1da66ad71145082c883dc12f31fafa54 (patch)
tree42c53c8031df5c1a1e62c6be076bd1ad39eeb932 /gnu/build
parent0d78d0f09c10f5c7a25ac2ab4da4197913cd3321 (diff)
downloadguix-900ef20b1da66ad71145082c883dc12f31fafa54.tar.gz
linux-boot: Don't ignore options when mounting root file system.
Fixes <https://bugs.gnu.org/37977>.

* gnu/build/linux-boot.scm (mount-root-file-system): Add the 'options'
  keyword argument and use it when mounting the root file system.
  (boot-system): Pass the root file system options to
  'mount-root-file-system'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'gnu/build')
-rw-r--r--gnu/build/linux-boot.scm19
1 files changed, 14 insertions, 5 deletions
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index d902cc416f..950a3507f2 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -357,15 +358,16 @@ the last argument of `mknod'."
           (filter-map string->number (scandir "/proc")))))
 
 (define* (mount-root-file-system root type
-                                 #:key volatile-root?)
+                                 #:key volatile-root? options)
   "Mount the root file system of type TYPE at device ROOT.  If VOLATILE-ROOT?
 is true, mount ROOT read-only and make it an overlay with a writable tmpfs
-using the kernel built-in overlayfs."
+using the kernel built-in overlayfs.  OPTIONS indicates the options to use
+to mount ROOT."
 
   (if volatile-root?
       (begin
         (mkdir-p "/real-root")
-        (mount root "/real-root" type MS_RDONLY)
+        (mount root "/real-root" type MS_RDONLY options)
         (mkdir-p "/rw-root")
         (mount "none" "/rw-root" "tmpfs")
 
@@ -382,7 +384,7 @@ using the kernel built-in overlayfs."
                "lowerdir=/real-root,upperdir=/rw-root/upper,workdir=/rw-root/work"))
       (begin
         (check-file-system root type)
-        (mount root "/root" type)))
+        (mount root "/root" type 0 options)))
 
   ;; Make sure /root/etc/mtab is a symlink to /proc/self/mounts.
   (false-if-exception
@@ -472,6 +474,12 @@ upon error."
              mounts)
         "ext4"))
 
+  (define root-fs-options
+    (any (lambda (fs)
+           (and (root-mount-point? fs)
+                (file-system-options fs)))
+         mounts))
+
   (display "Welcome, this is GNU's early boot Guile.\n")
   (display "Use '--repl' for an initrd REPL.\n\n")
 
@@ -524,7 +532,8 @@ upon error."
                               (else (file-system-label root)))))
               (mount-root-file-system (canonicalize-device-spec root)
                                       root-fs-type
-                                      #:volatile-root? volatile-root?))
+                                      #:volatile-root? volatile-root?
+                                      #:options root-fs-options))
             (mount "none" "/root" "tmpfs"))
 
         ;; Mount the specified file systems.