Suivant: Services de contrôle de version, Précédent: Services audio, Monter: Services [Table des matières][Index]
Le module (gnu services virtualization)
fournit des services pour les
démons libvirt et virtlog, ainsi que d’autres services liés à la
virtualisation.
libvirtd
est le démon côté serveur du système de gestion de
virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
les tâches de gestion requises pour les clients virtualisés.
C’est le type du démon libvirt. Sa valeur doit
être un libvirt-configuration
.
(service libvirt-service-type
(libvirt-configuration
(unix-sock-group "libvirt")
(tls-port "16555")))
Les champs de libvirt-configuration
disponibles sont :
libvirt-configuration
:package libvirt ¶Paquet libvirt.
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’.
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’.
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"’.
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"’.
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"’.
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’.
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>"’.
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.
La valeur par défaut est ‘"root"’.
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"’.
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"’.
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"’.
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"’.
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"’.
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"’.
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"’.
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"’.
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 ‘()’.
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 ‘""’.
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 ‘""’.
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 ‘""’.
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 ‘""’.
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’.
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’.
libvirt-configuration
:optional-list tls-allowed-dn-list ¶Liste blanche des Distinguished Name x509 autorisés.
La valeur par défaut est ‘()’.
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 ‘()’.
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"’.
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’.
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’.
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’.
libvirt-configuration
:integer min-workers ¶Nombre de processus de travail démarrés initialement.
La valeur par défaut est ‘5’.
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’.
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’.
libvirt-configuration
:integer max-requests ¶Limite globale totale sur les appels RPC concurrents.
La valeur par défaut est ‘20’.
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’.
libvirt-configuration
:integer admin-min-workers ¶Comme min-workers
mais pour l’interface d’administration.
La valeur par défaut est ‘1’.
libvirt-configuration
:integer admin-max-workers ¶Comme max-workers
mais pour l’interface d’administration.
La valeur par défaut est ‘5’.
libvirt-configuration
:integer admin-max-clients ¶Comme max-clients
mais pour l’interface d’administration.
La valeur par défaut est ‘5’.
libvirt-configuration
:integer admin-max-queued-clients ¶Comme max-queued-clients
mais pour l’interface d’administration.
La valeur par défaut est ‘5’.
libvirt-configuration
:integer admin-max-client-requests ¶Comme max-client-requests
mais pour l’interface d’administration.
La valeur par défaut est ‘5’.
libvirt-configuration
:integer log-level ¶Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information, 1 : débogage.
La valeur par défaut est ‘3’.
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 :
où 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 :
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"’.
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
Plusieurs sorties peuvent être définies, elles doivent juste être séparées par des espaces.
La valeur par défaut est ‘"3:stderr"’.
libvirt-configuration
:integer audit-level ¶Permet de modifier l’utilisation du sous-système d’audit
La valeur par défaut est ‘1’.
libvirt-configuration
:boolean audit-logging ¶Envoie les messages d’audit via l’infrastructure de journalisation de libvirt.
La valeur par défaut est ‘#f’.
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 ‘""’.
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"’.
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’.
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’.
libvirt-configuration
:integer admin-keepalive-interval ¶Comme précédemment, mais pour l’interface d’administration.
La valeur par défaut est ‘5’.
libvirt-configuration
:integer admin-keepalive-count ¶Comme précédemment, mais pour l’interface d’administration.
La valeur par défaut est ‘5’.
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’.
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.
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)))
libvirt
package libvirt ¶Paquet libvirt.
virtlog-configuration
:integer log-level ¶Niveau de journalisation. 4 : erreurs, 3 : avertissements, 2 : information, 1 : débogage.
La valeur par défaut est ‘3’.
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 :
où 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 :
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"’.
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
Plusieurs sorties peuvent être définies, elles doivent juste être séparées par des espaces.
La valeur par défaut est ‘"3:stderr"’.
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’.
virtlog-configuration
:integer max-size ¶Taille de fichier maximale avant roulement.
La valeur par défaut est ‘2MB’
virtlog-configuration
:integer max-backups ¶Nombre maximal de fichiers de sauvegardes à garder.
La valeur par défaut est ‘3’
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.
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 :
(service qemu-binfmt-service-type
(qemu-binfmt-configuration
(platforms (lookup-qemu-platforms "arm" "aarch64"))))
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).
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 :
(service qemu-binfmt-service-type
(qemu-binfmt-configuration
(platforms (lookup-qemu-platforms "arm"))))
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.
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.
Renvoie vrai s iobj est un objet de plate-forme.
Renvoie le nom de platform — une chaîne comme "arm"
.
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.
Type de service pour l’agent invité de QEMU.
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.
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
La configuration par défaut (voir hurd-vm-configuration
ci-dessous)
crée un serveur secure shell (SSH) dans votre système GNU/Hurd, que QEMU
(l’émulateur de machine virtuelle) redirige sur le port 10222 de l’hôte.
Ainsi, vous pouvez vous connecter en SSH au childhurd avec :
ssh root@localhost -p 10022
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.
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 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)La procédure utilisée pour construire l’image disque construite à partir de cette configuration.
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))
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/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
Ces fichiers sont automatiquement envoyés à la VM Hurd invitée au démarrage, avec les permissions.
Avec ces fichiers en place, il ne manque plus grand chose pour pouvoir
permettre à l’hôte de décharger les constructions i586-gnu
au
childhurd :
guix archive --authorize < \ /etc/childhurd/etc/guix/signing-key.pub
Nous travaillons à rendre cela automatique — contactez nous sur guix-devel@gnu.org pour en discuter !
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 '())))
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-file
)
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") (hosts-file (plain-file "hosts" (format #f " 127.0.0.1 localhost ::1 localhost 192.168.1.200 ganeti.example.com 192.168.1.201 node1.example.com node1 192.168.1.202 node2.example.com node2 "))) ;; 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))) (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.
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.
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.
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 :
(service ganeti-noded-service-type) (service ganeti-confd-service-type) (service ganeti-wconfd-service-type) (service ganeti-luxid-service-type) (service ganeti-kvmd-service-type) (service ganeti-mond-service-type) (service ganeti-metad-service-type) (service ganeti-watcher-service-type) (service ganeti-cleaner-service-type)
Plus une extension de service pour etc-service-type
qui configure le
moteur de stockage de fichiers et les variantes de systèmes.
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 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.
Cette variable contient les crochet pour configurer le réseau et le chargeur d’amorçage GRUB.
Cette variable contient une liste de paquets requis pour un invité complètement virtualisé.
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.
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
.
C’est une procédure auxiliaire qui crée un enregistrement ganeti-os
.
Elle prend une liste de variantes créé avec debootstrap-variant
.
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.
C’est une procédure auxiliaire qui crée un enregistrement ganeti-os
.
Elle prend une liste de variantes produites par guix-variant
.
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 :
(list (debootstrap-variant
"default"
(debootstrap-configuration)))
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
.
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
.
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.
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
.
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.
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
.
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.
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
.
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.
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
.
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.
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
.
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.
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
.
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.
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
.
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.
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
.
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.
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
.
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.
Suivant: Services de contrôle de version, Précédent: Services audio, Monter: Services [Table des matières][Index]