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 Pierre Langlois@*
|
||||||
Copyright @copyright{} 2020 pinoaffe@*
|
Copyright @copyright{} 2020 pinoaffe@*
|
||||||
Copyright @copyright{} 2020 André Batista@*
|
Copyright @copyright{} 2020 André Batista@*
|
||||||
|
Copyright @copyright{} 2020 Alexandru-Sergiu Marton@*
|
||||||
|
|
||||||
Permission is granted to copy, distribute and/or modify this document
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
under the terms of the GNU Free Documentation License, Version 1.3 or
|
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.
|
more information on X.509 certificates.
|
||||||
@end quotation
|
@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
|
@node Certificate Services
|
||||||
@subsection Certificate Services
|
@subsection Certificate Services
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
|
;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||||
;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
|
;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
|
||||||
;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
|
;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
|
||||||
|
;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; 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.")
|
"Run Mumi, a Web interface to the Debbugs bug-tracking server.")
|
||||||
(default-value
|
(default-value
|
||||||
(mumi-configuration))))
|
(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