From 7f239fd33ff7bf2f1ec48de37f14479699d4096f Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 22 Jul 2014 23:13:53 +0200 Subject: system: Add 'file-system' decl. for /dev/pts, and use the right options. Fixes . * gnu/system/file-systems.scm (%devtmpfs-file-system): Add 'needed-for-boot?' field. (%tty-gid, %pseudo-terminal-file-system): New variables. (%base-file-systems): Add %PSEUDO-TERMINAL-FILE-SYSTEM. * gnu/services/base.scm (udev-service): Remove dependency on 'file-system-/dev'. * gnu/system/shadow.scm (%base-groups): Add 'id' field for group 'tty'. * guix/build/linux-initrd.scm (boot-system): Remove 'mount' call for /dev/pts. * doc/guix.texi (File Systems): Add %pseudo-terminal-file-system. --- doc/guix.texi | 8 ++++++++ gnu/services/base.scm | 2 +- gnu/system/file-systems.scm | 26 ++++++++++++++++++++++++-- gnu/system/shadow.scm | 4 +++- guix/build/linux-initrd.scm | 5 ----- 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index a88b546380..4490ff1deb 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -3074,6 +3074,14 @@ 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} %pseudo-terminal-file-system +This is the file system to be mounted as @file{/dev/pts}. It supports +@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar +functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference +Manual}). Pseudo-terminals are used by terminal emulators such as +@command{xterm}. +@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 diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 9a67109db0..2c9054af48 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -482,7 +482,7 @@ (define* (udev-service #:key (udev udev)) ;; Udev needs /dev to be a 'devtmpfs' mount so that new device ;; nodes can be added: see ;; . - (requirement '(root-file-system file-system-/dev)) + (requirement '(root-file-system)) (documentation "Populate the /dev directory, dynamically.") (start #~(lambda () diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm index ea8d961317..76460d95af 100644 --- a/gnu/system/file-systems.scm +++ b/gnu/system/file-systems.scm @@ -85,11 +85,33 @@ (define %devtmpfs-file-system (device "none") (mount-point "/dev") (type "devtmpfs") - (check? #f))) + (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. + 1004) + +(define %pseudo-terminal-file-system + ;; The pseudo-terminal file system. It needs to be mounted so that + ;; statfs(2) returns DEVPTS_SUPER_MAGIC like libc's getpt(3) expects (and + ;; thus openpty(3) and its users, such as xterm.) + (file-system + (device "none") + (mount-point "/dev/pts") + (type "devpts") + (check? #f) + (needed-for-boot? #f) + (create-mount-point? #t) + (options (string-append "gid=" (number->string %tty-gid) ",mode=620")))) (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)) + (list %devtmpfs-file-system + %pseudo-terminal-file-system)) ;;; file-systems.scm ends here diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index ae6eac9a5b..e29dbb8c3e 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -20,6 +20,8 @@ (define-module (gnu system shadow) #:use-module (guix records) #:use-module (guix gexp) #:use-module (guix monads) + #:use-module ((gnu system file-systems) + #:select (%tty-gid)) #:use-module ((gnu packages admin) #:select (shadow)) #:use-module (gnu packages bash) @@ -84,7 +86,7 @@ (define %base-groups ;; The following groups are conventionally used by things like udev to ;; control access to hardware devices. - (user-group (name "tty")) + (user-group (name "tty") (id %tty-gid)) (user-group (name "dialout")) (user-group (name "kmem")) (user-group (name "video")) diff --git a/guix/build/linux-initrd.scm b/guix/build/linux-initrd.scm index abf86f6a77..08df32ad1e 100644 --- a/guix/build/linux-initrd.scm +++ b/guix/build/linux-initrd.scm @@ -670,11 +670,6 @@ (define root-fs-type (switch-root "/root") (format #t "loading '~a'...\n" to-load) - ;; Obviously this has to be done each time we boot. Do it from here - ;; so that statfs(2) returns DEVPTS_SUPER_MAGIC like libc's getpt(3) - ;; expects (and thus openpty(3) and its users, such as xterm.) - (mount "none" "/dev/pts" "devpts") - ;; TODO: Remove /lib, /share, and /loader.go. (primitive-load to-load) -- cgit v1.2.3