install: Add standalone documentation service.

* gnu/system/install.scm (log-to-info): Add 'tty' and 'user'
parameters.  Open the tty and change UIDs/GIDs.
(documentation-shepherd-service): New procedure.
(%documentation-users, documentation-service-type): New variables.
(%installation-services): Use it instead of 'mingetty-service'.
This commit is contained in:
Ludovic Courtès 2019-04-12 14:15:59 +02:00
parent 96ef856528
commit 126d4c12ce
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 43 additions and 6 deletions

View File

@ -73,11 +73,24 @@
;;; Code: ;;; Code:
(define (log-to-info) ;;;
;;; Documentation service.
;;;
(define (log-to-info tty user)
"Return a script that spawns the Info reader on the right section of the "Return a script that spawns the Info reader on the right section of the
manual." manual."
(program-file "log-to-info" (program-file "log-to-info"
#~(begin #~(let ((tty (open-file #$(string-append "/dev/" tty)
"r0+")))
(redirect-port tty (current-output-port))
(redirect-port tty (current-error-port))
(redirect-port tty (current-input-port))
(let ((pw (getpwnam #$user)))
(setgid (passwd:gid pw))
(setuid (passwd:uid pw)))
;; 'gunzip' is needed to decompress the doc. ;; 'gunzip' is needed to decompress the doc.
(setenv "PATH" (string-append #$gzip "/bin")) (setenv "PATH" (string-append #$gzip "/bin"))
@ -86,6 +99,33 @@ manual."
"-f" (string-append #$guix "/share/info/guix.info") "-f" (string-append #$guix "/share/info/guix.info")
"-n" "System Installation")))) "-n" "System Installation"))))
(define (documentation-shepherd-service tty)
(list (shepherd-service
(provision (list (symbol-append 'term- (string->symbol tty))))
(requirement '(user-processes host-name udev virtual-terminal))
(start #~(make-forkexec-constructor
(list #$(log-to-info tty "documentation"))))
(stop #~(make-kill-destructor)))))
(define %documentation-users
;; User account for the Info viewer.
(list (user-account (name "documentation")
(system? #t)
(group "nogroup")
(home-directory "/var/empty"))))
(define documentation-service-type
;; Documentation viewer service.
(service-type (name 'documentation)
(extensions
(list (service-extension shepherd-root-service-type
documentation-shepherd-service)
(service-extension account-service-type
(const %documentation-users))))
(description "Run the Info reader on a tty.")))
(define %backing-directory (define %backing-directory
;; Sub-directory used as the backing store for copy-on-write. ;; Sub-directory used as the backing store for copy-on-write.
"/tmp/guix-inst") "/tmp/guix-inst")
@ -239,10 +279,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m
;; Documentation. The manual is in UTF-8, but ;; Documentation. The manual is in UTF-8, but
;; 'console-font-service' sets up Unicode support and loads a font ;; 'console-font-service' sets up Unicode support and loads a font
;; with all the useful glyphs like em dash and quotation marks. ;; with all the useful glyphs like em dash and quotation marks.
(mingetty-service (mingetty-configuration (service documentation-service-type "tty2")
(tty "tty2")
(auto-login "guest")
(login-program (log-to-info))))
;; Documentation add-on. ;; Documentation add-on.
%configuration-template-service %configuration-template-service