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


11.10.30 Services de virtualisation

Le module (gnu services virtualization) fournit des services pour les démons libvirt et virtlog, ainsi que d’autres services liés à la virtualisation.

Démon libvirt

libvirtd is the server side daemon component of the libvirt virtualization management system. This daemon runs on host servers and performs required management tasks for virtualized guests. To connect to the libvirt daemon as an unprivileged user, it must be added to the ‘libvirt’ group, as shown in the example below.

Variable :libvirt-service-type

C’est le type du démon libvirt. Sa valeur doit être un libvirt-configuration.

(users (cons (user-account
              (name "user")
              (group "users")
              (supplementary-groups '("libvirt"
                                      "audio" "video" "wheel")))
             %base-user-accounts))
(service libvirt-service-type
         (libvirt-configuration
          (tls-port "16555")))

Les champs de libvirt-configuration disponibles sont :

paramètre de libvirt-configuration :package libvirt

Paquet libvirt.

paramètre de libvirt-configuration :boolean listen-tls?

Indique s’il faut écouter des connexions TLS sécurisées sur le port TCP/IP public. Vous devez remplir le champ listen pour que cela ait un effet.

Il est nécessaire de mettre en place une CA et de créer un certificat serveur avant d’utiliser cette fonctionnalité.

La valeur par défaut est ‘#t’.

paramètre de libvirt-configuration :boolean listen-tcp?

Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez remplir le champ listen pour que cela ait un effet.

L’utilisation des sockets TCP requiert une authentification SASL par défaut. Seuls les mécanismes SASL qui prennent en charge le chiffrement des données sont permis. Il s’agit de DIGEST_MD5 et GSSAPI (Kerberos5).

La valeur par défaut est ‘#f’.

paramètre de libvirt-configuration :string tls-port

Port pour accepter les connexions TLS sécurisées. Il peut s’agir d’un numéro de port ou d’un nom de service.

La valeur par défaut est ‘"16514"’.

paramètre de libvirt-configuration :string tcp-port

Port sur lequel accepter les connexions TCP non sécurisées. Cela peut être un numéro de port ou un nom de service.

La valeur par défaut est ‘"16509"’.

paramètre de libvirt-configuration :string listen-addr

Adresse IP ou nom d’hôte utilisé pour les connexions des clients.

La valeur par défaut est ‘"0.0.0.0"’.

paramètre de libvirt-configuration :boolean mdns-adv?

Indique s’il faut annoncer le service libvirt en mDNS.

Autrement, vous pouvez désactiver cela pour tous les services en stoppant le démon Avahi.

La valeur par défaut est ‘#f’.

paramètre de libvirt-configuration :string mdns-name

Nom annoncé par défaut sur mDNS. Cela doit être unique sur le réseau local.

La valeur par défaut est ‘"Virtualization Host <hostname>"’.

paramètre de libvirt-configuration :string unix-sock-group

Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour permettre à un ensemble d’utilisateurs « de confiance » de gérer les fonctionnalités sans devenir root.

Defaults to ‘"libvirt"’.

paramètre de libvirt-configuration :string unix-sock-ro-perms

Permission Unix pour le socket en lecture seule. Il est utilisé pour surveiller le statut des VM uniquement.

La valeur par défaut est ‘"0777"’.

paramètre de libvirt-configuration :string unix-sock-rw-perms

Permission Unix pour le socket en lecture-écriture. La valeur par défaut n’autorise que root. Si PolicyKit est activé sur le socket, la valeur par défaut change et permet tout le monde (c.-à-d. 0777)

La valeur par défaut est ‘"0770"’.

paramètre de libvirt-configuration :string unix-sock-admin-perms

Permissions Unix pour le socket d’administration. La valeur par défaut ne permet que le propriétaire (root), ne la changez pas à moins que vous ne soyez sûr de savoir à qui vous exposez cet accès.

La valeur par défaut est ‘"0777"’.

paramètre de libvirt-configuration :string unix-sock-dir

Le répertoire dans lequel les sockets sont créés.

La valeur par défaut est ‘"/var/run/libvirt"’.

paramètre de libvirt-configuration :string auth-unix-ro

Schéma d’authentification pour les socket Unix en lecture-seule. Par défaut les permissions des socket permettent à n’importe qui de se connecter

La valeur par défaut est ‘"polkit"’.

paramètre de libvirt-configuration :string auth-unix-rw

Schéma d’authentification pour les socket UNIX en lecture-écriture. Par défaut les permissions du socket ne permettent que root. Si le support de PolicyKit a été compilé dans libvirt, la valeur par défaut utilise l’authentification « polkit ».

La valeur par défaut est ‘"polkit"’.

paramètre de libvirt-configuration :string auth-tcp

Schéma d’authentification pour les sockets TCP. Si vous n’avez pas activé SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de scénario de développement ou de test.

La valeur par défaut est ‘"sasl"’.

paramètre de libvirt-configuration :string auth-tls

Schéma d’authentification pour les sockets TLS. Les sockets TLS sont déjà chiffrés par la couche TLS, et une authentification limitée est effectuée avec les certificats.

Il est possible d’utiliser de n’importe quel mécanisme d’authentification SASL en utilisant « sasl » pour cette option

La valeur par défaut est ‘"none"’.

paramètre de libvirt-configuration :optional-list access-drivers

Schéma de contrôle d’accès à l’API.

Par défaut un utilisateur authentifié peut accéder à toutes les API. Les pilotes d’accès peuvent placer des restrictions là-dessus.

La valeur par défaut est ‘'()’.

paramètre de libvirt-configuration :string key-file

Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide, aucune clef privée n’est chargée.

La valeur par défaut est ‘""’.

paramètre de libvirt-configuration :string cert-file

Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun certificat n’est chargé.

La valeur par défaut est ‘""’.

paramètre de libvirt-configuration :string ca-file

Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun certificat de CA n’est chargé.

La valeur par défaut est ‘""’.

paramètre de libvirt-configuration :string crl-file

Chemin de la liste de révocation des certificats. Si la chaîne est vide, aucun CRL n’est chargé.

La valeur par défaut est ‘""’.

paramètre de libvirt-configuration :boolean tls-no-sanity-cert

Désactive la vérification de nos propres certificats serveurs.

Lorsque libvirtd démarre il effectue des vérifications de routine sur ses propres certificats.

La valeur par défaut est ‘#f’.

paramètre de libvirt-configuration :boolean tls-no-verify-cert

Désactive la vérification des certificats clients.

La vérification des certificats clients est le mécanisme d’authentification principal. Tout client qui ne présent pas de certificat signé par la CA sera rejeté.

La valeur par défaut est ‘#f’.

paramètre de libvirt-configuration :optional-list tls-allowed-dn-list

Liste blanche des Distinguished Name x509 autorisés.

La valeur par défaut est ‘'()’.

paramètre de libvirt-configuration :optional-list sasl-allowed-usernames

Liste blanche des noms d’utilisateur SASL permis. Le format des noms d’utilisateurs dépend du mécanisme d’authentification SASL.

La valeur par défaut est ‘'()’.

paramètre de libvirt-configuration :string tls-priority

Modifie la chaine de priorité TLS par défaut fixée à la compilation. La valeur par défaut est typiquement ‘NORMAL’ à moins qu’elle n’ait été modifiée à la compilation. Ne l’indiquez que si vous voulez que libvirt agisse différemment des paramètres par défaut globaux.

La valeur par défaut est ‘"NORMAL"’.

paramètre de libvirt-configuration :integer max-clients

Nombre maximum de connexions clientes en même temps sur tous les sockets.

La valeur par défaut est ‘5000’.

paramètre de libvirt-configuration :integer max-queued-clients

Longueur maximum de la queue de connexions en attente d’acceptation du démon. Remarquez que certains protocoles supportant la retransmission peuvent obéir à ce paramètre pour qu’une connexion ultérieure réussisse.

La valeur par défaut est ‘1000’.

paramètre de libvirt-configuration :integer max-anonymous-clients

Longueur maximum de la queue des clients acceptés mais pas authentifiés. Indiquez zéro pour désactiver ce paramètre

La valeur par défaut est ‘20’.

paramètre de libvirt-configuration :integer min-workers

Nombre de processus de travail démarrés initialement.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer max-workers

Nombre maximum de threads de travail.

Si le nombre de clients actifs dépasse min-workers, plus de threads seront démarrés, jusqu’à la limite de max_workers. Typiquement vous voulez que max_workers soit égal au nombre maximum de clients permis.

La valeur par défaut est ‘20’.

paramètre de libvirt-configuration :integer prio-workers

Nombre de travailleurs prioritaires. Si tous les threads de travail du groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires (notamment domainDestroy) peuvent être exécutés par ce groupe.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer max-requests

Limite globale totale sur les appels RPC concurrents.

La valeur par défaut est ‘20’.

paramètre de libvirt-configuration :integer max-client-requests

Limite de requêtes concurrentes depuis une connexion cliente unique. Pour éviter qu’un client ne monopolise le serveur, vous devriez indiquer une petite partie des paramètres global max_requests et max_workers.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer admin-min-workers

Comme min-workers mais pour l’interface d’administration.

La valeur par défaut est ‘1’.

paramètre de libvirt-configuration :integer admin-max-workers

Comme max-workers mais pour l’interface d’administration.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer admin-max-clients

Comme max-clients mais pour l’interface d’administration.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer admin-max-queued-clients

Comme max-queued-clients mais pour l’interface d’administration.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer admin-max-client-requests

Comme max-client-requests mais pour l’interface d’administration.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer log-level

Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information, 1 : débogage.

La valeur par défaut est ‘3’.

paramètre de libvirt-configuration :string log-filters

Filtres de journalisation.

Un filtre qui permet de sélectionner un niveau de journalisation différent pour une catégorie donnée. Le format d’un filtre est :

  • x:nom
  • x:+nom

nom est une chaine de caractères qui correspond à la catégorie donnée dans VIR_LOG_INIT() au début de chaque fichier source de libvirt, p. ex. ‘remote’, ‘qemu’ ou ‘util.json’ (le nom dans le filtre peut être une sous-chaine du nom complet de la catégorie, pour pouvoir correspondre à plusieurs catégories similaires), le préfixe facultatif ‘+’ dit à libvirt d’enregistrer les traces de piles pour chaque message qui correspond au nom, et x est le niveau minimal des messages qui devraient être enregistrés :

  • 1 : DEBUG
  • 2 : INFO
  • 3 : WARNING
  • 4 : ERROR

On peut définir plusieurs filtres dans une seule déclaration de filtres, ils doivent juste être séparés par des espaces.

La valeur par défaut est ‘"3:remote 4:event"’.

paramètre de libvirt-configuration :string log-outputs

Sorties de débogage.

Une sortie est l’un des endroits où les journaux sont enregistrés. Le format d’une sortie peut être :

x:stderr

la sortie va vers stderr

x:syslog:nom

utilise syslog comme sortie et utilise le nom donné comme identifiant

x:file:chemin_fichier

la sortie va vers un fichier, avec le chemin donné

x:journald

la sortie va vers le système de journalisation journald

Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un filtre

  • 1 : DEBUG
  • 2 : INFO
  • 3 : WARNING
  • 4 : ERROR

Plusieurs sorties peuvent être définies, elles doivent juste être séparées par des espaces.

La valeur par défaut est ‘"3:stderr"’.

paramètre de libvirt-configuration :integer audit-level

Permet de modifier l’utilisation du sous-système d’audit

  • 0 : désactive tout audit
  • 1 : active l’audit, seulement s’il est activé sur l’hôte
  • 2 : active l’audit, et quitte s’il est désactivé sur l’hôte.

La valeur par défaut est ‘1’.

paramètre de libvirt-configuration :boolean audit-logging

Envoie les messages d’audit via l’infrastructure de journalisation de libvirt.

La valeur par défaut est ‘#f’.

paramètre de libvirt-configuration :optional-string host-uuid

UUID de l’hôte. L’UUID ne doit pas avoir tous ses nombres identiques.

La valeur par défaut est ‘""’.

paramètre de libvirt-configuration :string host-uuid-source

Source où lire l’UUID de l’hôte.

  • smbios : récupère l’UUID à partir de dmidecode -s system-uuid
  • machine-id : récupère l’UUID à partir de /etc/machine-id

Si dmidecode ne fournit pas un UUID valide, un UUID temporaire sera généré.

La valeur par défaut est ‘"smbios"’.

paramètre de libvirt-configuration :integer keepalive-interval

Un message keepalive est envoyé au client après keepalive_interval secondes d’inactivité pour vérifier si le client répond toujours. Si la valeur est -1, libvirtd n’enverra jamais de requête keepalive ; cependant les clients peuvent toujours en envoyer et le démon y répondra.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer keepalive-count

Nombre maximum de messages keepalive qui peuvent être envoyés au client sans réponse avant que la connexion ne soit considérée comme cassée.

En d’autres termes, la connexion est approximativement fermée après keepalive_interval * (keepalive_count + 1) secondes après le dernier message reçu de la part du client. Lorsque keepalive-count est à 0, les connexions seront automatiquement fermées après keepalive-interval secondes d’inactivité sans envoyer le moindre message keepalive.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer admin-keepalive-interval

Comme précédemment, mais pour l’interface d’administration.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer admin-keepalive-count

Comme précédemment, mais pour l’interface d’administration.

La valeur par défaut est ‘5’.

paramètre de libvirt-configuration :integer ovs-timeout

Délai d’attente pour les appels Open vSwitch.

L’utilitaire ovs-vsctl est utilisé pour la configuration et son option de délai d’attente est à 5 secondes pour éviter qu’une attente infinie ne bloque libvirt.

La valeur par défaut est ‘5’.

Démon Virrlog

Le service virtlogd est un démon côté serveur qui fait partie de libvirt, utilisé pour gérer les journaux des consoles des machines virtuelles.

Ce démon n’est pas utilisé directement par les clients libvirt, mais il est appelé pour eux par libvirtd. En maintenant les journaux dans un démon séparé, le démon libvirtd principal peut être redémarré sans risque de perte de journaux. Le démon virtlogd a la possibilité de ré-exécuter exec() sur lui-même quand il reçoit SIGUSR1, pour permettre des mises à jour à chaud sans temps mort.

Variable :virtlog-service-type

Le type de service pour le démon virtlogd. Sa valeur doit être un virtlog-configuration.

(service virtlog-service-type
         (virtlog-configuration
          (max-clients 1000)))
paramètre de libvirt :package libvirt

Paquet libvirt.

paramètre de virtlog-configuration :integer log-level

Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information, 1 : débogage.

La valeur par défaut est ‘3’.

paramètre de virtlog-configuration :string log-filters

Filtres de journalisation.

Un filtre qui permet de sélectionner plusieurs niveaux de journalisation pour une catégorie donnée. Le format d’un filtre est :

  • x:nom
  • x:+nom

nom est une chaîne de caractères qui correspond à la catégorie donnée dans VIR_LOG_INIT() au début de chaque fichier source de libvirt, p. ex. « remote », « qemu » ou « util.json » (le nom dans le filtre peut être une sous-chaîne du nom complet de la catégorie, pour pouvoir correspondre à plusieurs catégories similaires), le préfixe facultatif « + » dit à libvirt d’enregistrer les traces de piles pour chaque message qui correspond au nom, et x est le niveau minimal des messages qui devraient être enregistrés :

  • 1 : DEBUG
  • 2 : INFO
  • 3 : WARNING
  • 4 : ERROR

On peut définir plusieurs filtres dans une seule déclaration de filtres, ils doivent juste être séparés par des espaces.

La valeur par défaut est ‘"3:remote 4:event"’.

paramètre de virtlog-configuration :string log-outputs

Sorties de débogage.

Une sortie est l’un des endroits où les journaux sont enregistrés. Le format d’une sortie peut être :

x:stderr

la sortie va vers stderr

x:syslog:nom

utilise syslog comme sortie et utilise le nom donné comme identifiant

x:file:chemin_fichier

la sortie va vers un fichier, avec le chemin donné

x:journald

la sortie va vers le système de journalisation journald

Dans tous les cas, le préfixe x est le niveau minimal, qui agit comme un filtre

  • 1 : DEBUG
  • 2 : INFO
  • 3 : WARNING
  • 4 : ERROR

Plusieurs sorties peuvent être définies, elles doivent juste être séparées par des espaces.

La valeur par défaut est ‘"3:stderr"’.

paramètre de virtlog-configuration :integer max-clients

Nombre maximum de connexions clientes en même temps sur tous les sockets.

La valeur par défaut est ‘1024’.

paramètre de virtlog-configuration :integer max-size

Taille de fichier maximale avant roulement.

La valeur par défaut est ‘2MB

paramètre de virtlog-configuration :integer max-backups

Nombre maximal de fichiers de sauvegardes à garder.

La valeur par défaut est ‘3

Émulation transparente avec QEMU

qemu-binfmt-service-type fournit le support de l’émulation transparente de binaires construits pour des architectures différentes — p. ex. il permet d’exécuter de manière transparente des programmes ARMv7 sur une machine x86_64. Cela se fait en combinant l’émulateur QEMU et la fonctionnalité binfmt_misc du noyau Linux. Cette fonctionnalité ne vous permet que d’émuler GNU/Linux sur une architecture différente, mais regardez plus bas pour GNU/Hurd.

Variable :qemu-binfmt-service-type

Le type du service QEMU/binfmt pour l’émulation transparente. Sa valeur doit être un objet qemu-binfmt-configuration, qui spécifie le paquet QEMU à utiliser ainsi que l’architecture que vous voulez émuler :

Dans cet exemple, on active l’émulation transparente pour les plateformes ARM et aarch64. Lancer herd stop qemu-binfmt l’éteint et lancer herd start qemu-binfmt le rallume (voir the herd command dans The GNU Shepherd Manual).

Type de données :qemu-binfmt-configuration

La configuration du service qemu-binfmt.

platforms (par défaut : '())

La liste des plates-formes émulées par QEMU. Chaque élément doit être un objet platform object tel que renvoyé par lookup-qemu-platforms (voir plus bas).

Par exemple, supposons que vous soyez sur une machine x86_64 et que vous avez ce services :

Vous pouvez lancer :

guix build -s armhf-linux inkscape

et cela construira Inkscape pour ARMv7 comme s’il s’agissait d’une construction native, de manière transparente avec QEMU pour émuler un CPU ARMv7. Plutôt pratique si vous voulez tester un paquet construit pour une architecture à laquelle vous n’avez pas accès !

qemu (par défaut : qemu)

Le paquet QEMU à utiliser.

Procédure :lookup-qemu-platforms platforms…

Renvoie la liste des objets de plates-formes QEMU correspondant à platforms…. platforms doit être une liste de chaînes de caractères correspondant aux noms de plates-formes, comme "arm", "sparc", "mips64el" etc.

Procédure :qemu-platform? obj

Renvoie vrai s iobj est un objet de plate-forme.

Procédure :qemu-platform-name platform

Renvoie le nom de platform — une chaîne comme "arm".

Agent invité de QEMU

L’agent invité de QEMU permet de contrôler le système émulé à partir de l’hôte. Le service qemu-guest-agent lance l’agent sur les invités Guix. Pour contrôler l’agent à partir de l’hôte, ouvrez un socket en invoquant QEMU avec les arguments suivants :

qemu-system-x86_64 \
	-chardev socket,path=/tmp/qga.sock,server=on,wait=off,id=qga0 \
	-device virtio-serial \
	-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
	...

Cela crée un socket dans /tmp/qga.sock sur l’hôte. Une fois l’agent invité lancé vos pouvez exécuter des commandes avec socat :

$ guix shell socat -- socat unix-connect:/tmp/qga.sock stdio
{"execute": "guest-get-host-name"}
{"return": {"host-name": "guix"}}

Voir la documentation de l’agent invité de QEMU pour les options et les commandes supplémentaires.

Variable :qemu-guest-agent-service-type

Type de service pour l’agent invité de QEMU.

Type de données :qemu-guest-agent-configuration

La configuration du service qemu-guest-agent.

qemu (par défaut : qemu-minimal)

Le paquet QEMU à utiliser.

device (par défaut : "")

Le nom de périphérique ou de socket que l’agent utilise pour communiquer avec l’hôte. Si le nom est vide, QEMU utilisera un nom de fichier par défaut.

Virtual Build Machines

Virtual build machines or “build VMs” let you offload builds to a fully controlled environment. “How can it be more controlled than regular builds? And why would it be useful?”, you ask. Good questions.

Builds spawned by guix-daemon indeed run in a controlled environment; specifically the daemon spawns build processes in separate namespaces and in a chroot, such as that build processes only see their declared dependencies and a well-defined subset of the file system tree (voir Réglages de l’environnement de construction, for details). A few aspects of the environments are not controlled though: the operating system kernel, the CPU model, and the date. Most of the time, these aspects have no impact on the build process: the level of isolation guix-daemon provides is “good enough”.

However, there are occasionally cases where those aspects do influence the build process. A typical example is time traps: build processes that stop working after a certain date38. Another one is software that optimizes for the CPU microarchitecture it is built on or, worse, bugs that manifest only on specific CPUs.

To address that, virtual-build-machine-service-type lets you add a virtual build machine on your system, as in this example:

(use-modules (gnu services virtualization))

(operating-system
  ;; …
  (services (append (list (service virtual-build-machine-service-type))
                    %base-services)))

By default, you have to explicitly start the build machine when you need it, at which point builds may be offloaded to it (voir Utiliser le dispositif de déchargement):

herd start build-vm

With the default setting shown above, the build VM runs with its clock set to a date several years in the past, and on a CPU model that corresponds to that date—a model possibly older than that of your machine. This lets you rebuild today software from the past that would otherwise fail to build due to a time trap or other issues in its build process. You can view the VM’s config like this:

herd configuration build-vm

You can configure the build VM, as in this example:

(service virtual-build-machine-service-type
         (virtual-build-machine
          (cpu "Westmere")
          (cpu-count 8)
          (memory-size (* 1 1024))
          (auto-start? #t)))

The available options are shown below.

Variable :virtual-build-machine-service-type

This is the service type to run virtual build machines. Virtual build machines are configured so that builds are offloaded to them when they are running.

Data Type :virtual-build-machine

This is the data type specifying the configuration of a build machine. It contains the fields below:

name (default: 'build-vm)

The name of this build VM. It is used to construct the name of its Shepherd service.

image

The image of the virtual machine (voir Créer des images systèmes). This notably specifies the virtual disk size and the operating system running into it (voir Référence de operating-system). The default value is a minimal operating system image.

qemu (par défaut : qemu-minimal)

The QEMU package to run the image.

cpu

The CPU model being emulated as a string denoting a model known to QEMU.

The default value is a model that matches date (see below). To see what CPU models are available, run, for example:

qemu-system-x86_64 -cpu help
cpu-count (default: 4)

The number of CPUs emulated by the virtual machine.

memory-size (default: 2048)

Size in mebibytes (MiB) of the virtual machine’s main memory (RAM).

date (default: a few years ago)

Date inside the virtual machine when it starts; this must be a SRFI-19 date object (voir SRFI-19 Date dans GNU Guile Reference Manual).

port-forwardings (default: 11022 and 11004)

TCP ports of the virtual machine forwarded to the host. By default, the SSH and secrets ports are forwarded into the host.

systems (par défaut : (list (%current-system)))

List of system types supported by the build VM—e.g., "x86_64-linux".

auto-start? (default: #f)

Whether to start the virtual machine when the system boots.

In the next section, you’ll find a variant on this theme: GNU/Hurd virtual machines!

Exécuter le Hurd dans une machine virtuelle

Le service hurd-vm permet de lancer GNU/Hurd dans une machine virtuelle (VM), un childhurd. Ce service est conçu pour être utilisé sur GNU/Linux et la configuration du système GNU/Hurd donné est compilée de manière croisée. La machine virtuelle est un service Shepherd qui a les noms hurd-vm et childhurd et qui peut être contrôlé avec les commandes suivantes :

herd start hurd-vm
herd stop childhurd

Lorsque le service est lancé, vous pouvez voir sa console en vous y connectant avec un client VNC, par exemple avec :

guix shell tigervnc-client -- vncviewer localhost:5900

The default configuration (see hurd-vm-configuration below) spawns a secure shell (SSH) server in your GNU/Hurd system, which QEMU (the virtual machine emulator) redirects to port 10022 on the host. By default, the service enables offloading such that the host guix-daemon automatically offloads GNU/Hurd builds to the childhurd (voir Utiliser le dispositif de déchargement). This is what happens when running a command like the following one, where i586-gnu is the system type of 32-bit GNU/Hurd:

guix build emacs-minimal -s i586-gnu

Le childhurd est volatile et sans état . il démarre avec un nouveau système de fichier à chaque fois que vous le redémarrez. Par défaut cependant, tous les fichiers sous /etc/childhurd sur l’hôte sont copiés tels quels sur le système de fichiers racine du childhurd à son démarrage. Cela vous permet d’initialiser des « secrets » à l’intérieur de la VM : les clés hôtes SSH, les clés de substituts autorisés, etc — voir l’explication de secret-root ci-dessous.

You will probably find it useful to create an account for you in the GNU/Hurd virtual machine and to authorize logins with your SSH key. To do that, you can define the GNU/Hurd system in the usual way (voir Utiliser le système de configuration), and then pass that operating system as the os field of hurd-vm-configuration, as in this example:

(define childhurd-os
  ;; Definition of my GNU/Hurd system, derived from the default one.
  (operating-system
    (inherit %hurd-vm-operating-system)

    ;; Add a user account.
    (users (cons (user-account
                  (name "charlie")
                  (comment "This is me!")
                  (group "users")
                  (supplementary-groups '("wheel"))) ;for 'sudo'
                 %base-user-accounts))

    (services
     ;; Modify the SSH configuration to allow login as "root"
     ;; and as "charlie" using public key authentication.
     (modify-services (operating-system-user-services
                       %hurd-vm-operating-system)
       (openssh-service-type
        config => (openssh-configuration
                   (inherit config)
                   (authorized-keys
                    `(("root"
                       ,(local-file
                         "/home/charlie/.ssh/id_rsa.pub"))
                      ("charlie"
                       ,(local-file
                         "/home/charlie/.ssh/id_rsa.pub"))))))))))

(operating-system
  ;; …
  (services
    ;; Add the 'hurd-vm' service, configured to use the
    ;; operating system configuration above.
    (append (list (service hurd-vm-service-type
                           (hurd-vm-configuration
                             (os %childhurd-os))))
            %base-services)))

That’s it! The remainder of this section provides the reference of the service configuration.

Variable :hurd-vm-service-type

C’est le type du service du Hurd dans une machine virtuelle. Sa valeur doit être un objet hurd-vm-configuration, qui spécifie le système d’exploitation (voir Référence de operating-system) et la taille de disque pour la machine virtuelle du Hurd, le paquet QEMU à utiliser ainsi que les options pour le lancer.

Par exemple :

(service hurd-vm-service-type
         (hurd-vm-configuration
          (disk-size (* 5000 (expt 2 20))) ;5G
          (memory-size 1024)))             ;1024MiB

créerait une image disque assez grande pour construire GNU Hello, avec une peu de place en plus.

Type de données :hurd-vm-configuration

Type de données représentant la configuration de hurd-vm-service-type.

os (par défaut : %hurd-vm-operating-system)

Le système d’exploitation à instancier. La valeur par défaut est le système minimal avec un démon OpenSSH permissif en écoute sur le port 2222 (voir openssh-service-type).

qemu (par défaut : qemu-minimal)

Le paquet QEMU à utiliser.

image (par défaut : hurd-vm-disk-image)

The image object representing the disk image of this virtual machine (voir Créer des images systèmes).

disk-size (par défaut : 'guess)

La taille de l’image disque.

memory-size (par défaut : 512)

La taille de mémoire de la machine virtuelle en mébioctets.

options (par défaut : '("--snapshot"))

Options supplémentaires pour lancer QEMU.

id (par défaut : #f)

Si l’option est indiquée, c’est un entier strictement positif utilisé créer plusieurs instances de childhurd. Il est ajouté au nom du service, p. ex. childhurd1.

net-options (par défaut : hurd-vm-net-options)

La procédure utilisée pour produire une liste d’options réseau pour QEMU.

Par défaut, elle produit

'("--device" "rtl8139,netdev=net0"
  "--netdev" (string-append
              "user,id=net0,"
              "hostfwd=tcp:127.0.0.1:secrets-port-:1004,"
              "hostfwd=tcp:127.0.0.1:ssh-port-:2222,"
              "hostfwd=tcp:127.0.0.1:vnc-port-:5900"))

avec les ports renvoyés :

secrets-port: (+ 11004 (* 1000 ID))
ssh-port: (+ 10022 (* 1000 ID))
vnc-port: (+ 15900 (* 1000 ID))
offloading? (default: #t)

Whether to automatically set up offloading of builds to the childhurd.

When enabled, this lets you run GNU/Hurd builds on the host and have them transparently offloaded to the VM, for instance when running a command like this:

guix build coreutils -s i586-gnu

This option automatically sets up offloading like so:

  1. Authorizing the childhurd’s key on the host so that the host accepts build results coming from the childhurd, which can be done like so (voir guix archive --authorize, for more on that).
  2. Creating a user account called offloading dedicated to offloading in the childhurd.
  3. Creating an SSH key pair on the host and making it an authorized key of the offloading account in the childhurd.
  4. Ajouter le childhurd à /etc/guix/machines.scm (voir Utiliser le dispositif de déchargement).
secret-root (par défaut : /etc/childhurd)

Le répertoire racine avec des secrets externes à installer dans le childhurd une fois lancé. Les childhurds sont volatile, ce qiu signifie qu’à chaque démarrage, les secrets comme les clés hôtes SSH et la clé de signature de Guix sont recréés.

Si le répertoire /etc/childhurd n’existe pas, le secret-service qui tourne dans le Childhurd recevra une liste vide de secrets.

Par défaut, le service rempli automatiquement /etc/childhurd avec les secrets non-volatiles suivants, à moins qu’ils existent déjà :

/etc/childhurd/etc/guix/acl
/etc/childhurd/etc/guix/signing-key.pub
/etc/childhurd/etc/guix/signing-key.sec
/etc/childhurd/etc/ssh/authorized_keys.d/offloading
/etc/childhurd/etc/ssh/ssh_host_ed25519_key
/etc/childhurd/etc/ssh/ssh_host_ecdsa_key
/etc/childhurd/etc/ssh/ssh_host_ed25519_key.pub
/etc/childhurd/etc/ssh/ssh_host_ecdsa_key.pub

Remarquez que par défaut l’image de la VM est volatile, c.-à-d. qu’une fois arrêtée le contenu est perdu. Si vous voulez une image avec état à la place, remplacez les champs image et options pour enlever le drapeau --snapshot avec quelque chose de ce style-là :

(service hurd-vm-service-type
         (hurd-vm-configuration
          (image   (const "/out/of/store/writable/hurd.img"))
          (options '())))

Ganeti

Remarque : Ce service est considéré comme étant expérimental. Les options de configuration peuvent changer de manière non compatible, et tous les paramètres n’ont pas été testés. Si vous utilisez ce service, nous vous encourageons à partager votre expérience avec guix-devel@gnu.org.

Ganeti est un système de gestion de machines virtuelles. Il est conçu pour faire tourner les machines virtuelles en continue sur une grappe de serveurs même dans le cas d’une erreur matérielle, et pour rendre les tâches de maintenance et de récupération faciles. Il consisste en plusieurs services qui sont décrits plus loin dans cette section. En plus du service Ganeti, vous aurez besoin du service OpenSSH (voir openssh-service-type), et de mettre à jour le fichier /etc/hosts (voir hosts-service-type) avec le nom de la grappe et l’adresse (ou utiliser un serveur DNS).

Tous les nœuds participant dans une grappe Ganeti devraient avec la même configuration de Ganeti et /etc/hosts. voici un exemple de configuration pour un nœud d’une grappe Ganeti qui prend en charge plusieurs moteurs de stockage et installe les fournisseurs de systèmes debbotstrap et guix :

(use-package-modules virtualization)
(use-service-modules base ganeti networking ssh)
(operating-system
  ;; …
  (host-name "node1")

  ;; Installe QEMU pour pouvoir utiliser les instances KVM, ainsi que LVM, DRBD et Ceph
  ;; pour utiliser les moteurs de stockage « plain », « drbd » et « rbd ».
  (packages (append (map specification->package
                         '("qemu" "lvm2" "drbd-utils" "ceph"
                           ;; Add the debootstrap and guix OS providers.
                           "ganeti-instance-guix" "ganeti-instance-debootstrap"))
                    %base-packages))
  (services
   (append (list (service static-networking-service-type
                          (list (static-networking
                                 (addresses
                                  (list (network-address
                                         (device "eth0")
                                         (value "192.168.1.201/24"))))
                                 (routes
                                  (list (network-route
                                         (destination "default")
                                         (gateway "192.168.1.254"))))
                                 (name-servers '("192.168.1.252"
                                                 "192.168.1.253")))))

                 ;; Ganeti utilise SSH pour communiquer entre les nœuds.
                 (service openssh-service-type
                          (openssh-configuration
                           (permit-root-login 'prohibit-password)))

                 (simple-service 'ganeti-hosts-entries hosts-service-type
                                 (list
                                   (host "192.168.1.200" "ganeti.example.com")
                                   (host "192.168.1.201" "node1.example.com"
                                         '("node1"))
                                   (host "192.168.1.202" "node2.example.com"
                                         '("node2"))))

                 (service ganeti-service-type
                          (ganeti-configuration
                           ;; cette liste spécifie les chemins du système de fichiers autorisés
                           ;; pour le stockage des images de machines virtuelles.
                           (file-storage-paths '("/srv/ganeti/file-storage"))
                           ;; Cette variable configure une « variante » pour
                           ;; Debootstrap et Guix qui fonctionne avec KVM.
                           (os %default-ganeti-os))))
           %base-services)))

Nous vous encourageons à lire le guide d’administration de Ganeti pour apprendre les diverse options de grappes et les opérations de base. Il y a aussi un billet de blog décrivant comment configurer et initialiser une petite grappe.

Variable :ganeti-service-type

C’est le type de service qui inclus tous les service dont les nœuds Ganeti ont besoin.

Sa valeur est un objet ganeti-configurtaion qui définie le paquet pour utiliser les opérations en ligne de commande, ainsi que pour les divers démons. Les chemins de stockage autorisés et les systèmes d’exploitation invités disponibles sont aussi configurés à travers ce type de données.

Type de données :ganeti-configuration

Le service ganeti prend les options de configuration suivante :

ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser. Il sera installé sur le profil du système et rendra gnt-cluster, gnt-instance, etc disponibles. Remarquez que la valeur spécifiée ici n’affecte pas les autres services auxquels se réfère le paquet ganeti (voir plus bas).

noded-configuration (par défaut : (ganeti-noded-configuration))
confd-configuration (par défaut : (ganeti-confd-configuration))
wconfd-configuration (par défaut : (ganeti-wconfd-configuration))
luxid-configuration (par défaut : (ganeti-luxid-configuration))
rapi-configuration (par défaut : (ganeti-rapi-configuration))
kvmd-configuration (par défaut : (ganeti-kvmd-configuration))
mond-configuration (par défaut : (ganeti-mond-configuration))
metad-configuration (par défaut : (ganeti-metad-configuration))
watcher-configuration (par défaut : (ganeti-watcher-configuration))
cleaner-configuration (par défaut : (ganeti-cleaner-configuration))

Ces options contrôlent les divers démons et tâches cron distribués avec Ganeti. Les valeurs possibles sont détaillées plus bas. Pour changer un paramètre, vous devez utiliser le type de configuration pour ce service :

(service ganeti-service-type
         (ganeti-configuration
          (rapi-configuration
           (ganeti-rapi-configuration
            (interface "eth1"))))
          (watcher-configuration
           (ganeti-watcher-configuration
            (rapi-ip "10.0.0.1"))))
file-storage-paths (par défaut : '())

Liste des répertoire autorisés pour le moteur de stockage de fichiers.

hooks (par défaut : #f)

Lorsqu’une valeur est indiquée, elle doit être un objet simili-fichier contenant un répertoire avec des crochets d’exécution de grappe.

os (par défaut : %default-ganeti-os)

Liste des enregistrements <ganeti-os>.

En résumé ganeti-service-type est un raccourci pour la déclaration de chaque service individuel :

Plus une extension de service pour etc-service-type qui configure le moteur de stockage de fichiers et les variantes de systèmes.

Type de données :ganeti-os

Ce type de données peut être passé au paramètre os de ganeti-configuration. Il prend les paramètres suivants :

name

Le nom du fournisseur de système. Il est seulement utilisé pour spécifier où la configuration se trouve. Indiquer « debootstrap » créera /etc/ganeti/intance-debootstrap.

extension (par défaut : #f)

L’extension de fichier pour les variantes de ce type de système. Par exemple .conf ou .scm. Elle sera ajoutée à la fin du nom de fichier si elle est indiquée.

variants (par défaut : '())

Il doit s’agir soit d’une liste d’objets ganeti-os-variant pour cet OS ou un objet « simili-fichier » (voir file-like objects) représentant le répertoire des variantes.

Pour utiliser le fournisseur Guix OS avec les définitions des variantes dans un répertoire local au lieu de déclarer des variantes individuelles (voir guix-variants ci-dessous), vous pouvez utiliser :

(ganeti-os
 (name "guix")
 (variants (local-file "ganeti-guix-variants"
                       #:recursive? #true)))

Remarquez que vous devrez maintenir le fichier variants.list (voir ganeti-os-interface(7)) manuellement dans ce cas.

Type de données :ganeti-os-variant

Type de données représentant une variante de système Ganeti. Il prend les paramètres suivants :

name

Le nom de cette variante.

configuration

Un fichier de configuration pour cette variante.

Variable :%default-debootstrap-hooks

Cette variable contient les crochet pour configurer le réseau et le chargeur d’amorçage GRUB.

Variable :%default-debootstrap-extra-pkgs

Cette variable contient une liste de paquets requis pour un invité complètement virtualisé.

Type de données :debootstrap-configuration

Ce type de données crée des fichiers de configurations pour le fournisseur de système debootstrap.

hooks (par défaut : %default-debootstrap-hooks)

Lorsque la valeur n’est pas #f, cela doit être une G-expression qui spécifie un répertoire avec les scripts qui seront lancés à l’installation du système. Elle peut aussi être une liste de pairs de (nom, simili-fichier). Par exemple :

`((99-hello-world . ,(plain-file "#!/bin/sh\necho Hello, World")))

Cela va créer un répertoire avec un exécutable nommé 99-hello-world et le lancera à chaque fois que cette variante est installée. Si la valeur est #f, les crochets dans /etc/ganeti/instance-debootstrap/hooks seront utilisés, s’ils existent.

proxy (par défaut : #f)

Serveur mandataire HTTP facultatif à utiliser.

mirror (par défaut : #f)

Le miroir Debian. Habituellement quelque chose comme http://ftp.no.debian.org/debian. La valeur par défaut dépend de la distribution.

arch (par défaut : #f)

L’architecture pour dpkg. Indiquez armhf pour debootstrap pour une instnace ARMv7 sur un hôte AArch64. La valeur par défaut est l’architecture système actuelle.

suite (par défaut : "stable")

Lorsqu’il est indiqué, ce paramètre doit être une distribution Debian comme buster ou focal. Si la valeur est #f, la valeur par défaut du fournisseur de système est utilisée.

extra-pkgs (par défaut : %default-debootstrap-extra-pkgs)

Liste des paquets supplémentaires qui seront installés par dpkg en plus du système minimal.

components (par défaut : #f)

Lorsque la valeur est indiquée, doit être une liste de « composants » de répertoires Debian. Par exemple '("main" "contrib").

generate-cache? (par défaut : #t)

Indique s’il faut automatiquement mettre en cache l’archive debootstrap générée.

clean-cache (par défaut : 14)

Supprime le cache après ce nombre de jours. Utilisez #f pour ne jamais vider le cache.

partition-style (par défaut : 'msdos)

Le type de partition à créer. Lorsqu’il est indiqué, ce paramètre doit être 'msdos, 'none ou une chaine de caractères.

partition-alignment (par défaut : 2048)

Alignement des partitions en nombre de secteur.

Procédure :debootstrap-variant nom configuration

C’est une procédure auxiliaire qui crée un enregistrement ganeti-os-variant. Il prend deux paramètres . un nom et un objet debootstrap-configuration.

Procédure :debootstrap-os variants…

C’est une procédure auxiliaire qui crée un enregistrement ganeti-os. Elle prend une liste de variantes créé avec debootstrap-variant.

Procédure :guix-variant nom configuration

C’est une procédure auxiliaire qui crée un enregistrement ganeti-os-variant à utiliser avec le fournisseur de système Guix. Il prend un nom et une G-expression qui renvoie un objet simili-fichier (voir file-like objects) contenant une configuration Guix System.

Procédure :guix-os variants…

C’est une procédure auxiliaire qui crée un enregistrement ganeti-os. Elle prend une liste de variantes produites par guix-variant.

Variable :%default-debootstrap-variants

C’est une variable pratique pour que le fournisseur debootstrap fonctionne directement sans avoir à déclarer des variantes manuellement. Elle contient une seule variante debootrstap avec la configuration par défaut :

Variable :%default-guix-variants

C’est une variable pratique pour que le fournisseur Guix fonctionne directement sans configuration supplémentaire. Elle crée une machine virtuelle qui a un serveur SSH, une console série et autorise les clés SSH des hôtes Ganeti.

(list (guix-variant
       "default"
       (file-append ganeti-instance-guix
                    "/share/doc/ganeti-instance-guix/examples/dynamic.scm")))

Les utilisateur·rices peuvent implémenter la prise en charge des fournisseurs de systèmes inconnus de Guix en étendant les enregistrement ganeti-os et ganeti-os-variant comme il faut. Par exemple :

(ganeti-os
 (name "custom")
 (extension ".conf")
 (variants
  (list (ganeti-os-variant
         (name "toto")
         (configuration (plain-file "titi" "this is fine"))))))

Cela crée /etc/ganeti/instance-custom/variants/toto.conf qui pointe vers un fichier dans le dépôt qui contient this is fine. Cela crée aussi /etc/ganeti/instance-custom/variants/variants.list qui contient toto.

Évidemment cela ne fonctionnera pas avec tous les fournisseurs d’OS disponibles. Si vous trouvez que cette interface est trop limitée, contactez-nous sur guix-devel@gnu.org.

Le reste de cette section documente les divers services inclus par ganeti-service-type.

Variable :ganeti-noded-service-type

ganeti-noded est le démon responsable des fonctions spécifiques au nœud dans le système Ganeti. La valeur de ce service doit être un objet ganeti-noded-configuration.

Type de données :ganeti-noded-configuration

La configuration du service ganeti-noded.

ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

port (par défaut : 1811)

Port TCP sur lequel le démon de nœud écoute les requêtes réseaux.

address (par défaut : "0.0.0.0")

Adresse réseau sur laquelle le démon se lie. L’adresse par défaut signifie de se lier à toutes les adresse disponibles.

interface (par défaut : #f)

Si une valeur est indiquée, elle doit être une interface réseau spécifique (p. ex. eth0) à laquelle le démon se liera.

max-clients (par défaut : 20)

Cela indique une limite du nombre de connexions clientes simultanées que le démon pourra prendre en charge. Les connexions au delà de ce nombre sont acceptées, mais aucune réponse ne sera envoyée avant que suffisamment de connexions ne soient fermées.

ssl? (par défaut : #t)

Indique s’il faut utiliser SSL/TLS pour chiffrer les communications réseaux. Le certification est automatiquement intégré par la grappe et peut être modifié avec gnt-cluster renew-crypto.

ssl-key (par défaut : "/var/lib/ganeti/server.pem")

Cela peut être utilisé pour fournir une clé de chiffrement spécifique pour les communications TLS.

ssl-cert (par défaut : "/var/lib/ganeti/server.pem")

Cela peut être utilisé pour fournir un certification spécifique pour les communications TLS.

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue plus de journalisation pour le débogage. Remarque que cela laissera fuiter des détails de chiffrement dans les journaux, utilisez cette option avec prudence.

Variable :ganeti-confd-service-type

ganeti-confd répond aux requêtes liées à la configuration de la grappe Ganeti. Le but de ce démon est d’avoir une manière rapide et très disponible de demander les valeurs de configuration de la grappe. Il est automatiquement activé sur tous les candidats maitres. La valeur de ce service doit être un objet ganeti-confd-configuration.

Type de données :ganeti-confd-configuration

La configuration du service ganeti-confd.

ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

port (par défaut : 1814)

Le port UDP sur lequel écouter les requêtes réseaux.

address (par défaut : "0.0.0.0")

L’adresse réseau sur laquelle le démon se liera.

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue des actions de journalisation supplémentaires pour le débogage.

Variable :ganeti-wconfd-service-type

ganeti-wconfd est le démon qui fait autorité sur la configuration de la grappe et est la seule entité qui peut y accepter des changements. Tous les travaux qui ont besoin de modifier la configuration le feront en envoyant les requêtes appropriées à ce démon. Il ne tourne que sur le nœud maitre et sera automatiquement désactivé sur les autres nœuds.

La valeur de ce service est un objet ganeti-wconfd-configuration.

Type de données :ganeti-wconfd-configuration

La configuration du service ganeti-wconfd.

ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

no-voting? (par défaut : #f)

Le démon refusera de démarrer si la majorité des nœuds de la grappe ne sont pas d’accord pour dire qu’il est le nœud maitre. Indiquez #t pour le démarre même si le quorum n’a pas été atteint (dangereux, utilisez avec prudence).

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue des actions de journalisation supplémentaires pour le débogage.

Variable :ganeti-luxid-service-type

ganeti-luxid est un démon utilisé pour répondre aux requêtes liées à la configuration et à l’état actuel d’une grappe Ganeti. En plus, c’est le démon qui fait autorité pour la queue de travaux de Ganeti. les travaux peuvent être soumis via ce démon et il les programme et les démarre.

Il prend un objet ganeti-luxid-configuration.

Type de données :ganeti-luxid-configuration

La configuration du service ganeti-rapi.

ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

no-voting? (par défaut : #f)

Le démon refusera de démarrer s’il ne peut pas vérifier que la majorité des nœuds de la grappe pensent qu’il est le nœud maitre. Indiquez #t pour le démarre malgré tout (cela peut être dangereux).

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue des actions de journalisation supplémentaires pour le débogage.

Variable :ganeti-rapi-service-type

ganeti-rapi fournit une API à distance pour les grappes Ganeti. Il est lancé sur le maitre et peut être utilisé pour effectuer des actions programmées sur la grappe via un protocole de RPC basé sur JSON.

La plupart des opérations de requêtes sont permises sans authentification (à moins que require-authentification? ne soit indiqué), alors que les opérations en écriture requièrent une autorisation explicite via le fichier /var/lib/ganeti/rapi/users. Voir la documentation de l’API distante de Ganeti pour plus d’informations.

La valeur de ce service doit être un objet geneti-rapi-configuration.

Type de données :ganeti-rapi-configuration

La configuration du service ganeti-rapi.

ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

require-authentication? (par défaut : #f)

Indique s’il faut demander une authentification même pour les opérations en lecture-seule.

port (par défaut : 5080)

Le port TCP sur lequel écouter les requêtes de l’API.

address (par défaut : "0.0.0.0")

L’adresse réseau sur laquelle le service de liera. Par défaut il écoute sur toutes les adresses.

interface (par défaut : #f)

Si une valeur est indiquée, elle doit spécifier une interface réseau spécifique comme eth0 sur laquelle le démon se liera.

max-clients (par défaut : 20)

Le nombre maximum de requêtes clientes simultanées à prendre en charge. Les connexions supplémentaires sont permises, mais aucune réponse ne sera envoyée tant qu’il n’y aura pas assez de connexions fermées.

ssl? (par défaut : #t)

Indique s’il faut utiliser le chiffrement SSL/TLS sur le port RAPI.

ssl-key (par défaut : "/var/lib/ganeti/server.pem")

Cela peut être utilisé pour fournir une clé de chiffrement spécifique pour les communications TLS.

ssl-cert (par défaut : "/var/lib/ganeti/server.pem")

Cela peut être utilisé pour fournir un certification spécifique pour les communications TLS.

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue plus de journalisation pour le débogage. Remarque que cela laissera fuiter des détails de chiffrement dans les journaux, utilisez cette option avec prudence.

Variable :ganeti-kvmd-service-type

ganeti-kvmd doit déterminer si une instance KVM donnée a été éteinte par un administrateur ou un utilisateur. Normalement Ganeti redémarre une instance qui a été arrêtée par Ganeti lui-même. Si l’option de grappe user_shutdown est vraie, ce démon vérifie la socket QMP fournie par QEMU et écoute les évènements d’extinction, et marque l’instance USER down au lieu de ERROR down lorsqu’elle s’éteint correctement par elle-même.

Il prend un objet ganeti-kvmd-configuration.

Type de données :ganeti-kvmd-configuration
ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue des actions de journalisation supplémentaires pour le débogage.

Variable :ganeti-mond-service-type

ganeti-mond est un démon facultatif qui propose des fonctionnalités de surveillance de Ganeti. Il est responsable des collecteurs de données et de la publication des informations récupérées sur une interface HTTP.

Il prend un objet ganeti-mond-configuration.

Type de données :ganeti-mond-configuration
ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

port (par défaut : 1815)

Le port sur lequel le démon écoutera.

address (par défaut : "0.0.0.0")

L’adresse réseau sur laquelle le démon se liera. Par défaut, il se lie à toutes les interfaces disponibles.

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue des actions de journalisation supplémentaires pour le débogage.

Variable :ganeti-metad-service-type

ganeti-metad est un démon facultatif qui peut être utilisé pour fournir des informations sur la grappe aux instance ou aux scripts d’installation de systèmes.

Il prend un objet ganeti-metad-configuration.

Type de données :ganeti-metad-configuration
ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

port (par défaut : 80)

Le port sur lequel le démon écoutera.

address (par défaut : #f)

Si la valeur est indiquée, le démon se liera à cette adresse uniquement. Si la valeur n’est pas indiquée, le comportement dépend de la configuration de la grappe.

debug? (par défaut : #f)

Lorsque la valeur est vraie, le démon effectue des actions de journalisation supplémentaires pour le débogage.

Variable :ganeti-watcher-service-type

ganeti-watcher est un script conçu pour se lancer périodiquement et s’assurer de la santé de la grappe. Il redémarrera automatiquement les instances qui sont arrêtées sans le consentement de Ganeti, et réparera les liens DRBD au cas où un nœud a redémarré. Il archive aussi les anciennes tâche de la grappe et redémarre les démons Ganeti qui ne sont pas lancés. Si le paramètres de grappe ensure_node_health est indiqué, le gardien éteindra aussi les instances et les périphériques DRBD si le nœud sur lequel il est lancé est déclaré hors-ligne par un candidat maitre.

Il peut être mis en pause sur tous les nœuds avec gnt-cluster watcher-pause.

Le service prend un objet ganeti-watcher-configuration.

Type de données :ganeti-watcher-configuration
ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour ce service.

schedule (par défaut : '(next-second-from (next-minute (range 0 60 5))))

Indique quand lancer le script. Par défaut, toutes les cinq minutes.

rapi-ip (par défaut : #f)

Cette option doit être spécifiée seulement si le démon RAPI est configuré pour utiliser une interface ou une adresse particulière. Par défaut l’adresse de grappe est utilisée.

job-age (par défaut : (* 6 3600))

Archive les tâches de grappe plus vieilles que cela, en secondes. Par défaut c’est 6 heure. Cela permet de garder un gnt-job list gérable.

verify-disks? (par défaut : #t)

Si la valeur est #f, le gardien n’essaiera pas de réparer les liens DRBD cassés automatiquement. Les administrateur·rices devront utiliser gnt-cluster verify-disks manuellement à la place.

debug? (par défaut : #f)

Lorsque la valeur est #t, le script effectue des actions de journalisation supplémentaires pour le débogage.

Variable :ganeti-cleaner-service-type

ganeti-cleaner est un script conçu pour être lancé périodiquement et supprimer les anciens fichiers de la grappe. Ce type de service contrôle deux tâches cron : l’une est conçue pour le nœud maitre et purge de manière permanente les ancienne tâches de la grappe, et l’autre est conçue pour tous les nœuds et supprime les certificats X509, les clés et les informations ganeti-watcher périmées. Comme tous les services Ganeti, on peut l’ajouter même sur les nœuds non-maitres car il se désactive tout seul en cas de besoin.

Il prend un objet ganeti-cleaner-configuration.

Type de données :ganeti-cleaner-configuration
ganeti (par défaut : ganeti)

Le paquet ganeti à utiliser pour la commande gnt-cleaner.

master-schedule (par défaut : "45 1 * * *")

La périodicité à laquelle lancer la tâche de nettoyage maitre. Par défaut c’est une fois par jour, à 01:45:00.

node-schedule (par défaut : "45 2 * * *")

La périodicité à laquelle lancer la tâche de nettoyage des nœuds. Par défaut une fois par jour, à 02:45:00.


Notes de bas de page

(38)

The most widespread example of time traps is test suites that involve checking the expiration date of a certificate. Such tests exists in TLS implementations such as OpenSSL and GnuTLS, but also in high-level software such as Python.


Suivant: Services de contrôle de version, Précédent: Services audio, Monter: Services   [Table des matières][Index]