~ruther/guix-local

7f239fd33ff7bf2f1ec48de37f14479699d4096f — Ludovic Courtès 11 years ago 4e46905
system: Add 'file-system' decl. for /dev/pts, and use the right options.

Fixes <http://bugs.gnu.org/18081>.

* 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.
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)