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


9.6 Invoquer guix refresh

La commande guix refresh s’adresse avant tout aux personnes qui écrivent des paquets. En tant qu’utilisateur·rice, vous pourriez être intéressé·e par l’option --with-latest qui peut vous conférer les superpouvoirs de mettre à jour les paquets, et qui est construite à partir de guix refresh (voir --with-latest). Par défaut, guix refresh rapporte les paquets fournis par la distribution qui sont en retard par rapport aux dernières versions disponibles en amont, comme ceci :

$ guix refresh
gnu/packages/gettext.scm :29 :13 : gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
gnu/packages/glib.scm :77:12 : glib serait mis à jour de 2.34.3 à 2.37.0

On peut aussi spécifier des paquets à prendre en compte, auquel cas un avertissement est émis pour les paquets qui ne sont pas mis à jour :

$ guix refresh coreutils guile guile-ssh
gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13

guix refresh navigue le dépôt amont de chaque paquet et détermine le numéro de version le plus élevé parmi les versions publiées. La commande sait comment mettre à jour certains types de paquets : les paquets GNU, les paquets ELPA, etc. — voir la documentation pour --type ci-dessous. Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour déterminer si une nouvelle version est disponible en amont. Cependant, le mécanisme est extensible, alors n’hésitez pas à nous contacter pour ajouter une nouvelle méthode !

--recursive

Considère les paquets spécifiés et tous les paquets dont ils dépendent.

$ guix refresh --recursive coreutils
gnu/packages/acl.scm:40:13: acl would be upgraded from 2.2.53 to 2.3.1
gnu/packages/m4.scm:30:12: 1.4.18 is already the latest version of m4
gnu/packages/xml.scm:68:2: warning: no updater for expat
gnu/packages/multiprecision.scm:40:12: 6.1.2 is already the latest version of gmp
…

Si pour n’importe quelle raison vous ne voulez pas mettre à jour vers la dernière version, vous pouvez mettre à jour vers une version spécifique en ajoutant un signe égal et le numéro de version désiré à la fin de la spécification du paquet. Remarquez que tous les programmes de mise à jour ne le prennent pas en charge. Une erreur est rapportée quand un programme de mise à jour ne peut pas rafraîchir vers la version spécifiée.

$ guix refresh guile
gnu/packages/guile.scm:392:2: guile serait mis à jour de 3.0.3 vers 3.0.5
$ guix refresh -u guile=3.0.4
…
gnu/packages/guile.scm:392:2: guile : mise à jour de la version 3.0.3 vers la version 3.0.4...
…
$ guix refresh -u guile@2.0=2.0.12
…
gnu/packages/guile.scm:147:2: guile : mise à jour de la version 2.0.10 vers la version 2.0.12...
…

In some specific cases, you may have many packages specified via a manifest or a module selection which should all be updated together; for these cases, the --target-version option can be provided to have them all refreshed to the same version, as shown in the examples below:

$ guix refresh qtbase qtdeclarative --target-version=6.5.2
gnu/packages/qt.scm:1248:13: qtdeclarative would be upgraded from 6.3.2 to 6.5.2
gnu/packages/qt.scm:584:2: qtbase would be upgraded from 6.3.2 to 6.5.2
$ guix refresh --manifest=qt5-manifest.scm --target-version=5.15.10
gnu/packages/qt.scm:1173:13: qtxmlpatterns would be upgraded from 5.15.8 to 5.15.10
gnu/packages/qt.scm:1202:13: qtdeclarative would be upgraded from 5.15.8 to 5.15.10
gnu/packages/qt.scm:1762:13: qtserialbus would be upgraded from 5.15.8 to 5.15.10
gnu/packages/qt.scm:2070:13: qtquickcontrols2 would be upgraded from 5.15.8 to 5.15.10
…

Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et guix refresh a besoin d’un peu d’aide. La plupart des gestionnaires de mise à jour prennent en compte la propriété upstream-name dans les définitions de paquets, ce qui peut être utilisé à cette fin :

(define-public network-manager
  (package
    (name "network-manager")
    ;; …
    (properties '((upstream-name . "NetworkManager")))))

When passed --update, it modifies distribution source files to update the version numbers and source code hashes of those package definitions, as well as possibly their inputs (voir Définition des paquets). This is achieved by downloading each package’s latest source tarball and its associated OpenPGP signature, authenticating the downloaded tarball against its signature using gpgv, and finally computing its hash—note that GnuPG must be installed and in $PATH; run guix install gnupg if needed.

Quand la clé publique utilisée pour signer l’archive est manquante depuis le trousseau de clés utilisateur·rice, une tentative est faite de la récupérer automatiquement depuis un serveur de clé publique ; en cas de succès, la clé est ajoutée au trousseau de l’utilisateur·rice ; sinon, guix refresh renvoie une erreur.

Les options suivantes sont supportées :

--expression=expr
-e expr

Considérer le paquet évalué par expr.

C’est utile pour précisément se référer à un paquet, comme dans cet exemple :

guix refresh -l -e '(@@ (gnu packages commencement) glibc-final)'

Cette commande liste les dépendances de la libc « finale » (presque tous les paquets).

--update
-u

Update distribution source files (package definitions) in place. This is usually run from a checkout of the Guix source tree (voir Lancer Guix avant qu’il ne soit installé):

./pre-inst-env guix refresh -s non-core -u

Voir Définition des paquets, for more information on package definitions. You can also run it on packages from a third-party channel:

guix refresh -L /path/to/channel -u package

Voir Écrire de nouveaux de canaux, on how to create a channel.

This command updates the version and source code hash of the package. Depending on the updater being used, it can also update the various ‘inputs’ fields of the package. In some cases, the updater might get inputs wrong—it might not know about an extra input that’s necessary, or it might add an input that should be avoided.

To address that, packagers can add properties stating inputs that should be added to those found by the updater or inputs that should be ignored: the updater-extra-inputs and updater-ignored-inputs properties pertain to “regular” inputs, and there are equivalent properties for ‘native’ and ‘propagated’ inputs. In the example below, we tell the updater that we need ‘openmpi’ as an additional input:

(define-public python-mpi4py
  (package
    (name "python-mpi4py")
    ;; …
    (inputs (list openmpi))
    (properties
     '((updater-extra-inputs . ("openmpi"))))))

That way, guix refresh -u python-mpi4py will leave the ‘openmpi’ input, even if it is not among the inputs it would normally add.

--select=[subset]
-s subset

Select all the packages in subset, one of core, non-core or module:name.

Le sous-ensemble core se réfère à tous les paquets du cœur de la distribution — c.-à-d. les paquets qui sont utilisés pour construire « tout le reste ». Cela comprend GCC, libc, Binutils, Bash, etc. Habituellement, changer l’un de ces paquets dans la distribution implique de reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance pour les utilisateurs, en terme de temps de compilation et de bande passante utilisés pour effectuer la mise à jour.

Le sous-ensemble non-core se réfère au reste des paquets. C’est habituellement utile dans les cas où une mise à jour des paquets du cœur serait dérangeante.

The module:name subset refers to all the packages in a specified guile module. The module can be specified as module:guile or module:(gnu packages guile), the former is a shorthand for the later.

--manifest=fichier
-m fichier

Choisi tous les paquets du manifeste dans file. C’est utile pour vérifier qu’aucun des paquets du manifeste utilisateur ne peut être mis à jour.

--type=updater
-t updater

Chois uniquement les paquets pris en charge par updater (éventuellement une liste de gestionnaires de mise à jour séparés par des virgules). Actuellement, updater peut être l’une des valeurs suivantes :

gnu

le gestionnaire de mise à jour pour les paquets GNU ;

savannah

le gestionnaire de mise à jour pour les paquets hébergés sur Savannah ;

sourceforge

le gestionnaire de mise à jour pour les paquets hébergés sur SourceForge ;

gnome

le gestionnaire de mise à jour pour les paquets GNOME ;

kde

le gestionnaire de mise à jour pour les paquets KDE ;

xorg

le gestionnaire de mise à jour pour les paquets X.org ;

kernel.org

le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;

egg

le gestionnaire de mise à jour pour les paquets Egg ;

elpa

le gestionnaire de mise à jour pour les paquets ELPA ;

cran

le gestionnaire de mise à jour pour les paquets CRAN ;

bioconductor

le gestionnaire de mise à jour pour les paquets Bioconductor ;

cpan

le gestionnaire de mise à jour pour les paquets CPAN ;

pypi

le gestionnaire de mise à jour pour les paquets PyPI.

gem

le gestionnaire de mise à jour pour les paquets RubyGems.

github

le gestionnaire de mise à jour pour les paquets GitHub.

hackage

le gestionnaire de mise à jour pour les paquets Hackage.

stackage

le gestionnaire de mise à jour pour les paquets Stackage.

crate

le gestionnaire de mise à jour pour les paquets Crates.

launchpad

le gestionnaire de mise à jour pour les paquets Launchpad.

generic-html

un gestionnaire de mise à jour qui visite la page HTML où l’archive des sources est hébergée, lorsque c’est possible, ou la page HTML spécifiée par la propriété release-monitoring-url du paquet.

generic-git

un gestionnarie de mise à jour générique pour les paquets hébergés sur des dépôts Git. Il essaye d’analyser les noms de tag Git de manière astucieuse, mais s’il ne parvient pas à analyser le nom d’un tag et à comparer les tags correctement, il est possible de définir les propriétés suivantes pour un paquet.

  • release-tag-prefix : une expression régulière pour repérer le préfixe dans le nom d’un tag.
  • release-tag-suffix : une expression régulière pour repérer le suffixe dans le nom d’un tag.
  • release-tag-version-delimiter : une chaîne de caractères utilisée comme délimitation dans le nom d’un tag pour séparer les numéros de version.
  • accept-pre-releases : par défaut, le gestionnaire de mise à jour ignorera les pré-versions ; pour lui faire chercher aussi les pré-versions, assignez à cette propriété la valeur #t.
(package
  (name "toto")
  ;; ...
  (properties
    '((release-tag-prefix . "^release0-")
      (release-tag-suffix . "[a-z]?$")
      (release-tag-version-delimiter . ":"))))

Par exemple, la commande suivante ne vérifie que les mises à jour des paquets Emacs hébergés sur elpa.gnu.org et les paquets CRAN :

$ guix refresh --type=elpa,cran
gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
--list-updaters

Liste les gestionnaires de mises à jour disponibles et quitte (voir --type ci-dessus).

Pour chaque gestionnaire, affiche le pourcentage de paquets qu’il couvre ; à la fin, affiche le pourcentage de paquets couverts par tous les gestionnaires.

En plus, on peut passer à guix refresh un ou plusieurs noms de paquets, comme dans cet exemple :

$ ./pre-inst-env guix refresh -u emacs idutils gcc@4.8

La commande ci-dessus met à jour spécifiquement les paquets emacs et idutils. L’option --select n’aurait aucun effet dans ce cas. Vous voudrez aussi sans doute mettre à jour les définitions qui correspondent aux paquets installés dans votre profil :

$ ./pre-inst-env guix refresh -u \
       $(guix package --list-installed | cut -f1)

Pour déterminer s’il faut mettre à jour un paquet, il est parfois pratique de savoir quels paquets seraient affectés par la mise à jour pour pouvoir vérifier la compatibilité. Pour cela l’option suivante peut être utilisée avec un ou plusieurs noms de paquets passés à guix refresh :

--list-dependent
-l

Liste les paquets de plus haut-niveau qui devraient être reconstruits après la mise à jour d’un ou plusieurs paquets.

Voir le type reverse-package de guix graph, pour des informations sur la manière de visualiser la liste des paquets dépendant d’un autre.

Sachez que l’option --list-dependent n’a qu’une approche approximative sur les reconstructions qui seraient nécessaires à la suite d’une mise à jour. D’autres reconstructions peuvent être nécessaires dans certaines circonstances.

$ guix refresh --list-dependent flex
Construire les 120 paquets suivants s'assure que les 213 paquets dépendants sont reconstruits :
hop@2.4.0 emacs-geiser@0.13 notmuch@0.18 mu@0.9.9.5 cflow@1.4 idutils@4.6 …

La commande ci-dessus liste un ensemble de paquets qui peuvent être construits pour vérifier la compatibilité d’une mise à jour de flex.

--list-transitive
-T

Lister tous les paquets dont un paquet ou plus dépendent.

$ guix refresh --list-transitive flex
flex@2.6.4 depends on the following 25 packages: perl@5.28.0 help2man@1.47.6
bison@3.0.5 indent@2.2.10 tar@1.30 gzip@1.9 bzip2@1.0.6 xz@5.2.4 file@5.33 …

La commande ci-dessus liste un ensemble de paquets qui, lorsqu’ils sont modifiés, causent la reconstruction de flex.

Les options suivante peuvent être utilisées pour personnaliser les opérations avec GnuPG :

--gpg=commande

Utilise commande comme la commande de GnuPG 2.x. commande est recherchée dans PATH.

--keyring=fichier

Utilise fichier comme porte-clefs pour les clefs amont. fichier doit être dans le format keybox. Les fichiers Keybox ont d’habitude un nom qui fini par .kbx et GNU Privacy Guard (GPG) peut manipuler ces fichiers (voir kbxutil dans Using the Privacy Guard, pour plus d’informations sur un outil pour manipuler des fichiers keybox).

Lorsque cette option est omise, guix refresh utilise ~/.config/guix/upstream/trustedkeys.kbx comme trousseau pour les clés de signature en amont. Les signatures OpenPGP sont vérifiées avec ces clés ; les clés manquantes sont aussi téléchargées dans ce trousseau (voir --key-download plus bas).

Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un fichier keybox avec une commande telle que :

gpg --export rms@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx

De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique comme ceci :

gpg --no-default-keyring --keyring mykeyring.kbx \
  --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5

Voir --keyring dans Using the GNU Privacy Guard pour plus d’informations sur l’option --keyring de GPG.

--key-download=politique

Gère les clefs OpenPGP manquantes d’après la politique, qui peut être l’une des suivantes :

always

Toujours télécharger les clefs manquantes depuis un serveur de clefs et les ajouter au porte-clefs de l’utilisateur.

never

Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la place.

interactive

Lorsqu’on rencontre un paquet signé par une clef OpenPGP inconnue, demander à l’utilisateur s’il souhaite la télécharger ou non. C’est le comportement par défaut.

--key-server=host

Utiliser host comme serveur de clefs OpenPGP lors de l’importe d’une clef publique.

--load-path=répertoire
-L répertoire

Ajoute répertoire au début du chemin de recherche de module de paquets (voir Modules de paquets).

Cela permet à des utilisateurs de définir leur propres paquets et les rendre disponibles aux outils en ligne de commande.

Le gestionnaire de mises à jour github utilise GitHub API pour faire des requêtes sur les nouvelles versions. Lorsqu’elle est utilisé de manière répétée, par exemple lorsque vous vérifiez tous les paquets, GitHub finira par refuser de répondre à d’autres requêtes de l’API. Par défaut 60 requêtes à l’heure sont autorisées, et une vérification complète de tous les paquets GitHub dans Guix demande bien plus que cela. L’authentification avec GitHub à travers l’utilisation d’un jeton d’API lève ces limites. Pour utiliser un jeton de l’API, initialisez la variable d’environnement GUIX_GITHUB_TOKEN avec un jeton que vous vous serez procuré sur https://github.com/settings/tokens ou autrement.


Suivant: Invoquer guix style, Précédent: Invoquer guix import, Monter: Utilitaires   [Table des matières][Index]