mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 15:36:20 -05:00
services: Add gmnisrv web service.
* gnu/services/web.scm (<gmnisrv-configuration>): New record type. (%default-gmnisrv-config-file): New variable. (%gmnisrv-accounts, %gmnisrv-activation): New variables. (gmnisrv-shepherd-service): New procedure. (gmnisrv-service-type): New variable. * doc/guix.texi (Web Services): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
1a7bfbb67d
commit
2ade5bdeb8
2 changed files with 108 additions and 0 deletions
|
@ -81,6 +81,7 @@ Copyright @copyright{} 2020 R Veera Kumar@*
|
|||
Copyright @copyright{} 2020 Pierre Langlois@*
|
||||
Copyright @copyright{} 2020 pinoaffe@*
|
||||
Copyright @copyright{} 2020 André Batista@*
|
||||
Copyright @copyright{} 2020 Alexandru-Sergiu Marton@*
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.3 or
|
||||
|
@ -23549,6 +23550,40 @@ Thus, make sure to add @code{nss-certs} or another certificate package to the
|
|||
more information on X.509 certificates.
|
||||
@end quotation
|
||||
|
||||
@subsubheading gmnisrv
|
||||
|
||||
@cindex gmnisrv
|
||||
The @uref{https://git.sr.ht/~sircmpwn/gmnisrv, gmnisrv} program is a
|
||||
simple @uref{https://gemini.circumlunar.space/, Gemini} protocol server.
|
||||
|
||||
@deffn {Scheme Variable} gmnisrv-service-type
|
||||
This is the type of the gmnisrv service, whose value should be a
|
||||
@code{gmnisrv-configuration} object, as in this example:
|
||||
|
||||
@lisp
|
||||
(service gmnisrv-service-type
|
||||
(gmnisrv-configuration
|
||||
(config-file (local-file "./my-gmnisrv.ini"))))
|
||||
@end lisp
|
||||
@end deffn
|
||||
|
||||
@deftp {Data Type} gmnisrv-configuration
|
||||
Data type representing the configuration of gmnisrv.
|
||||
|
||||
@table @asis
|
||||
@item @code{package} (default: @var{gmnisrv})
|
||||
Package object of the gmnisrv server.
|
||||
|
||||
@item @code{config-file} (default: @code{%default-gmnisrv-config-file})
|
||||
File-like object of the gmnisrv configuration file to use. The default
|
||||
configuration listens on port 1965 and serves files from
|
||||
@file{/srv/gemini}. Certificates are stored in
|
||||
@file{/var/lib/gemini/certs}. For more information, run @command{man
|
||||
gmnisrv} and @command{man gmnisrv.ini}.
|
||||
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
@node Certificate Services
|
||||
@subsection Certificate Services
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
|
||||
;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
|
||||
;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -1798,3 +1799,75 @@ (define mumi-service-type
|
|||
"Run Mumi, a Web interface to the Debbugs bug-tracking server.")
|
||||
(default-value
|
||||
(mumi-configuration))))
|
||||
|
||||
(define %default-gmnisrv-config-file
|
||||
(plain-file "gmnisrv.ini" "
|
||||
listen=0.0.0.0:1965 [::]:1965
|
||||
|
||||
[:tls]
|
||||
store=/var/lib/gemini/certs
|
||||
|
||||
organization=gmnisrv on Guix user
|
||||
|
||||
[localhost]
|
||||
root=/srv/gemini
|
||||
"))
|
||||
|
||||
(define-record-type* <gmnisrv-configuration>
|
||||
gmnisrv-configuration make-gmnisrv-configuration
|
||||
gmnisrv-configuration?
|
||||
(package gmnisrv-configuration-package
|
||||
(default gmnisrv))
|
||||
(config-file gmnisrv-configuration-config-file
|
||||
(default %default-gmnisrv-config-file)))
|
||||
|
||||
(define gmnisrv-shepherd-service
|
||||
(match-lambda
|
||||
(($ <gmnisrv-configuration> package config-file)
|
||||
(list (shepherd-service
|
||||
(provision '(gmnisrv))
|
||||
(requirement '(networking))
|
||||
(documentation "Run the gmnisrv Gemini server.")
|
||||
(start (let ((gmnisrv (file-append package "/bin/gmnisrv")))
|
||||
#~(make-forkexec-constructor
|
||||
(list #$gmnisrv "-C" #$config-file)
|
||||
#:user "gmnisrv" #:group "gmnisrv"
|
||||
#:log-file "/var/log/gmnisrv.log")))
|
||||
(stop #~(make-kill-destructor)))))))
|
||||
|
||||
(define %gmnisrv-accounts
|
||||
(list (user-group (name "gmnisrv") (system? #t))
|
||||
(user-account
|
||||
(name "gmnisrv")
|
||||
(group "gmnisrv")
|
||||
(system? #t)
|
||||
(comment "gmnisrv Gemini server")
|
||||
(home-directory "/var/empty")
|
||||
(shell (file-append shadow "/sbin/nologin")))))
|
||||
|
||||
(define %gmnisrv-activation
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
|
||||
(mkdir-p "/var/lib/gemini/certs")
|
||||
(let* ((pw (getpwnam "gmnisrv"))
|
||||
(uid (passwd:uid pw))
|
||||
(gid (passwd:gid pw)))
|
||||
(chown "/var/lib/gemini" uid gid)
|
||||
(chown "/var/lib/gemini/certs" uid gid)))))
|
||||
|
||||
(define gmnisrv-service-type
|
||||
(service-type
|
||||
(name 'guix)
|
||||
(extensions
|
||||
(list (service-extension activation-service-type
|
||||
(const %gmnisrv-activation))
|
||||
(service-extension account-service-type
|
||||
(const %gmnisrv-accounts))
|
||||
(service-extension shepherd-root-service-type
|
||||
gmnisrv-shepherd-service)))
|
||||
(description
|
||||
"Run the gmnisrv Gemini server.")
|
||||
(default-value
|
||||
(gmnisrv-configuration))))
|
||||
|
|
Loading…
Reference in a new issue