summaryrefslogtreecommitdiff
path: root/gnu/services
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/admin.scm6
-rw-r--r--gnu/services/audio.scm1
-rw-r--r--gnu/services/avahi.scm7
-rw-r--r--gnu/services/base.scm12
-rw-r--r--gnu/services/ssh.scm7
-rw-r--r--gnu/services/telephony.scm305
-rw-r--r--gnu/services/xorg.scm9
7 files changed, 336 insertions, 11 deletions
diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm
index 14452a86c7..64d7ae723c 100644
--- a/gnu/services/admin.scm
+++ b/gnu/services/admin.scm
@@ -183,6 +183,9 @@ for ROTATION."
(define rottlog-service-type
(service-type
(name 'rottlog)
+ (description
+ "Periodically rotate log files using GNU@tie{}Rottlog and GNU@tie{}mcron.
+Old log files are removed or compressed according to the configuration.")
(extensions (list (service-extension etc-service-type rottlog-etc)
(service-extension mcron-service-type
rottlog-jobs-or-default)
@@ -323,6 +326,9 @@ for ROTATION."
(define tailon-service-type
(service-type
(name 'tailon)
+ (description
+ "Run Tailon, a Web application for monitoring, viewing, and searching log
+files.")
(extensions
(list (service-extension shepherd-root-service-type
tailon-shepherd-service)
diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm
index 0a3e9f66bc..6629433780 100644
--- a/gnu/services/audio.scm
+++ b/gnu/services/audio.scm
@@ -97,6 +97,7 @@
(define mpd-service-type
(service-type
(name 'mpd)
+ (description "Run the Music Player Daemon (MPD).")
(extensions
(list (service-extension shepherd-root-service-type
(compose list mpd-shepherd-service))
diff --git a/gnu/services/avahi.scm b/gnu/services/avahi.scm
index 29720415fc..d69c89f751 100644
--- a/gnu/services/avahi.scm
+++ b/gnu/services/avahi.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -117,6 +117,11 @@
(define avahi-service-type
(let ((avahi-package (compose list avahi-configuration-avahi)))
(service-type (name 'avahi)
+ (description
+ "Run @command{avahi-daemon}, a host and service discovery
+daemon that implements the multicast DNS (mDNS) and DNS service
+discovery (DNS-SD) protocols. Additionally, extend the C library's name
+service switch (NSS) with support for @code{.local} host name resolution.")
(extensions
(list (service-extension shepherd-root-service-type
avahi-shepherd-service)
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index b605614ab6..06b2a7d2d8 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -42,7 +42,6 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages package-management)
#:use-module (gnu packages linux)
- #:use-module (gnu packages lsof)
#:use-module (gnu packages terminals)
#:use-module ((gnu build file-systems)
#:select (mount-flags->bit-mask))
@@ -119,7 +118,6 @@
guix-configuration-substitute-urls
guix-configuration-extra-options
guix-configuration-log-file
- guix-configuration-lsof
guix-service
guix-service-type
@@ -1374,8 +1372,6 @@ failed to register hydra.gnu.org public key: ~a~%" status))))))))
(default '()))
(log-file guix-configuration-log-file ;string
(default "/var/log/guix-daemon.log"))
- (lsof guix-configuration-lsof ;<package>
- (default lsof))
(http-proxy guix-http-proxy ;string | #f
(default #f))
(tmpdir guix-tmpdir ;string | #f
@@ -1392,7 +1388,7 @@ failed to register hydra.gnu.org public key: ~a~%" status))))))))
use-substitutes? substitute-urls
max-silent-time timeout
extra-options
- log-file lsof http-proxy tmpdir)
+ log-file http-proxy tmpdir)
(list (shepherd-service
(documentation "Run the Guix daemon.")
(provision '(guix-daemon))
@@ -1409,10 +1405,8 @@ failed to register hydra.gnu.org public key: ~a~%" status))))))))
"--substitute-urls" #$(string-join substitute-urls)
#$@extra-options)
- ;; Add 'lsof' (for the GC) to the daemon's $PATH.
#:environment-variables
- (list (string-append "PATH=" #$lsof "/bin")
- #$@(if http-proxy
+ (list #$@(if http-proxy
(list (string-append "http_proxy=" http-proxy))
'())
#$@(if tmpdir
@@ -1441,7 +1435,7 @@ failed to register hydra.gnu.org public key: ~a~%" status))))))))
(match config
(($ <guix-configuration> guix build-group build-accounts authorize-key? keys)
;; Assume that the store has BUILD-GROUP as its group. We could
- ;; otherwise call 'chown' here, but the problem is that on a COW unionfs,
+ ;; otherwise call 'chown' here, but the problem is that on a COW overlayfs,
;; chown leads to an entire copy of the tree, which is a bad idea.
;; Optionally authorize hydra.gnu.org's key.
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 697bb1b82e..b33ec946c6 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -186,6 +186,9 @@
(define lsh-service-type
(service-type (name 'lsh)
+ (description
+ "Run the GNU@tie{}lsh secure shell (SSH) daemon,
+@command{lshd}.")
(extensions
(list (service-extension shepherd-root-service-type
lsh-shepherd-service)
@@ -460,6 +463,8 @@ of user-name/file-like tuples."
(define openssh-service-type
(service-type (name 'openssh)
+ (description
+ "Run the OpenSSH secure shell (SSH) server, @command{sshd}.")
(extensions
(list (service-extension shepherd-root-service-type
openssh-shepherd-service)
@@ -543,6 +548,8 @@ of user-name/file-like tuples."
(define dropbear-service-type
(service-type (name 'dropbear)
+ (description
+ "Run the Dropbear secure shell (SSH) server.")
(extensions
(list (service-extension shepherd-root-service-type
dropbear-shepherd-service)
diff --git a/gnu/services/telephony.scm b/gnu/services/telephony.scm
new file mode 100644
index 0000000000..0a735315b4
--- /dev/null
+++ b/gnu/services/telephony.scm
@@ -0,0 +1,305 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 nee <nee-git@hidamari.blue>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services telephony)
+ #:use-module (gnu services)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu system shadow)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages telephony)
+ #:use-module (guix records)
+ #:use-module (guix gexp)
+ #:use-module (srfi srfi-1)
+ #:use-module (ice-9 match)
+ #:export (murmur-configuration
+ make-murmur-configuration
+ murmur-configuration?
+ murmur-configuration-package
+ murmur-configuration-user
+ murmur-configuration-group
+ murmur-configuration-port
+ murmur-configuration-welcome-text
+ murmur-configuration-server-password
+ murmur-configuration-max-users
+ murmur-configuration-max-user-bandwidth
+ murmur-configuration-database-file
+ murmur-configuration-log-file
+ murmur-configuration-pid-file
+ murmur-configuration-autoban-attempts
+ murmur-configuration-autoban-timeframe
+ murmur-configuration-autoban-time
+ murmur-configuration-opus-threshold
+ murmur-configuration-channel-nesting-limit
+ murmur-configuration-channelname-regex
+ murmur-configuration-username-regex
+ murmur-configuration-text-message-length
+ murmur-configuration-image-message-length
+ murmur-configuration-cert-required?
+ murmur-configuration-remember-channel?
+ murmur-configuration-allow-html?
+ murmur-configuration-allow-ping?
+ murmur-configuration-bonjour?
+ murmur-configuration-send-version?
+ murmur-configuration-log-days
+ murmur-configuration-obfuscate-ips?
+ murmur-configuration-ssl-cert
+ murmur-configuration-ssl-key
+ murmur-configuration-ssl-dh-params
+ murmur-configuration-ssl-ciphers
+ murmur-configuration-public-registration
+ murmur-configuration-file
+
+ murmur-public-registration-configuration
+ make-murmur-public-registration-configuration
+ murmur-public-registration-configuration?
+ murmur-public-registration-configuration-name
+ murmur-public-registration-configuration-url
+ murmur-public-registration-configuration-password
+ murmur-public-registration-configuration-hostname
+
+ murmur-service-type))
+
+;; https://github.com/mumble-voip/mumble/blob/master/scripts/murmur.ini
+
+(define-record-type* <murmur-configuration> murmur-configuration
+ make-murmur-configuration
+ murmur-configuration?
+ (package murmur-configuration-package ;<package>
+ (default mumble))
+ (user murmur-configuration-user
+ (default "murmur"))
+ (group murmur-configuration-group
+ (default "murmur"))
+ (port murmur-configuration-port
+ (default 64738))
+ (welcome-text murmur-configuration-welcome-text
+ (default ""))
+ (server-password murmur-configuration-server-password
+ (default ""))
+ (max-users murmur-configuration-max-users
+ (default 100))
+ (max-user-bandwidth murmur-configuration-max-user-bandwidth
+ (default #f))
+ (database-file murmur-configuration-database-file
+ (default "/var/lib/murmur/db.sqlite"))
+ (log-file murmur-configuration-log-file
+ (default "/var/log/murmur/murmur.log"))
+ (pid-file murmur-configuration-pid-file
+ (default "/var/run/murmur/murmur.pid"))
+ (autoban-attempts murmur-configuration-autoban-attempts
+ (default 10))
+ (autoban-timeframe murmur-configuration-autoban-timeframe
+ (default 120))
+ (autoban-time murmur-configuration-autoban-time
+ (default 300))
+ (opus-threshold murmur-configuration-opus-threshold
+ (default 100)) ; integer percent
+ (channel-nesting-limit murmur-configuration-channel-nesting-limit
+ (default 10))
+ (channelname-regex murmur-configuration-channelname-regex
+ (default #f))
+ (username-regex murmur-configuration-username-regex
+ (default #f))
+ (text-message-length murmur-configuration-text-message-length
+ (default 5000))
+ (image-message-length murmur-configuration-image-message-length
+ (default (* 128 1024))) ; 128 Kilobytes
+ (cert-required? murmur-configuration-cert-required?
+ (default #f))
+ (remember-channel? murmur-configuration-remember-channel?
+ (default #f))
+ (allow-html? murmur-configuration-allow-html?
+ (default #f))
+ (allow-ping? murmur-configuration-allow-ping?
+ (default #f))
+ (bonjour? murmur-configuration-bonjour?
+ (default #f))
+ (send-version? murmur-configuration-send-version?
+ (default #f))
+ (log-days murmur-configuration-log-days
+ (default 31))
+ (obfuscate-ips? murmur-obfuscate-ips?
+ (default #t))
+ (ssl-cert murmur-configuration-ssl-cert
+ (default #f))
+ (ssl-key murmur-configuration-ssl-key
+ (default #f))
+ (ssl-dh-params murmur-configuration-ssl-dh-params
+ (default #f))
+ (ssl-ciphers murmur-configuration-ssl-ciphers
+ (default #f))
+ (public-registration murmur-configuration-public-registration
+ (default #f)) ; <murmur-public-registration-configuration>
+ (file murmur-configuration-file
+ (default #f)))
+
+(define-record-type* <murmur-public-registration-configuration>
+ murmur-public-registration-configuration
+ make-murmur-public-registration-configuration
+ murmur-public-registration-configuration?
+ (name murmur-public-registration-configuration-name)
+ (password murmur-public-registration-configuration-password)
+ (url murmur-public-registration-configuration-url)
+ (hostname murmur-public-registration-configuration-hostname
+ (default #f)))
+
+(define (flatten . lst)
+ "Return a list that recursively concatenates all sub-lists of LST."
+ (define (flatten1 head out)
+ (if (list? head)
+ (fold-right flatten1 out head)
+ (cons head out)))
+ (fold-right flatten1 '() lst))
+
+(define (default-murmur-config config)
+ (match-record
+ config
+ <murmur-configuration>
+ (user port welcome-text server-password max-users max-user-bandwidth
+ database-file log-file pid-file autoban-attempts autoban-timeframe
+ autoban-time opus-threshold channel-nesting-limit channelname-regex
+ username-regex text-message-length image-message-length cert-required?
+ remember-channel? allow-html? allow-ping? bonjour? send-version?
+ log-days obfuscate-ips? ssl-cert ssl-key ssl-dh-params ssl-ciphers
+ public-registration)
+ (apply mixed-text-file "murmur.ini"
+ (flatten
+ "welcometext=" welcome-text "\n"
+ "port=" (number->string port) "\n"
+ (if server-password (list "serverpassword=" server-password "\n") '())
+ (if max-user-bandwidth (list "bandwidth=" (number->string max-user-bandwidth)) '())
+ "users=" (number->string max-users) "\n"
+ "uname=" user "\n"
+ "database=" database-file "\n"
+ "logfile=" log-file "\n"
+ "pidfile=" pid-file "\n"
+ (if autoban-attempts (list "autobanAttempts=" (number->string autoban-attempts) "\n") '())
+ (if autoban-timeframe (list "autobanTimeframe=" (number->string autoban-timeframe) "\n") '())
+ (if autoban-time (list "autobanTime=" (number->string autoban-time) "\n") '())
+ (if opus-threshold (list "opusthreshold=" (number->string opus-threshold) "\n") '())
+ (if channel-nesting-limit (list "channelnestinglimit=" (number->string channel-nesting-limit) "\n") '())
+ (if channelname-regex (list "channelname=" channelname-regex "\n") '())
+ (if username-regex (list "username=" username-regex "\n") '())
+ (if text-message-length (list "textmessagelength=" (number->string text-message-length) "\n") '())
+ (if image-message-length (list "imagemessagelength=" (number->string image-message-length) "\n") '())
+ (if log-days (list "logdays=" (number->string log-days) "\n") '())
+ "obfuscate=" (if obfuscate-ips? "true" "false") "\n"
+ "certrequired=" (if cert-required? "true" "false") "\n"
+ "rememberchannel=" (if remember-channel? "true" "false") "\n"
+ "allowhtml=" (if allow-html? "true" "false") "\n"
+ "allowping=" (if allow-ping? "true" "false") "\n"
+ "bonjour=" (if bonjour? "true" "false") "\n"
+ "sendversion=" (if send-version? "true" "false") "\n"
+ (cond ((and ssl-cert ssl-key)
+ (list
+ "sslCert=" ssl-cert "\n"
+ "sslKey=" ssl-key "\n"))
+ ((or ssl-cert ssl-key)
+ (error "ssl-cert and ssl-key must both be set"
+ ssl-cert ssl-key))
+ (else '()))
+ (if ssl-dh-params (list "sslDHParams=" ssl-dh-params) '())
+ (if ssl-ciphers (list "sslCiphers=" ssl-ciphers) '())
+
+ (match public-registration
+ (#f '())
+ (($ <murmur-public-registration-configuration>
+ name password url hostname)
+ (if (and (or (not server-password) (string-null? server-password))
+ allow-ping?)
+ (list
+ "registerName=" name "\n"
+ "registerPassword=" password "\n"
+ "registerUrl=" url "\n"
+ (if hostname
+ (string-append "registerHostname=" hostname "\n")
+ ""))
+ (error "To publicly register your murmur server your server must be publicy visible
+and users must be able to join without a password. To fix this set:
+(allow-ping? #t)
+(server-password \"\")
+Or set public-registration to #f"))))))))
+
+(define (murmur-activation config)
+ #~(begin
+ (use-modules (guix build utils))
+ (let* ((log-dir (dirname #$(murmur-configuration-log-file config)))
+ (pid-dir (dirname #$(murmur-configuration-pid-file config)))
+ (db-dir (dirname #$(murmur-configuration-database-file config)))
+ (user (getpwnam #$(murmur-configuration-user config)))
+ (init-dir
+ (lambda (name dir)
+ (format #t "creating murmur ~a directory '~a'\n" name dir)
+ (mkdir-p dir)
+ (chown dir (passwd:uid user) (passwd:gid user))
+ (chmod dir #o700)))
+ (ini #$(or (murmur-configuration-file config)
+ (default-murmur-config config))))
+ (init-dir "log" log-dir)
+ (init-dir "pid" pid-dir)
+ (init-dir "database" db-dir)
+
+ (format #t "murmur: use config file: ~a~%\n" ini)
+ (format #t "murmur: to set the SuperUser password run:
+ `~a -ini ~a -readsupw`\n"
+ #$(file-append (murmur-configuration-package config)
+ "/bin/murmurd") ini)
+ #t)))
+
+(define murmur-accounts
+ (match-lambda
+ (($ <murmur-configuration> _ user group)
+ (list
+ (user-group
+ (name group)
+ (system? #t))
+ (user-account
+ (name user)
+ (group group)
+ (system? #t)
+ (comment "Murmur Daemon")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))))
+
+(define (murmur-shepherd-service config)
+ (list (shepherd-service
+ (provision '(murmur))
+ (documentation "Run the Murmur Mumble server.")
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ '(#$(file-append (murmur-configuration-package config)
+ "/bin/murmurd")
+ "-ini"
+ #$(or (murmur-configuration-file config)
+ (default-murmur-config config)))
+ #:pid-file #$(murmur-configuration-pid-file config)))
+ (stop #~(make-kill-destructor)))))
+
+(define murmur-service-type
+ (service-type (name 'murmur)
+ (description
+ "Run the Murmur voice-over-IP (VoIP) server of the Mumble
+suite.")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ murmur-shepherd-service)
+ (service-extension activation-service-type
+ murmur-activation)
+ (service-extension account-service-type
+ murmur-accounts)))
+ (default-value (murmur-configuration))))
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 6200fa302a..c5a1a0d423 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -573,7 +573,14 @@ makes the good ol' XlockMore usable."
#:environment-variables
(list (string-append
"GDM_X_SERVER="
- #$(gdm-configuration-x-server config))))))
+ #$(gdm-configuration-x-server config))
+ ;; XXX: GDM requires access to a handful of
+ ;; programs and components from Gnome (gnome-shell,
+ ;; dbus, and gnome-session among others). The
+ ;; following variables only work provided Gnome is
+ ;; installed.
+ "XDG_DATA_DIRS=/run/current-system/profile/share"
+ "PATH=/run/current-system/profile/bin"))))
(stop #~(make-kill-destructor))
(respawn? #t))))