Merge branch 'master' into dbus-update
[jackhill/guix/guix.git] / gnu / system / file-systems.scm
index a3230dc..0a4b385 100644 (file)
@@ -47,9 +47,9 @@
             %binary-format-file-system
             %shared-memory-file-system
             %pseudo-terminal-file-system
-            %devtmpfs-file-system
             %immutable-store
             %control-groups
+            %elogind-file-systems
 
             %base-file-systems
             %container-file-systems
@@ -99,9 +99,8 @@
                     (default #t))
   (create-mount-point? file-system-create-mount-point? ; Boolean
                        (default #f))
-  (dependencies     file-system-dependencies      ; list of strings (mount
-                                                  ; points depended on)
-                    (default '())))
+  (dependencies     file-system-dependencies      ; list of <file-system>
+                    (default '())))               ; or <mapped-device>
 
 (define-inlinable (file-system-needed-for-boot? fs)
   "Return true if FS has the 'needed-for-boot?' flag set, or if it's the root
@@ -185,17 +184,6 @@ UUID representation."
     (type "binfmt_misc")
     (check? #f)))
 
-(define %devtmpfs-file-system
-  ;; /dev as a 'devtmpfs' file system, needed for udev.
-  (file-system
-    (device "none")
-    (mount-point "/dev")
-    (type "devtmpfs")
-    (check? #f)
-
-    ;; Mount it from the initrd so /dev/pts & co. can then be mounted over it.
-    (needed-for-boot? #t)))
-
 (define %tty-gid
   ;; ID of the 'tty' group.  Allocate it statically to make it easy to refer
   ;; to it from here and from the 'tty' group definitions.
@@ -237,29 +225,54 @@ UUID representation."
     (flags '(read-only bind-mount))))
 
 (define %control-groups
-  (cons (file-system
-          (device "cgroup")
-          (mount-point "/sys/fs/cgroup")
+  (let ((parent (file-system
+                  (device "cgroup")
+                  (mount-point "/sys/fs/cgroup")
+                  (type "tmpfs")
+                  (check? #f))))
+    (cons parent
+          (map (lambda (subsystem)
+                 (file-system
+                   (device "cgroup")
+                   (mount-point (string-append "/sys/fs/cgroup/" subsystem))
+                   (type "cgroup")
+                   (check? #f)
+                   (options subsystem)
+                   (create-mount-point? #t)
+
+                   ;; This must be mounted after, and unmounted before the
+                   ;; parent directory.
+                   (dependencies (list parent))))
+               '("cpuset" "cpu" "cpuacct" "memory" "devices" "freezer"
+                 "blkio" "perf_event" "hugetlb")))))
+
+(define %elogind-file-systems
+  ;; We don't use systemd, but these file systems are needed for elogind,
+  ;; which was extracted from systemd.
+  (list (file-system
+          (device "none")
+          (mount-point "/run/systemd")
+          (type "tmpfs")
+          (check? #f)
+          (flags '(no-suid no-dev no-exec))
+          (options "mode=0755")
+          (create-mount-point? #t))
+        (file-system
+          (device "none")
+          (mount-point "/run/user")
           (type "tmpfs")
-          (check? #f))
-        (map (lambda (subsystem)
-               (file-system
-                 (device "cgroup")
-                 (mount-point (string-append "/sys/fs/cgroup/" subsystem))
-                 (type "cgroup")
-                 (check? #f)
-                 (options subsystem)
-                 (create-mount-point? #t)))
-             '("cpuset" "cpu" "cpuacct" "memory" "devices" "freezer"
-               "blkio" "perf_event" "hugetlb"))))
+          (check? #f)
+          (flags '(no-suid no-dev no-exec))
+          (options "mode=0755")
+          (create-mount-point? #t))))
 
 (define %base-file-systems
   ;; List of basic file systems to be mounted.  Note that /proc and /sys are
   ;; currently mounted by the initrd.
-  (append (list %devtmpfs-file-system
-                %pseudo-terminal-file-system
+  (append (list %pseudo-terminal-file-system
                 %shared-memory-file-system
                 %immutable-store)
+          %elogind-file-systems
           %control-groups))
 
 ;; File systems for Linux containers differ from %base-file-systems in that