summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build-aux/hydra/demo-os.scm14
-rw-r--r--doc/guix.texi37
-rw-r--r--gnu/services/base.scm9
-rw-r--r--gnu/system/file-systems.scm18
-rw-r--r--gnu/system/install.scm5
5 files changed, 67 insertions, 16 deletions
diff --git a/build-aux/hydra/demo-os.scm b/build-aux/hydra/demo-os.scm
index 89b67aabe3..9164500d70 100644
--- a/build-aux/hydra/demo-os.scm
+++ b/build-aux/hydra/demo-os.scm
@@ -44,13 +44,13 @@
(file-systems
;; We provide a dummy file system for /, but that's OK because the VM build
;; code will automatically declare the / file system for us.
- (list (file-system
- (mount-point "/")
- (device "dummy")
- (type "dummy"))
- ;; %fuse-control-file-system ; needs fuse.ko
- ;; %binary-format-file-system ; needs binfmt.ko
- ))
+ (cons* (file-system
+ (mount-point "/")
+ (device "dummy")
+ (type "dummy"))
+ ;; %fuse-control-file-system ; needs fuse.ko
+ ;; %binary-format-file-system ; needs binfmt.ko
+ %base-file-systems))
(users (list (user-account
(name "guest")
diff --git a/doc/guix.texi b/doc/guix.texi
index fb6f897bb2..2b05a75be4 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2826,10 +2826,11 @@ only a root account would look like this:
;; Assuming /dev/sdX is the target hard disk, and /dev/sdX1 the
;; target root file system.
(bootloader (grub-configuration (device "/dev/sdX")))
- (file-systems (list (file-system
+ (file-systems (cons (file-system
(device "/dev/sdX1")
(mount-point "/")
- (type "ext4")))))
+ (type "ext4"))
+ %base-file-systems)))
@end example
@noindent
@@ -2925,10 +2926,11 @@ kernel, initial RAM disk, and boot loader looks like this:
(locale "fr_FR.UTF-8")
(bootloader (grub-configuration
(device "/dev/sda")))
- (file-systems (list (file-system
+ (file-systems (cons (file-system
(device "/dev/sda1") ; or partition label
(mount-point "/")
- (type "ext3"))))
+ (type "ext3"))
+ %base-file-systems))
(users (list (user-account
(name "alice")
(password "")
@@ -3055,6 +3057,32 @@ errors before being mounted.
@end table
@end deftp
+The @code{(gnu system file-systems)} exports the following useful
+variables.
+
+@defvr {Scheme Variable} %base-file-systems
+These are essential file systems that are required on normal systems,
+such as @var{%devtmpfs-file-system} (see below.) Operating system
+declarations should always contain at least these.
+@end defvr
+
+@defvr {Scheme Variable} %devtmpfs-file-system
+The @code{devtmpfs} file system to be mounted on @file{/dev}. This is a
+requirement for udev (@pxref{Base Services, @code{udev-service}}).
+@end defvr
+
+@defvr {Scheme Variable} %binary-format-file-system
+The @code{binfmt_misc} file system, which allows handling of arbitrary
+executable file types to be delegated to user space. This requires the
+@code{binfmt.ko} kernel module to be loaded.
+@end defvr
+
+@defvr {Scheme Variable} %fuse-control-file-system
+The @code{fusectl} file system, which allows unprivileged users to mount
+and unmount user-space FUSE file systems. This requires the
+@code{fuse.ko} kernel module to be loaded.
+@end defvr
+
@node User Accounts
@subsection User Accounts
@@ -3245,6 +3273,7 @@ passed to @command{guix-daemon}.
Run @var{udev}, which populates the @file{/dev} directory dynamically.
@end deffn
+
@node Networking Services
@subsubsection Networking Services
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index ae12c8e93d..42e232c9ac 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -473,8 +473,13 @@ passed to @command{guix-daemon}."
(with-monad %store-monad
(return (service
(provision '(udev))
- (requirement '(root-file-system))
- (documentation "Populate the /dev directory.")
+
+ ;; Udev needs /dev to be a 'devtmpfs' mount so that new device
+ ;; nodes can be added: see
+ ;; <http://www.linuxfromscratch.org/lfs/view/development/chapter07/udev.html>.
+ (requirement '(root-file-system file-system-/dev))
+
+ (documentation "Populate the /dev directory, dynamically.")
(start #~(lambda ()
(define udevd
(string-append #$udev "/libexec/udev/udevd"))
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 7852a6ab26..0c2021d7b4 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -30,7 +30,10 @@
file-system-options
%fuse-control-file-system
- %binary-format-file-system))
+ %binary-format-file-system
+ %devtmpfs-file-system
+
+ %base-file-systems))
;;; Commentary:
;;;
@@ -72,4 +75,17 @@
(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)))
+
+(define %base-file-systems
+ ;; List of basic file systems to be mounted. Note that /proc and /sys are
+ ;; currently mounted by the initrd.
+ (list %devtmpfs-file-system))
+
;;; file-systems.scm ends here
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 18fd587ead..d4a32609ba 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -117,10 +117,11 @@ Use Alt-F2 for documentation.
(file-systems
;; Note: the disk image build code overrides this root file system with
;; the appropriate one.
- (list (file-system
+ (cons (file-system
(mount-point "/")
(device "gnu-disk-image")
- (type "ext4"))))
+ (type "ext4"))
+ %base-file-systems))
(users (list (user-account
(name "guest")