Précédent: , Monter: Services   [Table des matières][Index]


11.10.37 Services divers

Service d’empreintes digitales

Le module (gnu services authentication) fournit un service DBus pour lire et identifier les empreintes digitales via un lecteur d’empreinte.

Variable :fprintd-service-type

Le type de service pour fprintd, qui fournit des capacités de lecture d’empreinte.

Service de contrôle du système

Le module (gnu services sysctl) fournit un service pour configurer les paramètres du noyau au démarrage.

Variable :sysctl-service-type

Le type de service pour sysctl, qui modifie les paramètres du noyau dans /proc/sys/. Pour activer le transfert d’IPv4, vous pouvez l’instancier ainsi :

(service sysctl-service-type
         (sysctl-configuration
           (settings '(("net.ipv4.ip_forward" . "1")))))

Comme le service sysctl-service-type fait partie des services par défaut, %base-services et %desktop-services, vous pouvez utiliser modify-services pour changer sa configuration et ajouter les paramètres du noyau que vous voulez (voir modify-services).

(modify-services %base-services
  (sysctl-service-type config =>
                       (sysctl-configuration
                         (settings (append '(("net.ipv4.ip_forward" . "1"))
                                           %default-sysctl-settings)))))
Type de données :sysctl-configuration

Le type de données représentant la configuration de sysctl.

sysctl (par défaut : (file-append procps "/sbin/sysctl")

L’exécutable sysctl à utiliser.

settings (par défaut : %default-sysctl-settings)

Une liste d’association spécifiant les paramètres du noyau et leur valeur.

Variable :%default-sysctl-settings

Une liste d’association spécifiant les paramètres sysctl par défaut sur le système Guix.

Service du démon PC/SC Smart Card

Le module (gnu services security-token) fournit le service suivant qui lance pcscd, le démon PC/SC Smart Card. pcscd est le démon pour pcsc-lite et MuscleCard. C’est un gestionnaire de ressource qui coordonne les communications avec les lecteurs de smart cards, les smart cards et les jetons cryptographiques connectés au système.

Variable :pcscd-service-type

Le type de service pour le service pcscd. Sa valeur doit être un objet pcscd-configuration. Pour lancer pcscd dans sa configuration par défaut, instantiez-le avec :

Type de données :pcscd-configuration

Type de données représentant la configuration de pcscd.

pcsc-lite (par défaut : pcsc-lite)

Le paquet pcsc-lite qui fournit pcscd.

usb-drivers (par défaut : (list ccid))

Liste des paquets qui fournissent des pilotes USB à pcscd. Les pilotes doivent être dans pcsc/drivers dans le répertoire du dépôt du paquet.

LIRC Service

Le module (gnu services lirc) fournit le service suivant.

Variable :lirc-service-type

Type for a service that runs LIRC, a daemon that decodes infrared signals from remote controls.

The value for this service is a <lirc-configuration> object.

Data Type :lirc-configuration

Data type representing the configuration of lircd.

lirc (default: lirc) (type: file-like)

Package object for lirc.

device (default: #f) (type: string)
driver (default: #f) (type: string)
config-file (default: #f) (type: string-or-file-like)

TODO. See lircd manual for details.

extra-options (default: '()) (type: list-of-string)

Additional command-line options to pass to lircd.

SPICE Service

Le module (gnu services spice) fournit le service suivant.

Variable :spice-vdagent-service-type

Type of the service that runs VDAGENT, a daemon that enables sharing the clipboard with a vm and setting the guest display resolution when the graphical console window resizes.

Data Type :spice-vdagent-configuration

Data type representing the configuration of spice-vdagent-service-type.

spice-vdagent (default: spice-vdagent) (type: file-like)

Package object for VDAGENT.

service inputattach

Le service inputattach vous permet d’utiliser des périphériques d’entrée comme les tablettes Wacom, les écrans tactiles ou les joysticks avec le serveur d’affichage Xorg.

Variable :inputattach-service-type

Type d’un service qui lance inputattach sur un appareil et envie les événements qu’il reçoit.

Type de données :inputattach-configuration
device-type (par défaut : "wacom")

Le type du périphérique à gérer. Lancez inputattach --help, du paquet inputattach, pour voir la liste des types de périphériques supportés.

device (par défaut : "/dev/ttyS0")

Le fichier de périphérique pour s’y connecter.

baud-rate (par défaut : #f)

Taux de Baud à utiliser pour la connexion série. Cela doit être un nombre ou #f.

log-file (par défaut : #f)

Si la valeur est vraie, cela doit être le nom d’un fichier où enregistrer les messages.

Service de dictionnaire

Le module (gnu services dict) fournit le service suivant :

Variable :dicod-service-type

C’est le type de service qui lance le démon dicod, une implémentation du serveur DICT (voir Dicod dans GNU Dico Manual).

Vous pouvez ajouter open localhost à votre fichier ~/.dico pour faire de localhost le serveur par défaut du client dico (voir Initialization File dans GNU Dico Manual).

Remarque : This service is also available for Guix Home, where it runs directly with your user privileges (voir home-dicod-service-type).

Type de données :dicod-configuration

Type de données représentant la configuration de dicod.

dico (par défaut : dico)

Objet de paquet du serveur de dictionnaire GNU Dico.

interfaces (par défaut : ’("localhost"))

C’est la liste des adresses IP et des ports et éventuellement des noms de fichiers de socket sur lesquels écouter (voir listen directive dans GNU Dico Manual).

handlers (par défaut : ’())

Liste des objets <dicod-handler> qui définissent des gestionnaires (des instances de modules).

databases (par défaut : (list %dicod-database:gcide))

Liste d’objets <dicod-database> qui définissent des dictionnaires à servir.

Type de données :dicod-handler

Type de données représentant un gestionnaire de dictionnaire (instance de module).

name

Nom du gestionnaire (instance de module).

module (par défaut : #f)

Nom du module dicod du gestionnaire (instance). Si la valeur est #f, le module a le même nom que le gestionnaire. (voir Modules dans GNU Dico Manual).

options

Liste de chaînes ou de gexps représentant les arguments pour le gestionnaire de module

Type de données :dicod-database

Type de données représentant une base de données de dictionnaire.

name

Nom de la base de données, qui sera utilisée dans les commande DICT.

handler

Nom du gestionnaire dicod (instance de module) utilisé par cette base de données (voir Handlers dans GNU Dico Manual).

complex? (par défaut : #f)

Indique si la configuration est pour une base de données complexe. La configuration complexe a besoin d’un objet <dicod-handler> correspondant, sinon inutile.

options

Liste de chaînes ou de gexps représentant les arguments pour la base de données (voir Databases dans GNU Dico Manual).

Variable :%dicod-database:gcide

Un objet <dicod-database> servant le dictionnaire international collaboratif en anglais via le paquet gcide.

Voici un exemple de configuration de dicod-service-type.

(service dicod-service-type
         (dicod-configuration
          (handlers (list
                     (dicod-handler
                      (name "wordnet")
                      (module "wordnet")
                      (options
                       (list #~(string-append "wnhome=" #$wordnet))))))
          (databases (list
                      (dicod-database
                       (name "wordnet")
                       (complex? #t)
                       (handler "wordnet"))
                      %dicod-database:gcide))))

Service Docker

Le module (gnu services docker) fournit les services suivants.

Variable :containerd-service-type

This service type operates containerd containerd, a daemon responsible for overseeing the entire container lifecycle on its host system. This includes image handling, storage management, container execution, supervision, low-level storage operations, network connections, and more.

Data Type :containerd-configuration

This is the data type representing the configuration of containerd.

containerd (default: containerd)

The containerd daemon package to use.

debug? (par défaut : #f)

Indique s’il faut activer la sortie de débogage.

environment-variables (par défaut : '())

List of environment variables to set for containerd.

Cela doit être une liste de chaines où chaque chaine a pour forme ‘clé=valeur’ comme dans cet exemple :

(list "HTTP_PROXY=socks5://127.0.0.1:9150"
      "HTTPS_PROXY=socks5://127.0.0.1:9150")
Variable :docker-service-type

C’est le type du service qui lance Docker, un démon qui peut exécuter des lots applicatifs (aussi appelés « conteneurs ») dans des environnements isolés.

The containerd-service-type service need to be added to a system configuration, otherwise a message about not any service provides containerd will be displayed during guix system reconfigure.

Type de données :docker-configuration

Le type de données qui représente la configuration de Docker et Containerd.

docker (par défaut : docker)

Le paquet du démon Docker à utiliser.

docker-cli (par défaut : docker-cli)

Le paquet du client Docker à utiliser.

containerd (par défaut : containerd)

This field is deprecated in favor of containerd-service-type service.

proxy (par défaut : docker-libnetwork-cmd-proxy)

Le paquet du mandataire réseau en espace utilisateur de Docker à utiliser.

enable-proxy? (par défaut : #t)

Indique s’il faut utiliser le mandataire réseau en espace utilisateur de Docker.

debug? (par défaut : #f)

Indique s’il faut activer la sortie de débogage.

enable-iptables? (par défaut : #t)

Indique s’il faut ajouter des règles iptables.

environment-variables (par défaut : '())

Liste de variables d’environnement à initialiser pour dockerd.

Cela doit être une liste de chaines où chaque chaine a pour forme ‘clé=valeur’ comme dans cet exemple :

(list "LANGUAGE=eo:ca:eu"
      "TMPDIR=/tmp/dockerd")
config-file (type: maybe-file-like)

JSON configuration file pass to dockerd.

Variable :singularity-service-type

C’est le type de service qui vous permet de lancer Singularity, un outil similaire à Docker pour créer et lancer des lots applicatifs (aussi appelés « conteneurs »). la valeur de ce service est le paquet Singularity à utiliser.

Le service n’installe pas de démon : à la place, il installe des utilitaires en setuid-root (voir Privileged Programs) pour que les utilisateurs non privilégiés puisse invoquer singularity run et les commandes similaires.

Rootless Podman Service

The (gnu services containers) module provides the following service.

Variable :rootless-podman-service-type

This is the service type for Podman is a container management tool.

In addition to providing a drop-in replacement for Docker, Podman offers the ability to run containers in “root-less” mode, meaning that regular users can deploy containers without elevated privileges. It does so mainly by leveraging two Linux kernel features: unprivileged user namespaces, and subordinate user and group IDs (voir the subordinate user and group ID service).

The rootless-podman-service-type sets up the system to allow unprivileged users to run podman commands:

(use-service-modules containers networking )

(operating-system
  ;; …
  (users (cons (user-account
                (name "alice")
                (comment "Bob's sister")
                (group "users")

                ;; Adding the account to the "cgroup" group
                ;; makes it possible to run podman commands.
                (supplementary-groups '("cgroup" "wheel"
                                        "audio" "video")))
               %base-user-accounts))
  (services
    (append (list (service iptables-service-type)
                  (service rootless-podman-service-type
                           (rootless-podman-configuration
                             (subgids
                               (list (subid-range (name "alice"))))
                             (subuids
                               (list (subid-range (name "alice")))))))
            %base-services)))

The iptables-service-type is required for Podman to be able to setup its own networks. Due to the change in user groups and file systems it is recommended to reboot (or at least logout), before trying to run Podman commands.

To test your installation you can run:

$ podman run -it --rm docker.io/alpine cat /etc/*release*
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.20.2
PRETTY_NAME="Alpine Linux v3.20"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
Data Type :rootless-podman-configuration

Available rootless-podman-configuration fields are:

podman (default: podman) (type: package)

The Podman package that will be installed in the system profile.

group-name (default: "cgroup") (type: string)

The name of the group that will own /sys/fs/cgroup resources. Users that want to use rootless Podman have to be in this group.

containers-registries (type: lowerable)

A string or a gexp evaluating to the path of Podman’s containers/registries.conf configuration file.

containers-storage (type: lowerable)

A string or a gexp evaluating to the path of Podman’s containers/storage.conf configuration file.

containers-policy (type: lowerable)

A string or a gexp evaluating to the path of Podman’s containers/policy.json configuration file.

pam-limits (type: list-of-pam-limits-entries)

The PAM limits to be set for rootless Podman.

subgids (default: ()) (type: list-of-subid-ranges)

A list of subid ranges representing the subgids that will be available for each configured user.

subuids (default: ()) (type: list-of-subid-ranges)

A list of subid ranges representing the subuids that will be available for each configured user.

OCI backed services

Should you wish to manage your Docker containers with the same consistent interface you use for your other Shepherd services, oci-container-service-type is the tool to use: given an Open Container Initiative (OCI) container image, it will run it in a Shepherd service. One example where this is useful: it lets you run services that are available as Docker/OCI images but not yet packaged for Guix.

Variable :oci-container-service-type

This is a thin wrapper around Docker’s CLI that executes OCI images backed processes as Shepherd Services.

(service oci-container-service-type
         (list
          (oci-container-configuration
           (network "host")
           (image
            (oci-image
             (repository "guile")
             (tag "3")
             (value (specifications->manifest '("guile")))
             (pack-options '(#:symlinks (("/bin/guile" -> "bin/guile"))
                             #:max-layers 2))))
           (entrypoint "/bin/guile")
           (command
            '("-c" "(display \"hello!\n\")")))
          (oci-container-configuration
           (image "prom/prometheus")
           (ports
             '(("9000" . "9000")
               ("9090" . "9090"))))
          (oci-container-configuration
           (image "grafana/grafana:10.0.1")
           (network "host")
           (volumes
             '("/var/lib/grafana:/var/lib/grafana")))))

In this example three different Shepherd services are going to be added to the system. Each oci-container-configuration record translates to a docker run invocation and its fields directly map to options. You can refer to the upstream documentation for the semantics of each value. If the images are not found, they will be pulled. The services with (network "host") are going to be attached to the host network and are supposed to behave like native processes with regard to networking.

Data Type :oci-container-configuration

Available oci-container-configuration fields are:

user (default: "oci-container") (type: string)

The user under whose authority docker commands will be run.

group (default: "docker") (type: string)

The group under whose authority docker commands will be run.

command (default: '()) (type: list-of-strings)

Overwrite the default command (CMD) of the image.

entrypoint (default: "") (type: string)

Overwrite the default entrypoint (ENTRYPOINT) of the image.

host-environment (default: '()) (type: list)

Set environment variables in the host environment where docker run is invoked. This is especially useful to pass secrets from the host to the container without having them on the docker run’s command line: by setting the MYSQL_PASSWORD on the host and by passing --env MYSQL_PASSWORD through the extra-arguments field, it is possible to securely set values in the container environment. This field’s value can be a list of pairs or strings, even mixed:

(list '("LANGUAGE\" . "eo:ca:eu")
      "JAVA_HOME=/opt/java")

Pair members can be strings, gexps or file-like objects. Strings are passed directly to make-forkexec-constructor.

environment (default: '()) (type: list)

Set environment variables. This can be a list of pairs or strings, even mixed:

(list '("LANGUAGE" . "eo:ca:eu")
      "JAVA_HOME=/opt/java")

Pair members can be strings, gexps or file-like objects. Strings are passed directly to the Docker CLI. You can refer to the upstream documentation for semantics.

image (type: string-or-oci-image)

The image used to build the container. It can be a string or an oci-image record. Strings are resolved by the Docker Engine, and follow the usual format myregistry.local:5000/testing/test-image:tag.

provision (default: "") (type: string)

Set the name of the provisioned Shepherd service.

requirement (default: '()) (type: list-of-symbols)

Set additional Shepherd services dependencies to the provisioned Shepherd service.

log-file (type: maybe-string)

When log-file is set, it names the file to which the service’s standard output and standard error are redirected. log-file is created if it does not exist, otherwise it is appended to.

auto-start? (default: #t) (type: boolean)

Whether this service should be started automatically by the Shepherd. If it is #f, the service has to be started manually with herd start.

respawn? (default: #f) (type: boolean)

Whether to have Shepherd restart the service when it stops, for instance when the underlying process dies.

shepherd-actions (default: '()) (type: list-of-symbols)

This is a list of shepherd-action records defining actions supported by the service.

network (default: "") (type: string)

Set a Docker network for the spawned container.

ports (default: '()) (type: list)

Set the port or port ranges to expose from the spawned container. This can be a list of pairs or strings, even mixed:

(list '("8080" . "80")
      "10443:443")

Pair members can be strings, gexps or file-like objects. Strings are passed directly to the Docker CLI. You can refer to the upstream documentation for semantics.

volumes (default: '()) (type: list)

Set volume mappings for the spawned container. This can be a list of pairs or strings, even mixed:

(list '("/root/data/grafana" . "/var/lib/grafana")
      "/gnu/store:/gnu/store")

Pair members can be strings, gexps or file-like objects. Strings are passed directly to the Docker CLI. You can refer to the upstream documentation for semantics.

container-user (default: "") (type: string)

Set the current user inside the spawned container. You can refer to the upstream documentation for semantics.

workdir (default: "") (type: string)

Set the current working directory for the spawned Shepherd service. You can refer to the upstream documentation for semantics.

extra-arguments (default: '()) (type: list)

A list of strings, gexps or file-like objects that will be directly passed to the docker run invocation.

Data Type :oci-image

Available oci-image fields are:

repository (type: string)

A string like myregistry.local:5000/testing/test-image that names the OCI image.

tag (default: "latest") (type: string)

A string representing the OCI image tag. Defaults to latest.

value (type: oci-lowerable-image)

A manifest or operating-system record that will be lowered into an OCI compatible tarball. Otherwise this field’s value can be a gexp or a file-like object that evaluates to an OCI compatible tarball.

pack-options (default: '()) (type: list)

An optional set of keyword arguments that will be passed to the docker-image procedure from guix scripts pack. They can be used to replicate guix pack behavior:

(oci-image
  (repository "guile")
  (tag "3")
  (value
    (specifications->manifest '("guile")))
  (pack-options '(#:symlinks (("/bin/guile" -> "bin/guile"))
                  #:max-layers 2)))

If the value field is an operating-system record, this field’s value will be ignored.

system (default: "") (type: string)

Attempt to build for a given system, e.g. "i686-linux"

target (default: "") (type: string)

Attempt to cross-build for a given triple, e.g. "aarch64-linux-gnu"

grafts? (default: #f) (type: boolean)

Whether to allow grafting or not in the pack build.

Subordinate User and Group ID Service

Among the virtualization facilities implemented by the Linux kernel is the concept of subordinate IDs. Subordinate IDs allow for mapping user and group IDs inside process namespaces to user and group IDs of the host system. Subordinate user ID ranges (subuids) allow users to map virtual user IDs inside containers to the user ID of an unprivileged user of the host system. Subordinate group ID ranges (subgids), instead map virtual group IDs to the group ID of an unprivileged user on the host system. You can access subuid(5) and subgid(5) Linux man pages for more details.

The (gnu system shadow) module exposes the subids-service-type, its configuration record subids-configuration and its extension record subids-extension.

With subids-service-type, subuids and subgids ranges can be reserved for users that desire so:

(use-modules (gnu system shadow)     ;for 'subids-service-type'
             (gnu system accounts)   ;for 'subid-range'
             )

(operating-system
  ;; …
  (services
    (list
      (simple-service 'alice-bob-subids
                      subids-service-type
                      (subids-extension
                        (subgids
                         (list
                          (subid-range (name "alice"))))
                        (subuids
                         (list
                          (subid-range (name "alice"))
                          (subid-range (name "bob")
                                       (start 100700)))))))))

Users (definitely other services), usually, are supposed to extend the service instead of adding subids directly to subids-configuration, unless the want to change the default behavior for root. With default settings the subids-service-type adds, if it’s not already there, a configuration for the root account to both /etc/subuid and /etc/subgid, possibly starting at the minimum possible subid. Otherwise the root subuids and subgids ranges are fitted wherever possible.

The above configuration will yield the following:

# cat /etc/subgid
root:100000:65536
alice:165536:65536
# cat /etc/subuid
root:100000:700
bob:100700:65536
alice:166236:65536
Data Type :subids-configuration

With default settings the subids-service-type adds, if it’s not already there, a configuration for the root account to both /etc/subuid and /etc/subgid, possibly starting at the minimum possible subid. To disable the default behavior and provide your own definition for the root subid ranges you can set to #f the add-root? field:

(use-modules (gnu system shadow)     ;for 'subids-service-type'
             (gnu system accounts)   ;for 'subid-range'
             )

(operating-system
  ;; …
  (services
    (list
      (service subids-service-type
               (subids-configuration
                (add-root? #f)
                (subgids
                  (subid-range (name "root")
                               (start 120000)
                               (count 100)))
                (subuids
                  (subid-range (name "root")
                               (start 120000)
                               (count 100)))))
      (simple-service 'alice-bob-subids
                      subids-service-type
                      (subids-extension
                        (subgids
                         (list
                          (subid-range (name "alice"))))
                        (subuids
                         (list
                          (subid-range (name "alice"))
                          (subid-range (name "bob")
                                       (start 100700)))))))))

Available subids-configuration fields are:

add-root? (default: #t) (type: boolean)

Whether to automatically configure subuids and subgids for root.

subgids (default: '()) (type: list-of-subid-ranges)

The list of subid-ranges that will be serialized to /etc/subgid. If a range doesn’t specify a start it will be fitted based on its number of requrested subids. If a range doesn’t specify a count the default size of 65536 will be assumed.

subuids (default: '()) (type: list-of-subid-ranges)

The list of subid-ranges that will be serialized to /etc/subuid. If a range doesn’t specify a start it will be fitted based on its number of requrested subids. If a range doesn’t specify a count the default size of 65536 will be assumed.

Data Type :subids-extension

Available subids-extension fields are:

subgids (default: '()) (type: list-of-subid-ranges)

The list of subid-ranges that will be appended to subids-configuration-subgids. Entries with the same name are deduplicated upon merging.

subuids (default: '()) (type: list-of-subid-ranges)

The list of subid-ranges that will be appended to subids-configuration-subuids. Entries with the same name are deduplicated upon merging.

Data Type :subid-range

The subid-range record is defined at (gnu system accounts). Available fields are:

name (type : string)

The name of the user or group that will own this range.

start (default: #f) (type: integer)

The first requested subid. When false the first available subid with enough contiguous subids will be assigned.

count (default: #f) (type: integer)

The number of total allocated subids. When #f the default of 65536 will be assumed .

Service auditd

Le module (gnu services auditd) fournit le service suivant.

Variable :auditd-service-type

C’est le type du service qui lance auditd, un démon qui suit les informations de sécurité de votre système.

Exemples de ce qui peut être suivi :

  1. Les accès aux fichiers
  2. Les appels système
  3. Les commandes invoquées
  4. Les tentatives de connexion échouées
  5. Le filtrage du pare-feu
  6. Les accès réseau

auditctl du paquet audit peut être utilisé pour ajouter ou supprimer des évènements à suivre (jusqu’au prochain redémarrage). Pour suivre les évènements de manière permanente, ajoutez des arguments à la commande auditctl dans un fichier nommé audit.rules dans le répertoire de configuration (voir plus bas). aureport du paquet audit peut être utilisé pour visualiser un rapport de tous les évènements enregistrés. le démon d’audit enregistre par défaut dans le fichier /var/log/audit.log.

Type de données :auditd-configuration

Le type de données qui représente la configuration de auditd.

audit (par défaut : audit)

Le paquet audit à utiliser.

configuration-directory (par défaut : %default-auditd-configuration-directory)

Le répertoire contenant le fichier de configuration du paquet audit, qui doit être nommé auditd.conf, et éventuellement des règles d’audit à instancier au démarrage.

Service R-Shiny

Le module (gnu services science) fournit le service suivant.

Variable :rshiny-service-type

C’est le type de service utilisé pour lancer une appli web créée avec r-shiny. Ce service initialise la variable d’environnement R_LIBS_USER et lance le script fournit pour appeler runApp.

Type de données :rshiny-configuration

Le type de données qui représente la configuration de rshiny.

package (par défaut : r-shiny)

Le paquet à utiliser.

binary (par défaut : "rshiny")

Le nom du binaire ou du script shell situé dans package/bin/ à lancer au démarrage du service.

La manière habituelle de créer ce fichier est :


(let* ((out       (assoc-ref %outputs "out"))
       (targetdir (string-append out "/share/" ,name))
       (app       (string-append out "/bin/" ,name))
       (Rbin      (search-input-file %build-inputs "/bin/Rscript")))
  ;; …
  (mkdir-p (string-append out "/bin"))
  (call-with-output-file app
    (lambda (port)
      (format port
"#!~a
library(shiny)
setwd(\"~a\")
runApp(launch.browser=0, port=4202)~%\n"
      Rbin targetdir))))

Service Nix

Le module (gnu services nix) fournit le service suivant.

Variable :nix-service-type

C’est le type du service qui lance le démon de construction du gestionnaire de paquets Nix. Voici un exemple qui montre comment l’utiliser :

(use-modules (gnu))
(use-service-modules nix)
(use-package-modules package-management)

(operating-system
  ;; …
  (packages (append (list nix)
                    %base-packages))

  (services (append (list (service nix-service-type))
                    %base-services)))

Après guix system reconfigure, configurez Nix pour votre utilisateur :

  • Ajoutez un canal Nix et mettez-le à jour. Voir Nix channels for more information about the available channels. If you would like to use the unstable Nix channel you can do this by running:
    $ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
    $ nix-channel --update
    
  • Create your Nix profile directory:
    $ sudo mkdir -p /nix/var/nix/profiles/per-user/$USER
    $ sudo chown $USER:root /nix/var/nix/profiles/per-user/$USER
    
  • Créez un lien symbolique vers votre profil et activez le profil de Nix :
    $ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
    $ source /run/current-system/profile/etc/profile.d/nix.sh
    
Type de données :nix-configuration

Ce type de données représente la configuration du démon Nix.

nix (par défaut : nix)

Le paquet Nix à utiliser.

sandbox (par défaut : #t)

Spécifie si les constructions sont effectuées dans un bac à sable par défaut.

build-directory (par défaut : "/tmp")

Le répertoire où les répertoires de construction sont stockés pendant les constructions. Il est utile de le modifier par exemple si l’emplacement par défaut n’a pas assez d’espace pour contenir l’arborescence de construction de gros paquets.

Cela fonctionne de la même manière que la variable d’environnement TPMDIR pour guix-daemon. TPMDIR, pour plus d’information.

build-sandbox-items (par défaut : '())

C’est une liste de chaines de caractères ou d’objets ajoutés au champ build-sandbox-items du fichier de configuration.

extra-config (par défaut : '())

C’est une liste de chaînes de caractères ou d’objets ajoutés au fichier de configuration. Elle est utile pour ajouter du texte supplémentaire directement dans le fichier de configuration.

extra-options (par défaut : '())

Options supplémentaires de la ligne de commande pour nix-service-type.

Service Fail2Ban

fail2ban scanne les fichiers journaux (p. ex. /var/log/apache/error_log) et bannit les adresses IP qui montrent des signes de malhonnêteté — des échecs de connexion répétés, des tentatives d’utiliser des exploits, etc.

Le type de service fail2ban-service-type est fournit par le module (gnu services security).

Ce type de service lance le démon fail2ban. Il peut être configuré de plusieurs façon qui sont :

Configuration basique

Les paramètres de base du service Fail2Ban peut être configurés via sa configuration fail2ban, qui est documentée ci-dessous.

Extensions personnalisées des prisons

La fonction fail2ban-jail-service peut être utilisée pour ajouter de nouvelles prisons Fail2Ban.

Mécanisme d’extension du Shepherd

Les développeurs de services peuvent étendre le type de service fail2ban-service-type lui-même avec le mécanisme d’extension habituel des services.

Variable :fail2ban-service-type

C’est le type de service qui lance le démon fail2ban. Voici un exemple de configuration de base explicite :

(append
 (list
  (service fail2ban-service-type
           (fail2ban-configuration
            (extra-jails
             (list
              (fail2ban-jail-configuration
               (name "sshd")
               (enabled? #t))))))
  ;; Il n'y a pas de dépendance implicite à un service SSH,
  ;; donc il faut en fournir un.
  (service openssh-service-type))
 %base-services)
Procédure :fail2ban-jail-service svc-type jail

Étend svc-type, un objet <service-type> avec jail, un objet fail2ban-jail-configuration.

Par exemple :

(append
 (list
  (service
   ;; La procédure « fail2ban-jail-service » peut étendre n'importe quel type de service
   ;; avec une prison fail2ban. Cela supprime la nécessité d'étendre les services explicitement
   ;; avec le fail2ban-service-type.
   (fail2ban-jail-service
    openssh-service-type
    (fail2ban-jail-configuration
     (name "sshd")
     (enabled? #t)))
   (openssh-configuration ...))))

Ci-dessous se trouve la référence des différents enregistrement de configuration jail-service-type.

Type de données :fail2ban-configuration

Les champs de fail2ban-configuration disponibles sont :

fail2ban (par défaut : fail2ban) (type : paquet)

Le paquet fail2ban à utiliser. Il est utilisé à la fois pour les binaires et pour la configuration de base par défaut qui doit être étendue avec des objets <fail2ban-jail-configuration>.

run-directory (par défaut : "/var/run/fail2ban") (type : chaine)

Le répertoire d’état pour le démon fail2ban.

jails (par défaut : '()) (type : liste-de-fail2ban-jail-configurations)

Instances de <fail2ban-jail-configuration> collectées par les extensions.

extra-jails (par défaut : '()) (type : liste-de-fail2ban-jail-configurations)

Instances de <fail2ban-jail-configuration> fournies explicitement.

extra-content (par défaut : '()) (type : text-config)

Contenu brut supplémentaire à ajouter à la fin du fichier jail.local, à fournir sous forme d’une liste de simili-fichiers.

Type de données :fail2ban-ignore-cache-configuration

Les champs de fail2ban-ignore-cache-configuration disponibles sont :

key (type : chaine)

Clé de cache.

max-count (type : entier)

Taille du cache.

max-time (type : entier)

Durée du cache.

Type de données :fail2ban-jail-action-configuration

Les champs de fail2ban-jail-action-configuration disponibles sont :

name (type : string)

Nom de l’action.

arguments (par défaut : '()) (type : liste-d’arguments)

Arguments de l’action.

Type de données :fail2ban-jail-configuration

Les champs de fail2ban-jail-configuration disponibles sont :

name (type : string)

Nom requis de cette configuration de prison.

enabled? (par défaut : #t) (type : booléen)

Spécifie si cette prison est activée.

backend (type : peut-être-symbole)

Le moteur à utiliser pour détecter les changements dans log-path. La valeur par défaut est ’auto. Pour consulter les valeurs par défaut de la configuration de prison, consultez le fichier /etc/fail2ban/jail.conf du paquet fail2ban.

max-retry (type : peut-être-entier)

Le nombre d’échecs avant qu’un hôte ne soit banni (p. ex. (max-retry 5)).

max-matches (type : peut-être-entier)

Le nombre de correspondances stockées dans le ticket (accessible avec l’étiquette <matches>) dans l’action.

find-time (type : peut-être-chaine)

La fenêtre pendant laquelle le compte de tentative maximale doit être atteint pour qu’une adresse IP soit bannie. Un hôte est banni s’il a généré max-retry pendant les dernières find-time secondes (p. ex. »find-time "10m")). Elle peut être fournie en seconde ou avec le « format temporel abrégé » de Fail2ban, décrit dans man 5 jail.conf.

ban-time (type : peut-être-chaine)

La durée, en secondes ou au format temporel abrégé, qu’un bannissement doit durer (p. ex. (ban-time "10m")).

ban-time-increment? (type : peut-être-booléen)

Indique s’il faut considérer les bannissements passés pour calculer un incrément du temps de bannissement par défaut d’une adresse IP particulière.

ban-time-factor (type : peut-être-chaine)

Le coefficient à utiliser pour calculer un temps de bannissement exponentiel.

ban-time-formula (type : peut-être-chaine)

C’est la formule utilisée pour calculer la prochaine valeur d’une durée de bannissement.

ban-time-multipliers (type : peut-être-chaine)

Utilisé pour calculer la prochaine valeur de la durée du bannissement au lieu de la formule.

ban-time-max-time (type : peut-être-chaine)

Le nombre maximum de secondes qu’un bannissement peut durer.

ban-time-rnd-time (type : peut-être-chaine)

Le nombre maximum de secondes maximum qu’un bannissement à durée aléatoire peut durer. C’est utile pour arrêter les robots « intelligents » qui calculent le moment exacte où une adresse IP peut être dé-bannie.

ban-time-overall-jails? (type : peut-être-booléen)

Lorsque la valeur est vraie, elle spécifie que la recherche d’une adresse IP dans la base de donnée doit se faire dans toutes les prisons. Sinon, seule la prison actuelle pour l’adresse IP bannie est prise en compte.

ignore-self? (type : peut-être-booléen)

Ne jamais bannir l’adresse IP de la machine locale.

ignore-ip (par défaut : '()) (type : liste-de-chaines)

Une liste d’adresse IP, de masques CIDR ou d’hôtes DNS à ignorer. fail2ban ne bannira par un hôte qui correspond à une adresse de cette liste.

ignore-cache (type : peut-être-fail2ban-ignore-cache-configuration)

fournit des paramètres de cache pour ignorer les vérifications d’échecs.

filter (type : peut-fail2ban-jail-filter-configuration)

Le filtre à utiliser par la prison, spécifiée par un objet <fail2ban-jail-filter-configuration>. Par défaut, les prisons ont un nom qui correspond au nom de leur filtre.

log-time-zone (type : peut-être-chaine)

Le fuseau horaire par défaut pour les lignes de journaux qui n’en indiquent pas.

log-encoding (type : peut-être-symbole)

L’encodage des journaux traités par la prison. Les valeurs possibles sont : 'ascii, 'utf-8 et 'auto.

log-path (par défaut : '()) (type : liste-de-chaines)

Le nom de fichier des journaux à surveiller.

action (par défaut : '()) (type : liste-de-fail2ban-jail-action)

Une liste de <fail2ban-jail-action-configuration>.

extra-content (par défaut : '()) (type : text-config)

Contenu supplémentaire pour la configuration de la prison, à fournir sous la forme d’une liste de simili-fichiers.

Type de données :fail2ban-jail-filter-configuration

Les champs de fail2ban-jail-filter-configuration disponibles sont :

name (type : string)

Filtre à utiliser.

mode (type : peut-être-chaine)

Mode de filtrage.

Resize File System Service

This service type lets you resize a live file system during boot, which can be convenient if a Guix image is flashed on an SD Card (e.g. for an embedded device) or uploaded to a VPS. In both cases the medium the image will reside upon may be larger than the image you want to produce.

For an embedded device booting from an SD card you may use something like:

(service resize-file-system-service-type
         (resize-file-system-configuration
          (file-system
           (file-system (device (file-system-label "root"))
                        (type "ext4")))))

Attention : Be extra cautious to use the correct device and type. The service has little error handling of its own and relies on the underlying tools. Wrong use could end in loss of data or the corruption of the operating system.

Partitions and file systems are grown to the maximum size available. File systems can only grow when they are on the last partition on a device and have empty space available.

This service supports the ext2, ext3, ext4, btrfs, and bcachefs file systems.

file-system (default: #f) (type: file-system)

The file-system object to resize (voir Systèmes de fichiers). This object must have the device and type fields set. Other fields are ignored.

cloud-utils (default: cloud-utils) (type: file-like)

The cloud-utils package to use. This package is used for the growpart command.

e2fsprogs (default: e2fsprogs) (type: file-like)

The e2fsprogs package to use, used for resizing ext2, ext3, and ext4 file systems.

btrfs-progs (default: btrfs-progs) (type: file-like)

The btrfs-progs package to use, used for resizing the btrfs file system.

bcachefs-tools (default: bcachefs-tools) (type: file-like)

The bcachefs-tools package to use, used for resizing the bcachefs file system.

Backup Services

The (gnu services backup) module offers services for backing up file system trees. For now, it provides the restic-backup-service-type.

With restic-backup-service-type, you can periodically back up directories and files with Restic, which supports end-to-end encryption and deduplication. Consider the following configuration:

(use-service-modules backup ) ;for 'restic-backup-service-type'
(use-package-modules sync )   ;for 'rclone'

(operating-system
  ;; …
  (packages (append (list rclone)    ;for use by restic
                    %base-packages))
  (services
    (list
      (service restic-backup-service-type
               (restic-backup-configuration
                 (jobs
                   (list (restic-backup-job
                           (name "remote-ftp")
                           (repository "rclone:remote-ftp:backup/restic")
                           (password-file "/root/.restic")
                           ;; Every day at 23.
                           (schedule "0 23 * * *")
                           (files '("/root/.restic"
                                    "/root/.config/rclone"
                                    "/etc/ssh/ssh_host_rsa_key"
                                    "/etc/ssh/ssh_host_rsa_key.pub"
                                    "/etc/guix/signing-key.pub"
                                    "/etc/guix/signing-key.sec"))))))))))

Each restic-backup-job translates to an mcron job which sets the RESTIC_PASSWORD environment variable by reading the first line of password-file and runs restic backup, creating backups using rclone of all the files listed in the files field.

The restic-backup-service-type installs as well restic-guix to the system profile, a restic utility wrapper that allows for easier interaction with the Guix configured backup jobs. For example the following could be used to instantaneusly trigger a backup for the above shown configuration, without waiting for the scheduled job:

restic-guix backup remote-ftp
Data Type :restic-backup-configuration

Available restic-backup-configuration fields are:

jobs (default: '()) (type: list-of-restic-backup-jobs)

The list of backup jobs for the current system.

Data Type :restic-backup-job

Available restic-backup-job fields are:

restic (default: restic) (type: package)

The restic package to be used for the current job.

user (default: "root") (type: string)

The user used for running the current job.

repository (type: string)

The restic repository target of this job.

name (type : string)

A string denoting a name for this job.

password-file (type: string)

Name of the password file, readable by the configured user, that will be used to set the RESTIC_PASSWORD environment variable for the current job.

schedule (type: gexp-or-string)

A string or a gexp that will be passed as time specification in the mcron job specification (voir mcron job specifications dans GNU mcron).

files (default: '()) (type: list-of-lowerables)

The list of files or directories to be backed up. It must be a list of values that can be lowered to strings.

verbose? (default: #f) (type: boolean)

Whether to enable verbose output for the current backup job.

extra-flags (default: '()) (type: list-of-lowerables)

A list of values that are lowered to strings. These will be passed as command-line arguments to the current job restic backup invokation.

DLNA/UPnP Services

The (gnu services upnp) module offers services related to UPnP (Universal Plug and Play) and DLNA (Digital Living Network Alliance), networking protocols that can be used for media streaming and device interoperability within a local network. For now, this module provides the readymedia-service-type.

ReadyMedia (formerly known as MiniDLNA) is a DLNA/UPnP-AV media server. The project’s daemon, minidlnad, can serve media files (audio, pictures, and video) to DLNA/UPnP-AV clients available on the network. readymedia-service-type is a Guix service that wraps around ReadyMedia’s minidlnad.

Consider the following configuration:

(use-service-modules upnp )

(operating-system
  
  (services
   (list (service readymedia-service-type
                  (readymedia-configuration
                   (media-directories
                    (list (readymedia-media-directory
                           (path "/media/audio")
                           (types '(A)))
                          (readymedia-media-directory
                           (path "/media/video")
                           (types '(V)))
                          (readymedia-media-directory
                           (path "/media/misc"))))
                   (extra-config '(("notify_interval" . "60")))))
         )))

This sets up the ReadyMedia daemon to serve files from the media folders specified in media-directories. The media-directories field is mandatory. All other fields (such as network ports and the server name) come with a predefined default and can be omitted.

Data Type :readymedia-configuration

Available readymedia-configuration fields are:

readymedia (default: readymedia) (type: package)

The ReadyMedia package to be used for the service.

friendly-name (default: #f) (type: maybe-string)

A custom name that will be displayed on connected clients.

media-directories (type: list)

The list of media folders to serve content from. Each item is a readymedia-media-directory.

cache-directory (default: "/var/cache/readymedia") (type: string)

A folder for ReadyMedia’s cache files. If not existing already, the folder will be created as part of the service activation and the ReadyMedia user will be assigned ownership.

log-directory (default: "/var/log/readymedia") (type: string)

A folder for ReadyMedia’s log files. If not existing already, the folder will be created as part of the service activation and the ReadyMedia user will be assigned ownership.

port (default: #f) (type: maybe-integer)

A custom port that the service will be listening on.

extra-config (default: '()) (type: alist)

An association list of further options, as accepted by ReadyMedia.

Data Type :readymedia-media-directory

A media-directories entry includes a folder path and, optionally, the types of media files included within the folder.

path (type: string)

The media folder location.

types (default: '()) (type: list)

A list indicating the types of file included in the media folder. Valid values are combinations of individual media types, i.e. symbol A for audio, P for pictures, V for video. An empty list means that no type is specified.


Précédent: Services Hurd, Monter: Services   [Table des matières][Index]