Suivant: Lancer Guix dans une VM, Précédent: Invoquer guix system, Monter: Configuration du système [Table des matières][Index]
guix deploy
Nous avons déjà vu les déclarations de operating-system
utilisées
pour gérer la configuration d’une machine localement. Supposez que vous
ayez besoin de configurer plusieurs machines — peut-être que vous gérez un
service web comprenant plusieurs serveurs. guix deploy
vous
permet d’utiliser les mêmes déclarations de systèmes d’exploitation pour
gérer plusieurs hôtes distants en même temps dans le même « déploiement »
logique.
Remarque : La fonctionnalité décrite dans cette section est toujours en cours de développement et est sujette à changement. Contactez-nous sur guix-devel@gnu.org !
guix deploy fichier
Une telle invocation déploiera les machines en lesquelles le code de fichier s’évalue. Par exemple, fichier peut contenir une définition comme celle-ci :
;; Ceci est le déploiement Guix d'un système « minimal » sans ;; serveur d'affichage X11, vers une machine dont le démon SSH ;; écoute sur localhost:2222. Une configuration comme celle-ci ;; est appropriée pour les machines virtuelles dont les ports sont relayés ;; vers l'interface de bouclage de l'hôte. (use-service-modules networking ssh) (use-package-modules bootloaders) (define %system (operating-system (host-name "gnu-deployed") (timezone "Etc/UTC") (bootloader (bootloader-configuration (bootloader grub-bootloader) (target '("/dev/vda")) (terminal-outputs '(console)))) (file-systems (cons (file-system (mount-point "/") (device "/dev/vda1") (type "ext4")) %base-file-systems)) (services (append (list (service dhcp-client-service-type) (service openssh-service-type (openssh-configuration (permit-root-login #t) (allow-empty-passwords? #t)))) %base-services)))) (list (machine (operating-system %system) (environment managed-host-environment-type) (configuration (machine-ssh-configuration (host-name "localhost") (system "x86_64-linux") (user "alice") (identity "./id_rsa") (port 2222)))))
Le fichier devrait s’évaluer en une liste d’objets machine. Cet
exemple, lors du déploiement, créera une nouvelle génération sur le système
distant en réalisant la déclaration operating-system
%system
.
environment
et configuration
spécifient comme la machine
devrait être provisionnée — c.-à-d. comment les ressources sont créées
et gérées. L’exemple ci-dessus ne crée aucune ressource, car un
'managed-host
est une machine qui fait déjà tourner le système Guix
et est disponible sur le réseau. Cela est un cas particulièrement simple ;
un déploiement plus complexe pourrait impliquer, par exemple, le démarrage
de machines virtuels chez un fournisseur de serveurs privés virtuels (VPS).
Dans ce cas, une type d’environnement différent devrait être utilisé.
Prenez note que vous devez d’abord générer une paire de clés sur la machine coordinatrice pour permettre au démon d’exporter les archives signées des fichiers du dépôt (voir Invoquer guix archive), bien que cette étape soit automatique sur Guix System :
# guix archive --generate-key
Chaque machine cible doit autoriser la clé de la machine maître afin qu’elle accepte les objets de stockage qu’elle reçoit du coordinateur :
# guix archive --authorize < coordinator-public-key.txt
user
, dans cet exemple, spécifie le nom du compte utilisateur à
utiliser pour se connecter lors du déploiement. Sa valeur par défaut est
root
, mais la connexion SSH en root peut être interdite dans certains
cas. Pour contourner cela, guix deploy
peut se connecter en tant
qu’utilisateur non-privilégié et utiliser sudo
pour récupérer les
privilèges. Cela ne fonctionnera que si sudo
est actuellement
installé sur la machine distante et peut être invoqué de manière non
interactive par user
. C’est-à-dire que la ligne sudoers
permettant à user
d’utiliser sudo
doit contenir l’attribut
NOPASSWD
. Cela peut se faire avec le bout de configuration du
système d’exploitation suivant :
(use-modules ... (gnu system)) ;pour %sudoers-specification (define %user "username") (operating-system ... (sudoers-file (plain-file "sudoers" (string-append (plain-file-content %sudoers-specification) (format #f "~a ALL = NOPASSWD: ALL~%" %user)))))
Pour plus d’informations sur le format du fichier sudoers, consultez
man sudoers
.
Once you’ve deployed a system on a set of machines, you may find it useful
to run a command on all of them. The --execute or -x
option lets you do that; the example below runs uname -a
on all
the machines listed in the deployment file:
guix deploy file -x -- uname -a
One thing you may often need to do after deployment is restart specific services on all the machines, which you can do like so:
guix deploy file -x -- herd restart service
The guix deploy -x
command returns zero if and only if the command
succeeded on all the machines.
Below are the data types you need to know about when writing a deployment file.
C’est le type de données représentant une seule machine dans un déploiement Guix hétérogène.
operating-system
L’objet de la configuration du système d’exploitation à déployer.
environment
Un environment-type
décrit comment la machine est provisionnée.
configuration
(par défaut : #f
)Un objet décrivant la configuration de l’environnement de la machine. Si
l’objet environment
a une configuration par défaut, vous pouvez
utiliser #f
. Si vous utilisez #f
mais que l’environnement n’a
pas de configuration par défaut, une erreur sera renvoyée.
C’est le type de données représentant les paramètres du client SSH pour une
machine qui a pour environment
managed-host-environment-type
.
host-name
build-locally?
(par défaut : #t
)Si la valeur est fausse, les dérivations du système seront construites sur la machine qui est déployée.
system
Le type de système décrivant l’architecture de la machine déployée
pour—par exemple, "x86_64-linux"
.
authorize?
(par défaut : #t
)Si la valeur est vraie, la clé de signature du coordinateur sera ajoutée au porteclé des ACL de la machine distante.
port
(par défaut : 22
)user
(par défaut : "root"
)identity
(par défaut : #f
)Si spécifié, le chemin d’accès à la clé privée SSH à utiliser pour s’authentifier auprès de l’hôte distant.
host-key
(par défaut : #f
)Cela devrait être la clé de l’hôte SSH de la machine, qui ressemble à cela :
ssh-ed25519 AAAAC3Nz… root@example.org
Quand host-key
est #f
, le serveur est authentifié avec le
fichier ~/.ssh/known_hosts, exactement comme le ferait le client
ssh
OpenSSH.
allow-downgrades?
(par défaut : #f
)Autoriser ou non d’éventuels déclassements.
Comme guix sysetm reconfigure
, guix deploy
compare les
commits du canal actuellement déployé sur l’hôte distant (renvoyé par
guix system describe
) à ceux utilisés (renvoyés par guix
describe
) pour déterminer si les commits actuellement utilisés descendent
de ceux déployés. Lorsque ce n’est pas le cas et que
allow-downgrades?
est faux, cela lève une erreur. Cela permet de
s’assurer que vous ne déployez pas accidentellement une version plus
ancienne version les machines distantes.
safety-checks?
(default: #t
)Whether to perform “safety checks” before deployment. This includes
verifying that devices and file systems referred to in the operating system
configuration actually exist on the target machine, and making sure that
Linux modules required to access storage devices at boot time are listed in
the initrd-modules
field of the operating system.
These safety checks ensure that you do not inadvertently deploy a system that would fail to boot. Be careful before turning them off!
C’est le type de données décrivant le Droplet qui devrait être créé pour une
machine avec un environment
valant
digital-ocean-environment-type
.
ssh-key
Le chemin vers la clé SSH privée à utiliser pour s’authentifier avec l’hôte distant. Dans le futur, le champ pourrait ne plus exister.
tags
Une liste « d’attributs » qui identifient la machine de manière unique. Il faut faire attention à ce que deux machine du déploiement n’aient pas le même ensemble d’attributs.
region
Le nom d’une région de Digital Ocean, comme "nyc3"
.
taille
Le nom d’une taille de Digital Ocean, comme "s-1vcpu-1gb"
enable-ipv6?
Indique s’il faut créer une IPv6 pour le droplet.
Suivant: Lancer Guix dans une VM, Précédent: Invoquer guix system, Monter: Configuration du système [Table des matières][Index]