~ruther/guix-local

44d178265c23834a6050de06863cd0fcde64e4f8 — Evgeny Pisemsky 1 year, 1 month ago 2258b5f
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>
2 files changed, 165 insertions(+), 1 deletions(-)

M doc/guix.texi
M gnu/services/messaging.scm
M doc/guix.texi => doc/guix.texi +94 -0
@@ 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


M gnu/services/messaging.scm => gnu/services/messaging.scm +71 -1
@@ 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))