1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-04-30 22:35:57 +02:00

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>
This commit is contained in:
Evgeny Pisemsky
2025-05-09 19:46:49 +02:00
committed by Danny Milosavljevic
parent 2258b5f5b4
commit 44d178265c
2 changed files with 165 additions and 1 deletions
+94
View File
@@ -139,6 +139,7 @@ Copyright @copyright{} 2025 Sören Tempel@*
Copyright @copyright{} 2025 Rostislav Svoboda@*
Copyright @copyright{} 2025 Zacchaeus@*
Copyright @copyright{} 2025 Sergio Pastor Pérez@*
Copyright @copyright{} 2024 Evgeny Pisemsky@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -31303,6 +31304,99 @@ Extra options will be passed to @command{snuik}, please run
@end table
@end deftp
@subsubheading Mosquitto Service
@url{https://mosquitto.org/,Mosquitto} is a lightweight message broker
that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. It is
suitable for use on all devices from low power single board computers to
full servers.
@defvar mosquitto-service-type
This is the service type for the @url{https://mosquitto.org/,Mosquitto}
MQTT broker. Its value is a @code{mosquitto-configuration} (see below).
@end defvar
@deftp {Data Type} mosquitto-configuration
This is the configuration for Mosquitto, with the following fields:
@table @asis
@item @code{package} (default: @code{mosquitto})
The Mosquitto package to use.
@item @code{config-file} (default: @code{#f})
The Mosquitto configuration file as a file-like object or the value
@code{#f} to use the default configuration.
@item @code{user} (default: @code{"mosquitto"})
Owner of the broker process.
@item @code{group} (default: @code{"mosquitto"})
Owner's group of the broker process.
@end table
@end deftp
@subsubheading Mosquitto Service
@url{https://mosquitto.org/,Mosquitto} is a lightweight message broker
that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. It is
suitable for use on all devices from low power single board computers to
full servers.
@defvar mosquitto-service-type
This is the service type for the @url{https://mosquitto.org/,Mosquitto}
MQTT broker. Its value is a @code{mosquitto-configuration} (see below).
@end defvar
@deftp {Data Type} mosquitto-configuration
This is the configuration for Mosquitto, with the following fields:
@table @asis
@item @code{package} (default: @code{mosquitto})
The Mosquitto package to use.
@item @code{config-file} (default: @code{#f})
The Mosquitto configuration file as a file-like object or the value
@code{#f} to use the default configuration.
@item @code{user} (default: @code{"mosquitto"})
Owner of the broker process.
@item @code{group} (default: @code{"mosquitto"})
Owner's group of the broker process.
@end table
@end deftp
@subsubheading Mosquitto Service
@url{https://mosquitto.org/,Mosquitto} is a lightweight message broker
that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. It is
suitable for use on all devices from low power single board computers to
full servers.
@defvar mosquitto-service-type
This is the service type for the @url{https://mosquitto.org/,Mosquitto}
MQTT broker. Its value is a @code{mosquitto-configuration} (see below).
@end defvar
@deftp {Data Type} mosquitto-configuration
This is the configuration for Mosquitto, with the following fields:
@table @asis
@item @code{package} (default: @code{mosquitto})
The Mosquitto package to use.
@item @code{config-file} (default: @code{#f})
The Mosquitto configuration file as a file-like object or the value
@code{#f} to use the default configuration.
@item @code{user} (default: @code{"mosquitto"})
Owner of the broker process.
@item @code{group} (default: @code{"mosquitto"})
Owner's group of the broker process.
@end table
@end deftp
@node Telephony Services
@subsection Telephony Services
+71 -1
View File
@@ -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:
;;;
@@ -2105,6 +2114,67 @@ the IRC bouncer.")))
for the distributed IRC client quassel, which allows you to connect from
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.