Suivant: Substituts, Précédent: Fonctionnalités, Monter: Gestion de paquets [Table des matières][Index]
guix package
La commande guix package
est l’outil qui permet d’installer,
mettre à jour et supprimer les paquets ainsi que de revenir à une
configuration précédente. Ces opérations fonctionnent sur un profil
utilisateur—un répertoire avec les paquets installés. Chaque utilisateur
a un profile par défaut dans $HOME/.guix-profile. La commande
n’opère que dans le profil de l’utilisateur·rice et fonctionne avec les
privilèges normaux (voir Fonctionnalités). Sa syntaxe est :
guix package options
options spécifie d’abord les opérations à effectuer pendant la transaction. À la fin, une nouvelle génération du profil est créée mais les générations précédentes du profil restent disponibles si l’utilisateur·rice souhaite y revenir.
Par exemple, pour supprimer lua
et installer guile
et
guile-cairo
en une seule transaction :
guix package -r lua -i guile guile-cairo
Parce que c’est pratique, nous fournissons aussi les alias suivants :
guix search
est un alias de guix package -s
,
guix install
est un alias de guix package -i
,
guix remove
est un alias de guix package -r
,
guix upgrade
est un alias de guix package -u
,
guix search
est un alias de guix package -s
.
Ces alias sont moins expressifs que guix package
et fournissent
moins d’options, donc dans certains cas vous devrez probablement utiliser
guix package
directement.
guix package
supporte aussi une approche déclarative où on
spécifie l’ensemble exact des paquets qui doivent être disponibles que l’on
passe via l’option --manifest (voir --manifest).
Pour chaque utilisateur·rice, un lien symbolique vers son profil par défaut
est automatiquement créé dans $HOME/.guix-profile. Ce lien
symbolique pointe toujours vers la génération actuelle du profil par défaut
du compte. Ainsi, on peut ajouter $HOME/.guix-profile/bin à sa
variable d’environnement PATH
etc.
Si vous n’utilisez pas la distribution système Guix, vous devriez ajouter
les lignes suivantes à votre ~/.bash_profile (voir Bash Startup
Files dans The GNU Bash Reference Manual) pour que les shells créés
ensuite aient tous les bonnes définitions des variables d’environnement :
GUIX_PROFILE="$HOME/.guix-profile" ; \ source "$GUIX_PROFILE/etc/profile"
Dans un environnement multi-utilisateur·rice, les profils des
utilisateur·rice·s sont stockés dans un emplacement enregistré comme
garbage-collector root, vers lequel $HOME/.guix-profile pointe
(voir Invoquer guix gc
). Ce répertoire est normalement
localstatedir/guix/profiles/per-user/user
, où
localstatedir est la valeur passée à configure
comme
--localstatedir, et user est le nom d’utilisateur·rice. Le
répertoire per-user est créé au démarrage de guix-daemon
,
et le sous-répertoire user est créé par guix package
.
Les options peuvent être les suivante :
--install=paquet …
-i paquet …
Installer les paquets spécifiés.
Chaque paquet peut spécifier un simple nom de paquet, tel que
guile
, éventuellement suivi d’un arobase et d’un numéro de version,
tel que guile@3.0.7
ou simplement guile@3.0
. (dans ce
dernier cas, la version la plus récente préfixée par 3.0
est
sélectionnée).
Si aucun numéro de version n’est spécifié, la version la plus récente
disponible est choisie. En plus, une telle spécification de paquet
peut contenir un deux-points, suivi du nom d’une des sorties du paquet,
comme dans gcc:doc
ou binutils@2.22:lib
(voir Des paquets avec plusieurs résultats).
Des paquets avec un nom correspondant (et éventuellement une version) sont recherchés dans les modules de la distribution GNU (voir Modules de paquets).
Autrement, un paquet peut directement spécifier un fichier du dépôt
comme /gnu/store/...-guile-3.0.7, produit par exemple par guix
build
.
Parfois les paquets ont des entrées propagées : ce sont des
dépendances qui sont installées automatiquement avec le paquet demandé
(voir propagated-inputs
in
package
objects pour plus d’informations sur les entrées propagées
dans les définitions des paquets).
Un exemple est la bibliothèque MPC de GNU : ses fichiers d’en-tête C se réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à ceux de la bibliothèque GMP. Ainsi, lorsqu’on installe MPC, les bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer MPC supprimera aussi MPFR et GMP — à moins qu’ils n’aient été aussi installés explicitement par l’utilisateur·rice.
En outre, les paquets s’appuient parfois sur la définition de variables d’environnement pour leurs chemins de recherche (voir l’explication de l’--chemins de recherche ci-dessous). Toute définition de variable d’environnement manquante ou éventuellement incorrecte est reportée ici.
--install-from-expression=exp
-e exp
Installer le paquet évalué par exp.
exp doit être une expression Scheme qui s’évalue en un objet
<package>
. Cette option est notamment utile pour distinguer les
variantes d’un paquet avec le même nom, avec des expressions comme (@
(gnu packages base) guile-final)
.
Remarquez que cette option installe la première sortie du paquet, ce qui peut être insuffisant lorsque vous avez besoin d’une sortie spécifique d’un paquet à plusieurs sorties.
--install-from-file=fichier
-f fichier
Installer le paquet évalué par le code dans le fichier.
Par exemple, fichier peut contenir une définition comme celle-ci (voir Définition des paquets) :
(use-modules (guix) (guix build-system gnu) (guix licenses)) (package (name "hello") (version "2.10") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/hello/hello-" version ".tar.gz")) (sha256 (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) (build-system gnu-build-system) (synopsis "Hello, GNU world: An example GNU package") (description "Guess what GNU Hello prints!") (home-page "http://www.gnu.org/software/hello/") (license gpl3+))
Lorsqu’on développe, on peut trouver utile d’inclure un tel fichier
guix.scm à la racine de l’arborescence des sources de son projet qui
pourrait être utilisé pour tester des versions de développement et créer des
environnements de développement reproductibles (voir Invoquer guix shell
).
Le fichier peut aussi contenir une représentation JSON d’une ou de
plusieurs définitions de paquets. L’exécution de guix package -f
sur
hello.json avec le contenu suivant entraînerait l’installation du
paquet greeter
après la construction de myhello
:
[ { "name": "myhello", "version": "2.10", "source": "mirror://gnu/hello/hello-2.10.tar.gz", "build-system": "gnu", "arguments": { "tests?": false } "home-page": "https://www.gnu.org/software/hello/", "synopsis": "Hello, GNU world: An example GNU package", "description": "GNU Hello prints a greeting.", "license": "GPL-3.0+", "native-inputs": ["gettext"] }, { "name": "greeter", "version": "1.0", "source": "https://example.com/greeter-1.0.tar.gz", "build-system": "gnu", "arguments": { "test-target": "foo", "parallel-build?": false, }, "home-page": "https://example.com/", "synopsis": "Greeter using GNU Hello", "description": "This is a wrapper around GNU Hello.", "license": "GPL-3.0+", "inputs": ["myhello", "hello"] } ]
--remove=paquet …
-r paquet …
Supprimer les paquets spécifiés.
Comme pour --install, chaque paquet peut spécifier un numéro
de version ou un nom de sortie en plus du nom du paquet. Par exemple,
‘-r glibc:debug’ supprimerait la sortie debug
de glibc
.
--upgrade[=regexp …]
¶-u [regexp …]
Mettre à jour tous les paquets installés. Si un ou plusieurs regexp sont spécifiés, la mise à jour n’installera que les paquets dont le nom correspond à regexp. Voir aussi l’option --do-not-upgrade ci-dessous.
Remarquez que cela met à jour vers la dernière version des paquets trouvée
dans la distribution actuellement installée. Pour mettre à jour votre
distribution, vous devriez lancer régulièrement guix pull
(voir Invoquer guix pull
).
Quand une mise à jour est en cours d’exécution, les transformations de paquets initialement appliquées lors de la création du profil sont automatiquement réappliquées (voir Options de transformation de paquets). Par exemple, supposons que vous ayez d’abord installé Emacs depuis l’extrémité de sa branche de développement avec :
guix install emacs-next --with-branch=emacs-next=master
La prochaine fois que vous lancerez guix upgrade
, Guix va à
nouveau extraire l’extrémité de la branche de développement Emacs et
construira emacs-next
à partir de ce checkout.
Notez que les options de transformation comme --with-branch et --with-source dépendent de l’état exterieur ; c’est à vous de vous assurer qu’elles fonctionnent comme souhaité. Vous pouvez également écarter une transformation qui s’applique à un paquet en lançant :
$ guix install paquet
--do-not-upgrade[=regexp …]
Lors d’une utilisation conjointe avec l’option --upgrade, ne pas mettre à jour les paquets dont le nom correspond à regexp. Par exemple, pour mettre à jour tous les paquets du profil actuel à l’exception de ceux qui contiennent la chaîne « emacs » :
$ guix package --upgrade . --do-not-upgrade emacs
--manifest=fichier
¶-m fichier
Créer une nouvelle génération du profil depuis l’objet manifeste renvoyé par le code Scheme dans fichier. Cette option peut être répétée plusieurs fois, auquel cas les manifestes sont concaténés.
Cela vous permet de déclarer le contenu du profil plutôt que de le construire avec une série de --install et de commandes similaires. L’avantage étant que le fichier peut être placé sous contrôle de version, copié vers d’autres machines pour reproduire le même profil, etc.
fichier doit renvoyer un objet manifest qui est en gros une liste de paquets :
(use-package-modules guile emacs) (packages->manifest (list emacs guile-2.0 ;; Utiliser une sortie spécifique d'un paquet. (list guile-2.0 "debug")))
Voir Écrire un manifeste, pour des informations sur la manière d’écrire un manifeste. Voir --export-manifest, pour apprendre à obtenir un fichier manifeste depuis un profil existant.
--roll-back
¶Revenir à la génération précédente du profil c.-à-d. défaire la dernière transaction.
Lorsqu’elle est combinée avec des options comme --install, Le retour en arrière se produit avant toute autre action.
Lorsque vous revenez de la première génération qui contient des fichiers, le profil pointera vers la zéroième génération qui ne contient aucun fichier en dehors de ses propres métadonnées.
Après être revenu en arrière, l’installation, la suppression et la mise à jour de paquets réécrit les futures générations précédentes. Ainsi, l’historique des générations dans un profil est toujours linéaire.
--switch-generation=motif
¶-S motif
Basculer vers une génération particulière définie par le motif.
Le motif peut être soit un numéro de génération soit un nombre précédé de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière d’un nombre donné de générations. Par exemple, si vous voulez retourner à la dernière génération après --roll-back, utilisez --switch-generation=+1.
La différence entre --roll-back et --switch-generation=-1 est que --switch-generation ne vous amènera pas à la génération initiale, donc si la génération demandée n’existe pas la génération actuelle ne changera pas.
--search-paths[=genre]
¶Rapporter les définitions des variables d’environnement dans la syntaxe Bash qui peuvent être requises pour utiliser l’ensemble des paquets installés. Ces variables d’environnement sont utilisées pour spécifier les chemins de recherche de fichiers utilisés par les paquets installés.
Par exemple, GCC a besoin des variables d’environnement CPATH
et
LIBRARY_PATH
pour trouver les en-têtes et les bibliothèques dans le
profil de l’utilisateur·rice (voir Environment Variables dans Using the
GNU Compiler Collection (GCC)). Si GCC et, disons, la bibliothèque C sont
installés dans le profil, alors --search-paths suggérera
d’initialiser ces variables à profil/include et
profil/lib, respectivement (voir Chemins de recherche, pour des
infos sur les spécifications de chemins de recherche associées aux paquets).
Le cas d’utilisation typique est de définir ces variables d’environnement dans le shell :
$ eval $(guix package --search-paths)
genre peut être l’une des valeurs exact
, prefix
ou
suffix
, ce qui signifie que les définitions des variables
d’environnement renvoyées seront soit les paramètres exacts, soit placés
avant ou après la valeur actuelle de ces paramètres. Lorsqu’il est omis,
genre a pour valeur par défaut exact
.
Cette option peut aussi être utilisé pour calculer les chemins de recherche combinés de plusieurs profils. Regardez cet exemple :
$ guix package -p toto -i guile $ guix package -p titi -i guile-json $ guix package -p toto -p titi --search-paths
La dernière commande ci-dessus montre la variable GUILE_LOAD_PATH
bien
que, pris individuellement, ni toto ni titi n’auraient donné
cette recommandation.
--profile=profil
-p profil
Utiliser le profil à la place du profil par défaut du compte.
profil doit être le nom d’un fichier qui sera créé une fois terminé. Concrètement, profil sera un simple lien symbolique (« symlink ») pointant vers le profil réel où les paquets sont installés :
$ guix install hello -p ~/code/my-profile … $ ~/code/my-profile/bin/hello Hello, world!
Tout ce qu’il faut pour se débarrasser du profil est de supprimer ce lien symbolique et ses frères et sœurs qui pointent vers des générations spécifiques :
$ rm ~/code/my-profile ~/code/my-profile-*-link
--list-profiles
Liste tous les profils utilisateur·rice :
$ guix package --list-profiles /home/charlie/.guix-profile /home/charlie/code/my-profile /home/charlie/code/devel-profile /home/charlie/tmp/test
En cours d’exécution sous root, liste tous les profils de tou·te·s les utilisateur·rice·s.
--allow-collisions
Permettre des collisions de paquets dans le nouveau profil. À utiliser à vos risques et périls !
Par défaut, guix package
rapporte les collisions dans le
profil comme des erreurs. Les collisions ont lieu quand deux version ou
variantes d’un paquet donné se retrouvent dans le profil.
--bootstrap
Utiliser le programme d’amorçage Guile pour compiler le profil. Cette option n’est utile qu’aux personnes qui développent la distribution.
En plus de ces actions, guix package
supporte les options
suivantes pour demander l’état actuel d’un profil ou la disponibilité des
paquets :
Lister les paquets disponibles dont le nom, le synopsis ou la description
correspondent à la regexp (en étant insensible à la casse), triés par
pertinence. Afficher toutes les métadonnées des paquets correspondants au
format recutils
(voir GNU recutils databases dans GNU
recutils manual).
Cela permet à des champs spécifiques d’être extraits avec la commande
recsel
, par exemple :
$ guix package -s malloc | recsel -p name,version,relevance name: jemalloc version: 4.5.0 relevance: 6 name: glibc version: 2.25 relevance: 1 name: libgc version: 7.6.0 relevance: 1
De manière similaire, pour montrer le nom de tous les paquets disponibles sous license GNU LGPL version 3 :
$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"' name: elfutils name: gmp …
Il est aussi possible de raffiner les résultats de la recherche en donnant
plusieurs options -s
à guix package
, ou plusieurs arguments
à guix search
. Par exemple, la commande suivante renvoie la liste
des jeux de plateau (cette fois-ci avec l’alias guix search
) :
$ guix search '\<board\>' game | recsel -p name name: gnubg …
Si on avait oublié -s game
, on aurait aussi eu les paquets logiciels
qui s’occupent de circuits imprimés (en anglais : circuit board) ; supprimer
les chevrons autour de board
aurait aussi ajouté les paquets qui
parlent de clavier (en anglais : keyboard).
Et maintenant un exemple plus élaboré. La commande suivante recherche les bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl, Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
$ guix search crypto library | \ recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
Voir Selection Expressions dans GNU recutils manual pour plus
d’information sur les expressions de sélection pour recsel -e
.
Afficher les détails du paquet dans la liste des paquets disponibles,
au format recutils
(voir GNU recutils databases dans GNU recutils manual).
$ guix package --show=guile | recsel -p name,version name: guile version: 3.0.5 name: guile version: 3.0.2 name: guile version: 2.2.7 …
Vous pouvez aussi spécifier le nom complet d’un paquet pour n’avoir que les
détails concernant une version spécifique (cette fois-ci avec l’alias
guix show
) :
$ guix show guile@3.0.5 | recsel -p name,version name: guile version: 3.0.5
Liste les paquets actuellement installés dans le profil spécifié, avec les paquets les plus récemment installés en dernier. Lorsque regexp est spécifié, liste uniquement les paquets installés dont le nom correspond à regexp.
Pour chaque paquet installé, affiche les éléments suivants, séparés par des
tabulations : le nom du paquet, sa version, la partie du paquet qui est
installé (par exemple, out
pour la sortie par défaut, include
pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
Lister les paquets actuellement disponibles dans la distribution pour ce système (voir Distribution GNU). Lorsque regexp est spécifié, lister uniquement les paquets dont le nom correspond à regexp.
Pour chaque paquet, affiche les éléments suivants séparés par des tabulations : son nom, sa version, les parties du paquet (voir Des paquets avec plusieurs résultats), et l’emplacement de sa définition.
Renvoyer la liste des générations avec leur date de création ; pour chaque génération, montre les paquets installés avec les paquets installés les plus récemment en dernier. Remarquez que la zéroième génération n’est jamais montrée.
Pour chaque paquet installé, afficher les éléments suivants, séparés par des tabulations : le nom du paquet, sa version, la partie du paquet qui a été installée (voir Des paquets avec plusieurs résultats), et l’emplacement du paquet dans le dépôt.
Lorsque motif est utilisé, la commande ne renvoie que les générations correspondantes. Les motifs valides sont :
Et --list-generations=1,8,2 renvoie les trois générations dans l’ordre spécifié. Aucun espace ni virgule surnuméraire ne sont permis.
Il est aussi possible d’omettre le numéro final. Par exemple, --list-generations=2.. renvoie toutes les générations à partir de la deuxième.
Lorsque motif est omis, supprimer toutes les générations en dehors de l’actuelle.
Cette commande accepte les même motifs que --list-generations. Lorsque motif est spécifié, supprime les générations correspondantes. Lorsque motif spécifie une durée, les générations plus anciennes que la durée spécifiée correspondent. Par exemple --delete-generations=1m supprime les générations vieilles de plus d’un mois.
Si la génération actuelle correspond, elle n’est pas supprimée. La zéroième génération n’est elle non plus jamais supprimée.
Remarquez que supprimer des générations empêche de revenir en arrière vers elles. Ainsi, cette commande doit être utilisée avec précaution.
Écrire un manifeste vers la sortie standard utilisable avec --manifest et qui correspond à un ou plusieurs profils choisis.
Cette option est conçue pour vous aider à migre du mode de fonctionnement «
impératif » — lancer guix install
, guix upgrade
, etc
— au mode déclaratif offert par --manifest.
Soyez conscient que le manifeste qui est résulte est une approximation de ce que votre profil contient vraiment ; par exemple, en fonction de la manière dont votre profil a été créé, il peut se référer à des paquets ou des versions de paquets qui ne sont pas exactement ce que vous avez spécifié.
Gardez en tête qu’un manifeste est purement symbolique : il ne contient que des noms de paquets et éventuellement des versions, et leur signification varie avec le temps. Si vous voulez « épingler » des canaux aux révisions qui ont été utilisées pour construire les profils, voir --export-channels plus bas.
Écrit sur la sortie standard la liste des canaux utilisés par les profils
choisi, dans un format convenable pour guix pull --channels
ou
guix time-machine --channels
(voir Canaux).
Avec --export-manifest, cette option fournit les informations qui vous permettent de répliquer le profil actuel (voir Répliquer Guix).
Cependant, remarquez que la sortie de cette commande est une approximation de ce qui a vraiment été utilisé pour construire le profil. En particulier, a profil unique peut avoir été construit à partir de plusieurs révisions du même canal. Dans ce cas, --export-manifest choisi la dernière et écrit la liste des autres révisions dans un commentaire. Si vous avez vraiment besoin de choisir des paquets à partir d’autres révisions des canaux, vous pouvez utiliser des inférieurs dans votre manifeste pour cela (voir Inférieurs).
Avec --export-manifest, c’est un bon point de départ si vous voulez migrer du modèle « impératif » au modèle complètement déclaratif qui consiste en un fichier manifeste et un fichier de canaux qui épingle les révisions exactes des canaux que vous voulez.
Enfin, comme guix package
peut démarrer des processus de
construction, il supporte les options de construction communes
(voir Options de construction communes). Il prend aussi en charge les options de
transformation de paquets comme --with-source, et les préserve à
travers les mises à jour (voir Options de transformation de paquets).
Suivant: Substituts, Précédent: Fonctionnalités, Monter: Gestion de paquets [Table des matières][Index]