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


9.5 Invoquer guix import

La commande guix import est utile pour les gens qui voudraient ajouter un paquet à la distribution avec aussi peu de travail que possible — une demande légitime. La commande connaît quelques dépôts logiciels d’où elle peut « importer » des métadonnées de paquets. Le résultat est une définition de paquet, ou un modèle de définition, dans le format reconnu par Guix (voir Définition des paquets).

La syntaxe générale est :

guix import importer options

importer spécifie la source depuis laquelle importer des métadonnées de paquets, et options spécifie un identifiant de paquet et d’autres options spécifiques à importer.

Certains des importeurs s’appuient sur la capacité d’exécuter la commande gpgv. Pour ceux-ci, GnuPG doit être installé dans $PATH ; exécuter guix install gnupg si nécessaire.

Actuellement, les « importeurs » disponibles sont :

gnu

Importe des métadonnées d’un paquet GNU donné. Cela fournit un modèle pour la dernière version de ce paquet GNU, avec le hash de son archive, le synopsis et la description canonique.

Les informations supplémentaires comme les dépendances du paquet et sa licence doivent être renseignées manuellement.

Par exemple, la commande suivante renvoie une définition de paquets pour GNU Hello :

guix import gnu hello

Les options spécifiques sont :

--key-download=politique

Comme pour guix refresh, spécifie la politique de gestion des clefs OpenPGP manquantes lors de la vérification de la signature d’un paquet. Voir --key-download.

pypi

Importe des métadonnées depuis l’index des paquets Python. Les informations sont récupérées à partir de la description en JSON disponible sur pypi.python.org et inclus généralement toutes les informations utiles, dont les dépendances des paquets. Pour une efficacité maximale, il est recommandé d’installer l’utilitaire unzip, pour que l’importateur puisse dézipper les wheels Python et récupérer les informations contenues à l’intérieur.

La commande ci-dessous importe les métadonnées du paquet Python itsdangerous :

guix import pypi itsdangerous
--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

gem

Importe des métadonnées de RubyGems. Les informations sont récupérées au format JSON disponible sur rubygems.org et inclut les informations les plus utiles, comme les dépendances à l’exécution. Il y a des cependant quelques restrictions. Les métadonnées ne distinguent pas synopsis et description, donc la même chaîne est utilisée pour les deux champs. En plus, les détails des dépendances non Ruby requises pour construire des extensions natives sont indisponibles et laissé en exercice à l’empaqueteur.

La commande ci-dessous importe les métadonnées pour le paquet Ruby rails :

guix import gem rails
--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

cpan

Importe des métadonnées de MetaCPAN. Les informations sont récupérées au format JSON disponible à travers l’API de MetaCPAN et inclus les informations les plus utiles, comme les dépendances des modules. L’information sur les licences doit être vérifiée avec attention. Si Perl est disponible dans le dépôt, alors l’utilitaire corelist sera utiliser pour exclure les modules du cœur de la distribution Perl de la liste des dépendances.

La commande ci-dessous importe des métadonnées pour le module Acme::Boolean Perl :

guix import cpan Acme::Boolean
cran

Importe des métadonnées de CRAN, le dépôt central de l’environnement statistique et graphique GNU R.

L’ information est extraite du fichier DESCRIPTION du paquet.

La commande ci-dessous importe les métadonnées du paquet Cairo R :

guix import cran Cairo

Lorsque l’option --recursive est utilisée, l’importateur traversera le graphe des dépendances du paquet en amont récursivement et générera des expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.

Lorsque vous ajoutez --style=specification, l’importateur générera des définitions de paquets dont les entrées sont les spécifications des paquets au lieu de références au variables des paquets. C’est utile lorsque des définitions de paquets doivent être ajoutées à des modules utilisateurs, comme la liste des modules de paquets n’a pas besoin d’être changée. La valeur par défaut est --style=variable.

Lorsque --archive=bioconductor est ajoutée, les métadonnées sont importées depuis Bioconductor, un répertoire de paquets R pour l’analyse et la compréhension de données génomiques volumineuses en bioinformatique.

Les informations sont extraites du fichier DESCRIPTION du paquet contenu dans l’archive du paquet.

La commande ci-dessous importe les métadonnées pour le paquet R GenomicRanges :

guix import cran --archive=bioconductor GenomicRanges

Enfin, vous pouvez aussi importer des paquets R qui n’ont pas encore été publiés sur CRAN ou Bioconductor tant qu’ils ne sont pas dans le dépôt Git. Utilisez --archive=git suivi par l’URL du dépôt Git :

guix import cran --archive=git https://github.com/immunogenomics/harmony
texlive

Importe les métadonnées de CTAN, le réseau d’archive TeX complet pour les paquets TeX qui font partie de la distribution TeX Live.

Les informations sur les paquets sont obtenues à travers l’API XML fournie par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas d’archives versionnées.

La commande ci-dessous importe les métadonnées du paquet TeX fontspec :

guix import texlive fontspec

Lorsque l’option --archive=directory est ajoutée, le code source n’est pas téléchargé depuis le sous-répertoire latex du l’arborescence texmf-dist/source dans le dépôt SVN de TeX Live, mais depuis le répertoire voisin directory spécifié sous la même racine.

La commande ci-dessous importe les métadonnées du paquet ifxetex depuis CTAN en récupérant les sources depuis le répertoire texmf/source/generic :

guix import texlive --archive=generic ifxetex
json

Importe des métadonnées d’un fichier JSON local. Considérez l’exemple suivant d’une définition de paquet au format JSON :

{
  "name": "hello",
  "version": "2.10",
  "source": "mirror://gnu/hello/hello-2.10.tar.gz",
  "build-system": "gnu",
  "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"]
}

Les noms des champs sont les mêmes que pour les enregistrements de <package> (Voir Définition des paquets). Les référence à d’autres paquets sont fournies comme des listes JSON de chaînes de spécifications de paquets comme guile ou guile@2.0.

L’importateur supporte aussi une définition plus explicite des sources avec les champs habituels pour les enregistrements <origin> :

{
  …
  "source": {
    "method": "url-fetch",
    "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
    "sha256": {
      "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
    }
  }
  …
}

La commande ci-dessous lit les métadonnées du fichier JSON hello.json et renvoie une expression de paquet :

guix import json hello.json
hackage

Importe les métadonnées de l’archive de paquets centrale de la communauté Haskell, Hackage. Les informations sont récupérées depuis les fichiers Cabal et incluent toutes les informations utiles, dont les dépendances des paquets.

Les options spécifiques sont :

--stdin
-s

Lit un fichier Cabal depuis l’entrée standard.

--no-test-dependencies
-t

N’inclut pas les dépendances requises uniquement par les suites de tests.

--cabal-environment=alist
-e alist

alist est une alist Scheme qui définie l’environnement dans lequel les conditions de Cabal sont évaluées. Les clefs acceptées sont : os, arch, impl et une représentation sous forme de chaîne de caractères du nom d’un drapeau. La valeur associée à un drapeau doit être le symbole true ou false. La valeur associée aux autres clefs doivent se conformer avec la définition du format de fichiers Cabal. La valeur par défaut associée avec les clefs os, arch et impl sont respectivement ‘linux’, ‘x86_64’ et ‘ghc’.

--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

La commande ci-dessous importe les métadonnées pour la dernière version du paquet HTTP Haskell sans inclure les dépendances de test et en spécifiant la valeur du drapeau ‘network-uri’ comme false :

guix import hackage -t -e "'((\"network-uri\" . false))" HTTP

Une version spécifique du paquet peut éventuellement être spécifiée en faisant suivre le nom du paquet par un arobase et un numéro de version comme dans l’exemple suivant :

guix import hackage mtl@2.1.3.1
stackage

L’importateur stackage est une enveloppe autour de l’importateur hackage. Il prend un nom de paquet, recherche la version incluse dans une version au support étendu (LTS) de Stackage et utilise l’importateur hackage pour récupérer les métadonnées. Remarquez que c’est à vous de choisir une version LTS compatible avec le compilateur GHC utilisé par Guix.

Les options spécifiques sont :

--no-test-dependencies
-t

N’inclut pas les dépendances requises uniquement par les suites de tests.

--lts-version=version
-l version

version est la version LTS désirée. Si elle est omise, la dernière version est utilisée.

--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

La commande ci-dessous importe les métadonnées pour le paquet HTTP Haskell inclus dans la version 7.18 de LTS Stackage :

guix import stackage --lts-version=7.18 HTTP
elpa

Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package Archive) (voir Packages dans The GNU Emacs Manual).

Les options spécifiques sont :

--archive=repo
-a repo

repo identifie le dépôt d’archive depuis lequel récupérer les informations. Actuellement les dépôts supportés et leurs identifiants sont :

  • - GNU, qu’on peut choisir avec l’identifiant gnu. C’est la valeur par défaut.

    Les paquets de elpa.gnu.org avec l’une des clefs contenues dans le porte-clef GnuPG share/emacs/25.1/etc/package-keyring.gpg (ou similaire) dans le paquet emacs (voir ELPA package signatures dans The GNU Emacs Manual).

  • - MELPA-Stable, qu’on peut sélectionner avec l’identifiant melpa-stable.
  • - MELPA, qu’on peut sélectionner avec l’identifiant melpa.
--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

crate

Importer les métadonnées du dépôt de paquets Rust crates.io crates.io, comme dans cet exemple :

guix import crate blake2-rfc

L’importeur crate vous permet aussi de spécifier une version de chaînes de caractères :

guix import crate constant-time-eq@0.1.0

Les options supplémentaires comprennent :

--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

opam

Importe les métadonnées du répertoire de paquets OPAM utilisé par la communauté OCaml.

Les options supplémentaires comprennent :

--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

--repo

Choisi le dépôt donné (un nom de dépôt). Les valeur possible sont :

  • opam, le dépôt opam par défaut,
  • coq ou coq-released, le dépôt stable pour les paquets coq,
  • coq-core-dev, le dépôt qui contient les versions de développement de coq,
  • coq-extra-dev, le dépôt qui contient les versions de développement des paquets coq.
go

Importe les métadonnées d’un module Go avec proxy.golang.org.

guix import go gopkg.in/yaml.v2

Il est possible d’utiliser la spécification d’un paquet avec le suffixe @VERSION pour importer une version spécifique.

Les options supplémentaires comprennent :

--recursive
-r

Traverse le graphe des dépendances du paquet amont donné et génère les expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.

--pin-versions

Lorsque vous utilisez cette option, l’importateur préserve les versions exactes des modules Go de dépendance au lieu d’utiliser leur dernière version disponible. C’est utile si vous essayez d’importer un paquet qui dépend récursivement de versions antérieures de lui-même pour la construction. Lorsque vous utilisez ce mode, le symbole du paquet sera créé en ajoutant la version à son nom, pour que plusieurs version du même paquet puissent coexister.

La structure du code de guix import est modulaire. Il serait utile d’avoir plus d’importateurs pour d’autres formats de paquets et votre aide est la bienvenue sur ce sujet (voir Contribuer).


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