diff options
| author | Evgeny Pisemsky <mail@pisemsky.site> | 2025-05-09 19:46:49 +0200 |
|---|---|---|
| committer | Danny Milosavljevic <dannym@friendly-machines.com> | 2025-05-09 19:47:24 +0200 |
| commit | 44d178265c23834a6050de06863cd0fcde64e4f8 (patch) | |
| tree | 4b94e560790e09ea5400af79d36f3753fbf0eb94 /gnu | |
| parent | 2258b5f5b4733553d6dc3983e6678837104a0647 (diff) | |
services: Add mosquitto-service-type.
* gnu/services/messaging.scm (<mosquitto-configuration>): New record type.
(mosquitto-accounts): New procedure.
(mosquitto-shepherd-service): New procedure.
(mosquitto-service-type): New variable.
* doc/guix.texi (Messaging Services): Document it.
Change-Id: I3500c5b6b69084c1f4a6da66ea45bfd42c871f3f
Signed-off-by: Danny Milosavljevic <dannym@friendly-machines.com>
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/services/messaging.scm | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm index c13700f0326..4cfac3bc3a7 100644 --- a/gnu/services/messaging.scm +++ b/gnu/services/messaging.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2015, 2017-2020, 2022-2024 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr> ;;; Copyright © 2025 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2024 Evgeny Pisemsky <mail@pisemsky.site> ;;; ;;; This file is part of GNU Guix. ;;; @@ -187,7 +188,15 @@ quassel-service-type snuik-configuration - snuik-service-type)) + snuik-service-type + + mosquitto-configuration + mosquitto-configuration? + mosquitto-configuration-package + mosquitto-configuration-config-file + mosquitto-configuration-user + mosquitto-configuration-group + mosquitto-service-type)) ;;; Commentary: ;;; @@ -2107,6 +2116,67 @@ multiple machines simultaneously."))) ;;; +;;; Mosquitto. +;;; + +(define-record-type* <mosquitto-configuration> + mosquitto-configuration + make-mosquitto-configuration + mosquitto-configuration? + (package mosquitto-configuration-package + (default mosquitto)) + (config-file mosquitto-configuration-config-file + (default #f)) + (user mosquitto-configuration-user + (default "mosquitto")) + (group mosquitto-configuration-group + (default "mosquitto"))) + +(define (mosquitto-accounts config) + (match-record config <mosquitto-configuration> + (user group) + (filter identity + (list + (and (equal? group "mosquitto") + (user-group + (name "mosquitto") + (system? #t))) + (and (equal? user "mosquitto") + (user-account + (name "mosquitto") + (group group) + (system? #t) + (comment "bzzz") + (home-directory "/var/empty") + (shell (file-append shadow "/sbin/nologin")))))))) + +(define (mosquitto-shepherd-service config) + (match-record config <mosquitto-configuration> + (package config-file user group) + (list (shepherd-service + (documentation "Run the Mosquitto MQTT broker.") + (provision '(mosquitto)) + (requirement '(networking syslogd user-processes)) + (start #~(make-forkexec-constructor + (list #$(file-append package "/sbin/mosquitto") + #$@(if config-file + (list "-c" config-file) + '())) + #:user #$user + #:group #$group)) + (stop #~(make-kill-destructor)))))) + +(define mosquitto-service-type + (service-type + (description "Run the Mosquitto MQTT broker.") + (name 'mosquitto) + (extensions + (list (service-extension account-service-type mosquitto-accounts) + (service-extension shepherd-root-service-type mosquitto-shepherd-service))) + (default-value (mosquitto-configuration)))) + + +;;; ;;; Snuik. ;;; (define-maybe integer (no-serialization)) |
