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


5.9 Inférieurs

Remarque : La fonctionnalité décrite ici est un « démonstrateur technique » à la version 1ca065f. Ainsi, l’interface est sujette à changements.

Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix avec des paquets disponibles dans une révision différente de Guix. Les inférieurs de Guix vous permettent d’accomplir cette tâche en composant différentes versions de Guix de manière arbitraire.

Techniquement, un « inférieur » est surtout un processus Guix séparé connecté à votre processus Guix principal à travers un REPL (voir Invoquer guix repl). Le module (guix inferior) vous permet de créer des inférieurs et de communiquer avec eux. Il fournit aussi une interface de haut-niveau pour naviguer dans les paquets d’un inférieur — des paquets inférieurs — et les manipuler.

Lorsqu’on les combine avec des canaux (voir Canaux), les inférieurs fournissent une manière simple d’interagir avec un révision de Guix séparée. Par exemple, disons que vous souhaitiez installer dans votre profil le paquet guile actuel, avec le guile-json d’une ancienne révision de Guix — peut-être parce que la nouvelle version de guile-json a une API incompatible et que vous voulez lancer du code avec l’ancienne API. Pour cela, vous pourriez écrire un manifeste à utiliser avec guix package --manifest (voir Écrire un manifeste) ; dans ce manifeste, vous créeriez un inférieur pour l’ancienne révision de Guix qui vous intéresse et vous chercheriez le paquet guile-json dans l’inférieur :

(use-modules (guix inferior) (guix channels)
             (srfi srfi-1))   ;pour « first »

(define channels
  ;; L'ancienne révision depuis laquelle on veut
  ;; extraire guile-json.
  (list (channel
         (name 'guix)
         (url "https://git.savannah.gnu.org/git/guix.git")
         (commit
          "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))

(define inferior
  ;; Un inférieur représentant la révision ci-dessus.
  (inferior-for-channels channels))

;; Maintenant on crée un manifeste avec le paquet « guile » actuel
;; et l'ancien paquet « guile-json ».
(packages->manifest
 (list (first (lookup-inferior-packages inferior "guile-json"))
       (specification->package "guile")))

Durant la première exécution, guix package --manifest pourrait avoir besoin de construire le canal que vous avez spécifié avant de créer l’inférieur ; les exécutions suivantes seront bien plus rapides parce que la révision de Guix sera déjà en cache.

Le module (guix inferior) fournit les procédures suivantes pour ouvrir un inférieur :

Procédure :inferior-for-channels channels [#:cache-directory] [#:ttl]

Renvoie un inférieur pour channels, une liste de canaux. Elle utilise le cache dans cache-directory, où les entrées peuvent être glanées après ttl secondes. Cette procédure ouvre une nouvelle connexion au démon de construction.

Elle a pour effet de bord de construire ou de substituer des binaires pour channels, ce qui peut prendre du temps.

Procédure :open-inferior directory [#:command "bin/guix"]

Ouvre le Guix inférieur dans directory et lance directory/command repl ou équivalent. Renvoie #f si l’inférieur n’a pas pu être lancé.

Les procédures listées plus bas vous permettent d’obtenir et de manipuler des paquets inférieurs.

Procédure :inferior-packages inferior

Renvoie la liste des paquets connus de l’inférieur inferior.

Procédure :lookup-inferior-packages inferior name [version]

Renvoie la liste triée des paquets inférieurs qui correspondent à name dans inferior, avec le plus haut numéro de version en premier. Si version est vrai, renvoie seulement les paquets avec un numéro de version préfixé par version.

Procédure :inferior-package? obj

Renvoie vrai si obj est un paquet inférieur.

Procédure :inferior-package-name package
Procédure :inferior-package-version package
Procédure :inferior-package-synopsis package
Procédure :inferior-package-description package
Procédure :inferior-package-home-page package
Procédure :inferior-package-location package
Procédure :inferior-package-inputs package
Procédure :inferior-package-native-inputs package
Procédure :inferior-package-propagated-inputs package
Procédure :inferior-package-transitive-propagated-inputs package
Procédure :inferior-package-native-search-paths package
Procédure :inferior-package-transitive-native-search-paths package
Procédure :inferior-package-search-paths package

Ces procédures sont la contrepartie des accesseurs des enregistrements de paquets (voir Référence de package). La plupart fonctionne en effectuant des requêtes à l’inférieur dont provient package, donc l’inférieur doit toujours être disponible lorsque vous appelez ces procédures.

Les paquets inférieurs peuvent être utilisés de manière transparente comme tout autre paquet ou objet simili-fichier dans des G-expressions (voir G-Expressions). Ils sont aussi gérés de manière transparente par la procédure packages->manifest, qui est typiquement utilisée dans des manifestes (voir l’option --manifest de guix package). Ainsi, vous pouvez insérer un paquet inférieur à peu près n’importe où vous utiliseriez un paquet normal : dans des manifestes, dans le champ packages de votre déclaration operating-system, etc.


Suivant: Invoquer guix describe, Précédent: Invoquer guix time-machine, Monter: Gestion de paquets   [Table des matières][Index]