M doc/guix.texi => doc/guix.texi +8 -0
@@ 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
M gnu/services/base.scm => gnu/services/base.scm +1 -1
@@ 482,7 482,7 @@ passed to @command{guix-daemon}."
;; 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))
+ (requirement '(root-file-system))
(documentation "Populate the /dev directory, dynamically.")
(start #~(lambda ()
M gnu/system/file-systems.scm => gnu/system/file-systems.scm +24 -2
@@ 85,11 85,33 @@
(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
M gnu/system/shadow.scm => gnu/system/shadow.scm +3 -1
@@ 20,6 20,8 @@
#: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 @@
;; 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"))
M guix/build/linux-initrd.scm => guix/build/linux-initrd.scm +0 -5
@@ 670,11 670,6 @@ to it are lost."
(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)