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


8.14 Invoquer guix system

Une fois que vous avez écrit une déclaration de système d’exploitation comme nous l’avons vu dans les sections précédentes, elle peut être instanciée avec la commande guix system. Voici le résumé de la commande :

guix system optionsaction file

file doit être le nom d’un fichier contenant une déclaration operating-system. action spécifie comme le système d’exploitation est instancié. Actuellement les valeurs suivantes sont supportées :

search

Affiche les définitions des types de services disponibles qui correspondent aux expressions régulières données, triées par pertinence :

$ guix system search console font
name: console-fonts
location: gnu/services/base.scm:773:2
extends: shepherd-root
description: Installe des polices données sur les ttys spécifiés (les polices sont par console virtuelle sous GNU/Linux).  la valeur de ces service est une liste de paires
+ de tty/police comme ceci :
+ 
+      '(("tty1" . "LatGrkCyr-8x16"))
relevance: 16

name: mingetty
location: gnu/services/base.scm:1144:2
extends: shepherd-root
description: Fournit la connexion en console avec le programme `mingetty'.
relevance: 4

name: login
location: gnu/services/base.scm:819:2
extends: pam
description: Fournit un service de connexion en console tel que spécifié par sa valeur de configuration, un objet `login-configuration'.
relevance: 4

…

Comme pour guix package --search, le résultat est écrit au format recutils, ce qui rend facile le filtrage de la sortie (voir GNU recutils databases dans GNU recutils manual).

reconfigure

Construit le système d’exploitation décrit dans file, l’active et passe dessus32.

Cela met en application toute la configuration spécifiée dans file : les comptes utilisateurs, les services du système, la liste globale des paquets, les programmes setuid, etc. La commande démarre les services systèmes spécifiés dans file qui ne sont pas actuellement lancés ; si un service est actuellement exécuté cette commande s’arrange pour qu’il soit mis à jour la prochaine fois qu’il est stoppé (p. ex par herd stop X ou herd restart X).

Cette commande crée une nouvelle génération dont le numéro est un de plus que la génération actuelle (rapportée par guix system list-generations). Si cette génération existe déjà, elle sera réécrite. Ce comportement correspond à celui de guix package (voir Invoquer guix package).

Elle ajoute aussi une entrée de menu du chargeur d’amorçage pour la nouvelle configuration, à moins que --no-bootloader ne soit passé. Pour GRUB, elle déplace les entrées pour les anciennes configurations dans un sous-menu, ce qui vous permet de choisir une ancienne génération au démarrage si vous en avez besoin.

Remarque : Il est grandement recommandé de lancer guix pull une fois avant de lancer guix system reconfigure pour la première fois (voir Invoquer guix pull). Sans cela, vous verriez une version plus ancienne de Guix une fois reconfigure terminé.

switch-generation

Passe à une génération existante du système. Cette action change automatiquement le profil système vers la génération spécifiée. Elle réarrange aussi les entrées existantes du menu du chargeur d’amorçage du système. Elle fait de l’entrée du menu pour la génération spécifiée l’entrée par défaut et déplace les entrées pour les autres générations dans un sous-menu, si cela est supporté par le chargeur d’amorçage utilisé. Lors du prochain démarrage du système, la génération du système spécifiée sera utilisée.

Le chargeur d’amorçage lui-même n’est pas réinstallé avec cette commande. Ainsi, le chargeur d’amorçage est utilisé avec un fichier de configuration plus à jour.

La génération cible peut être spécifiée explicitement par son numéro de génération. Par exemple, l’invocation suivante passerait à la génération 7 du système :

guix system switch-generation 7

La génération cible peut aussi être spécifiée relativement à la génération actuelle avec la forme +N ou -N, où +3 signifie « trois générations après la génération actuelle » et -1 signifie « une génération précédent la génération actuelle ». Lorsque vous spécifiez un nombre négatif comme -1, il doit être précédé de -- pour éviter qu’il ne soit compris comme une option. Par exemple :

guix system switch-generation -- -1

Actuellement, l’effet de l’invocation de cette action est uniquement de passer au profil du système vers une autre génération existante et de réarranger le menu du chargeur d’amorçage. Pour vraiment commencer à utiliser la génération spécifiée, vous devez redémarrer après avoir lancé cette action. Dans le futur, elle sera corrigée pour faire la même chose que reconfigure, comme réactiver et désactiver les services.

Cette action échouera si la génération spécifiée n’existe pas.

roll-back

Passe à la génération précédente du système. Au prochain démarrage, la génération précédente sera utilisée. C’est le contraire de reconfigure, et c’est exactement comme invoquer switch-generation avec pour argument -1.

Actuellement, comme pour switch-generation, vous devez redémarrer après avoir lancé cette action pour vraiment démarrer sur la génération précédente du système.

delete-generations

Supprimer des générations du système, ce qui les rend disponibles pour le ramasse-miettes (voir Invoquer guix gc, pour des informations sur la manière de lancer le « ramasse-miettes »).

Cela fonctionne comme pour guix package --delete-generations (voir --delete-generations). Avec aucun argument, toutes les générations du système sauf la génération actuelle sont supprimées :

guix system delete-generations

Vous pouvez aussi choisir les générations que vous voulez supprimer. L’exemple plus bas supprime toutes les génération du système plus vieilles que deux mois :

guix system delete-generations 2m

Lancer cette commande réinstalle automatiquement le chargeur d’amorçage avec une liste à jour d’entrées de menu — p. ex. le sous-menu « anciennes générations » dans GRUB ne liste plus les générations qui ont été supprimées.

build

Construit la dérivation du système d’exploitation, ce qui comprend tous les fichiers de configuration et les programmes requis pour démarrer et lancer le système. Cette action n’installe rien.

init

Rempli le répertoire donné avec tous les fichiers nécessaires à lancer le système d’exploitation spécifié dans file. C’est utile pour la première installation de Guix System. Par exemple :

guix system init my-os-config.scm /mnt

copie tous les éléments du dépôt requis par la configuration spécifiée dans my-os-config.scm dans /mnt. Cela comprend les fichiers de configuration, les paquets, etc. Elle crée aussi d’autres fichiers essentiels requis pour que le système fonctionne correctement — p. ex. les répertoires /etc, /var et /run et le fichier /bin/sh.

Cette commande installe aussi le chargeur d’amorçage sur la cible spécifiée dans my-os-config, à moins que l’option --no-bootloader ne soit passée.

vm

Construit une machine virtuelle qui contient le système d’exploitation déclaré dans file et renvoie un script pour lancer cette machine virtuelle (VM).

Remarque : Les actions vm et les autres plus bas peuvent utiliser la prise en charge KVM du noyau Linux-libre. Plus spécifiquement, si la machine prend en charge la virtualisation matérielle, le module noyau KVM correspondant devrait être chargé, et le nœud de périphérique /dev/kvm devrait exister et être lisible et inscriptible pour l’utilisateur et pour les utilisateurs de construction du démon (voir Réglages de l'environnement de construction).

Les arguments passés au script sont passés à QEMU comme dans l’exemple ci-dessous, qui active le réseau et demande 1 Go de RAM pour la machine émulée :

$ /gnu/store/…-run-vm.sh -m 1024 -net user

La VM partage sont dépôt avec le système hôte.

Vous pouvez partager des fichiers supplémentaires entre l’hôte et la VM avec les options en ligne de commande --share et --expose : la première spécifie un répertoire à partager avec accès en écriture, tandis que le deuxième fournit un accès en lecture-seule au répertoire partagé.

L’exemple ci-dessous crée une VM dans laquelle le répertoire personnel de l’utilisateur est accessible en lecture-seule, et où le répertoire /exchange est une correspondance en lecture-écriture à $HOME/tmp sur l’hôte :

guix system vm my-config.scm \
   --expose=$HOME --share=$HOME/tmp=/exchange

Sur GNU/Linux, le comportement par défaut consiste à démarrer directement sur le noyau ; cela a l’avantage de n’avoir besoin que d’une toute petite image disque puisque le dépôt de l’hôte peut ensuite être monté.

L’option --full-boot force une séquence de démarrage complète, en commençant par le chargeur d’amorçage. Cela requiert plus d’espace disque puisqu’une image racine contenant au moins le noyau, l’initrd et les fichiers de données du chargeur d’amorçage doit être créé. On peut utiliser l’option --image-size pour spécifier la taille de l’image.

vm-image
disk-image
docker-image

Renvoie une machine virtuelle, une image disque ou une image Docker du système d’exploitation déclaré dans file qui se suffit à elle-même. Par défaut, guix system estime la taille de l’image requise pour stocker le système, mais vous pouvez utiliser l’option --image-size pour spécifier une valeur. Les images Docker sont construites pour contenir exactement ce dont elles ont besoin, donc l’option --image-size est ignorée dans le cas de docker-image.

Vous pouvez spécifier le type de système de fichiers racine avec l’option --file-system-type. La valeur par défaut est ext4.

Lorsque vous utilisez vm-image, l’image renvoyée est au format qcow2, que l’émulateur QEMU peut utiliser efficacement. Voir Lancer Guix dans une VM, pour plus d’informations sur la manière de lancer l’image dans une machine virtuelle.

Lorsque vous utilisez disk-image, une image disque brute est produite ; elle peut être copiée telle quelle sur un périphérique USB. En supposant que /dev/sdc est le périphérique correspondant à une clef USB, on peut copier l’image dessus avec la commande suivante :

# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc

En utilisant docker-image, on produit une image Docker. Guix construit l’image de zéro, et non à partir d’une image Docker de base pré-existante. En conséquence, elle contient exactly ce que vous avez défini dans le fichier de configuration du système. Vous pouvez ensuite charger l’image et lancer un conteneur Docker avec des commande comme :

image_id="`docker load < guix-system-docker-image.tar.gz`"
container_id="`docker create $image_id`"
docker start $container_id

Cette commande démarre un nouveau conteneur Docker à partir de l’image spécifiée. Il démarrera le système Guix de la manière habituelle, ce qui signifie qu’il démarrera tous les services que vous avez définis dans la configuration du système d’exploitation. Vous pouvez obtenir un shell interactif dans le conteneur en utilisant docker exec :

docker exec -ti $container_id /run/current-system/profile/bin/bash --login

En fonction de ce que vous lancez dans le conteneur Docker, il peut être nécessaire de donner des permissions supplémentaires au conteneur. Par exemple, si vous voulez construire des paquets avec Guix dans le conteneur Docker, vous devriez passer --privileged à docker create.

conteneur

Renvoie un script qui lance le système d’exploitation déclaré dans file dans un conteneur. Les conteneurs sont un ensemble de mécanismes d’isolation légers fournis par le noyau Linux-libre. Les conteneurs sont substantiellement moins gourmands en ressources que les machines virtuelles complètes car le noyau, les objets partagés et d’autres ressources peuvent être partagés avec le système hôte ; cela signifie aussi une isolation moins complète.

Actuellement, le script doit être lancé en root pour pouvoir supporter plus d’un utilisateur et d’un groupe. Le conteneur partage son dépôt avec le système hôte.

Comme avec l’action vm (voir guix system vm), des systèmes de fichiers supplémentaires peuvent être partagés entre l’hôte et le conteneur avec les options --share et --expose :

guix system container my-config.scm \
   --expose=$HOME --share=$HOME/tmp=/exchange

Remarque : Cette option requiert Linux-libre ou supérieur.

options peut contenir n’importe quelle option commune de construction (voir Options de construction communes). En plus, options peut contenir l’une de ces options :

--expression=expr
-e expr

Considère le système d’exploitation en lequel s’évalue expr. C’est une alternative à la spécification d’un fichier qui s’évalue en un système d’exploitation. C’est utilisé pour générer l’installateur du système Guix (voir Construire l'image d'installation).

--system=système
-s système

Essaye de construire pour system au lieu du type du système hôte. Cela fonction comme pour guix build (voir Invoquer guix build).

--derivation
-d

Renvoie le nom du fichier de dérivation du système d’exploitation donné sans rien construire.

--file-system-type=type
-t type

Pour l’action disk-image, crée un système de fichier du type donné sur l’image.

Lorsque cette option est omise, guix system utilise ext4.

--file-system-type=iso9660 produit une image ISO-9660, qu’il est possible de graver sur un CD ou un DVD.

--image-size=size

Pour les actions vm-image et disk-image, crée une image de la taille donnée size. size peut être un nombre d’octets ou contenir un suffixe d’unité (voir size specifications dans GNU Coreutils).

Lorsque cette option est omise, guix system calcule une estimation de la taille de l’image en fonction de la taille du système déclaré dans file.

--network
-N

Pour l’action container, permet aux conteneurs d’accéder au réseau de l’hôte, c’est-à-dire, ne crée pas pas d’espace de nom réseau.

--root=fichier
-r fichier

Fait de fichier un lien symbolique vers le résultat, et l’enregistre en tant que racine du ramasse-miettes.

--skip-checks

Passe les vérifications de sécurité avant l’installation.

Par défaut, guix system init et guix system reconfigure effectuent des vérifications de sécurité : ils s’assurent que les systèmes de fichiers qui apparaissent dans la déclaration operating-system existent vraiment (voir Systèmes de fichiers) et que les modules de noyau Linux qui peuvent être requis au démarrage sont listés dans initrd-modules (voir Disque de RAM initial). Passer cette option saute ces vérifications complètement.

--on-error=strategy

Applique strategy lorsqu’une erreur arrive lors de la lecture de file. strategy peut être l’une des valeurs suivantes :

nothing-special

Rapporte l’erreur de manière concise et quitte. C’est la stratégie par défaut.

backtrace

Pareil, mais affiche aussi une trace de débogage.

debug

Rapporte l’erreur et entre dans le débogueur Guile. À partir de là, vous pouvez lancer des commandes comme ,bt pour obtenir une trace de débogage, ,locals pour afficher les valeurs des variables locales et plus généralement inspecter l’état du programme. Voir Debug Commands dans GNU Guile Reference Manual, pour une liste de commandes de débogage disponibles.

Une fois que vous avez construit, re-configuré et re-re-configuré votre installation Guix, vous pourriez trouver utile de lister les générations du système disponibles sur le disque — et que vous pouvez choisir dans le menu du chargeur d’amorçage :

list-generations

Affiche un résumé de chaque génération du système d’exploitation disponible sur le disque, dans un format lisible pour un humain. C’est similaire à l’option --list-generations de guix package (voir Invoquer guix package).

Éventuellement, on peut spécifier un motif, avec la même syntaxe utilisée pour guix package --list-generations, pour restreindre la liste des générations affichées. Par exemple, la commande suivante affiche les générations de moins de 10 jours :

$ guix system list-generations 10d

La commande guix system a même plus à proposer ! Les sous-commandes suivantes vous permettent de visualiser comme vos services systèmes sont liés les uns aux autres :

extension-graph

Affiche le graphe d’extension des services du système d’exploitation défini dans file au format Dot/Graphviz sur la sortie standard (voir Composition de services, pour plus d’informations sur l’extension des services).

La commande :

$ guix system extension-graph file | dot -Tpdf > services.pdf

produit un fichier PDF montrant les relations d’extension entre les services.

shepherd-graph

Affiche le graphe de dépendance des services shepherd du système d’exploitation défini dans file au format Dot/Graphviz sur la sortie standard. Voir Services Shepherd, pour plus d’informations et un exemple de graphe.


Notes de bas de page

(32)

Cette action (et les action liées que sont switch-generation et roll-back) ne sont utilisables que sur les systèmes sous Guix System.


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