Précédent: , Monter: Gestion de paquets   [Table des matières][Index]


4.11 Invoquer guix archive

La commande guix archive permet aux utilisateurs d’exporter des fichiers du dépôt dans une simple archive puis ensuite de les importer sur une machine qui fait tourner Guix. En particulier, elle permet de transférer des fichiers du dépôt d’une machine vers le dépôt d’une autre machine.

Remarque : Si vous chercher une manière de produire des archives dans un format adapté pour des outils autres que Guix, voir Invoquer guix pack.

Pour exporter des fichiers du dépôt comme une archive sur la sortie standard, lancez :

guix archive --export options spécifications...

spécifications peut être soit des noms de fichiers soit des spécifications de paquets, comme pour guix package (voir Invoquer guix package). Par exemple, la commande suivante crée une archive contenant la sortie gui du paquet git et la sortie principale de emacs :

guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar

Si les paquets spécifiés ne sont pas déjà construits, guix archive les construit automatiquement. Le processus de construction peut être contrôlé avec les options de construction communes (voir Options de construction communes).

Pour transférer le paquet emacs vers une machine connectée en SSH, on pourrait lancer :

guix archive --export -r emacs | ssh la-machine guix archive --import

De même, on peut transférer un profil utilisateur complet d’une machine à une autre comme cela :

guix archive --export -r $(readlink -f ~/.guix-profile) | \
  ssh the-machine guix archive --import

Cependant, remarquez que, dans les deux exemples, le paquet emacs, le profil ainsi que toutes leurs dépendances sont transférés (à cause de -r), indépendamment du fait qu’ils soient ou non disponibles dans le dépôt de la machine cible. L’option --missing peut vous aider à comprendre les éléments qui manquent dans le dépôt de la machine cible. La commande guix copy simplifie et optimise ce processus, c’est donc ce que vous devriez utiliser dans ce cas (voir Invoquer guix copy).

Les archives sont stockées au format « archive normalisé » ou « nar », qui est comparable dans l’esprit à « tar » mais avec des différences qui le rendent utilisable pour ce qu’on veut faire. Tout d’abord, au lieu de stocker toutes les métadonnées Unix de chaque fichier, le format nar ne mentionne que le type de fichier (normal, répertoire ou lien symbolique) ; les permissions Unix, le groupe et l’utilisateur ne sont pas mentionnés. Ensuite, l’ordre dans lequel les entrées de répertoires sont stockés suit toujours l’ordre des noms de fichier dans l’environnement linguistique C. Cela rend la production des archives entièrement déterministe.

Lors de l’export, le démon signe numériquement le contenu de l’archive et cette signature est ajoutée à la fin du fichier. Lors de l’import, le démon vérifie la signature et rejette l’import en cas de signature invalide ou si la clef de signature n’est pas autorisée.

Les principales options sont :

--export

Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire l’archive résultante sur la sortie standard.

Les dépendances ne sont pas incluses dans la sortie à moins que --recursive ne soit passé.

-r
--recursive

En combinaison avec --export, cette option demande à guix archive d’inclure les dépendances des éléments donnés dans l’archive. Ainsi, l’archive résultante est autonome : elle contient la closure des éléments du dépôt exportés.

--import

Lire une archive depuis l’entrée standard et importer les fichiers inclus dans le dépôt. Annuler si l’archive a une signature invalide ou si elle est signée par une clef publique qui ne se trouve pas dans le clefs autorisées (voir --authorize plus bas.)

--missing

Liste une liste de noms de fichiers du dépôt sur l’entrée standard, un par ligne, et écrit sur l’entrée standard le sous-ensemble de ces fichiers qui manquent dans le dépôt.

--generate-key[=paramètres]

Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis avant que les archives ne puissent être exportées avec --export. Remarquez que cette opération prend généralement du temps parce qu’elle doit récupère suffisamment d’entropie pour générer la paire de clefs.

La paire de clefs générée est typiquement stockée dans /etc/guix, dans signing-key.pub (clef publique) et signing-key.sec (clef privée, qui doit rester secrète). Lorsque paramètres est omis, une clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement, paramètres peut spécifier les paramètres genkey adaptés pour libgcrypt (voir gcry_pk_genkey dans The Libgcrypt Reference Manual).

--authorize

Autoriser les imports signés par la clef publique passée sur l’entrée standard. La clef publique doit être au « format avancé s-expression » — c.-à-d. le même format que le fichier signing-key.pub.

La liste des clefs autorisées est gardée dans un fichier modifiable par des humains dans /etc/guix/acl. Le fichier contient des « s-expressions au format avancé » et est structuré comme une liste de contrôle d’accès dans l’infrastructure à clefs publiques simple (SPKI).

--extract=répertoire
-x répertoire

Lit une archive à un seul élément telle que servie par un serveur de substituts (voir Substituts) et l’extrait dans répertoire. C’est une opération de bas niveau requise seulement dans de rares cas d’usage ; voir plus loin.

Par exemple, la commande suivante extrait le substitut pour Emacs servi par ci.guix.gnu.org dans /tmp/emacs :

$ wget -O - \
  https://ci.guix.gnu.org/nar/…-emacs-24.5 \
  | bunzip2 | guix archive -x /tmp/emacs

Les archives à un seul élément sont différentes des archives à plusieurs éléments produites par guix archive --export ; elles contiennent un seul élément du dépôt et elles n’embarquent pas de signature. Ainsi cette opération ne vérifie pas de signature et sa sortie devrait être considérée comme non sûre.

Le but principal de cette opération est de faciliter l’inspection du contenu des archives venant de serveurs auxquels on ne fait potentiellement pas confiance.

--list
-t

Read a single-item archive as served by substitute servers (voir Substituts) and print the list of files it contains, as in this example:

$ wget -O - \
  https://ci.guix.gnu.org/nar/lzip/…-emacs-26.3 \
  | lzip -d | guix archive -t

Précédent: , Monter: Gestion de paquets   [Table des matières][Index]