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


7.9 Invoque guix graph

Les paquets et leurs dépendances forment un graphe, plus précisément un graphe orienté acyclique (DAG). Il peut vite devenir difficile d’avoir une représentation mentale du DAG d’un paquet, donc la commande guix graph fournit une représentation visuelle du DAG. Par défaut, guix graph émet un représentation du DAG dans le format d’entrée de Graphviz, pour que sa sortie puisse être passée directement à la commande dot de Graphviz. Elle peut aussi émettre une page HTML avec du code Javascript pour afficher un « digramme d’accords » dans un navigateur Web, grâce à la bibliothèque d3.js, ou émettre des requêtes Cypher pour construire un graphe dans une base de donnée de graphes supportant le langage de requêtes openCypher. La syntaxe générale est :

guix graph options paquet

Par exemple, la commande suivante génère un fichier PDF représentant le DAG du paquet pour GNU Core Utilities, qui montre ses dépendances à la compilation :

guix graph coreutils | dot -Tpdf > dag.pdf

La sortie ressemble à ceci :

Graphe de dépendance de GNU Coreutils

Joli petit graphe, non ?

Mais il y a plus qu’un seul graphe ! Celui au-dessus est concis : c’est le graphe des objets paquets, en omettant les entrées implicites comme GCC, libc, grep, etc. Il est souvent utile d’avoir ces graphes concis, mais parfois on veut voir plus de détails. guix graph supporte plusieurs types de graphes, qui vous permettent de choisir le niveau de détails :

package

C’est le type par défaut utilisé dans l’exemple plus haut. Il montre le DAG des objets paquets, sans les dépendances implicites. C’est concis, mais omet pas mal de détails.

reverse-package

Cela montre le DAG inversé des paquets. Par exemple :

guix graph --type=reverse-package ocaml

… crée le graphe des paquets qui dépendent explicitement d’OCaml (si vous vous intéressez aussi au cas où OCaml est une dépendance implicite, voir reverse-bag plus bas).

Remarquez que pour les paquets du cœur de la distribution, cela crée des graphes énormes. Si vous voulez seulement voir le nombre de paquets qui dépendent d’un paquet donnés, utilisez guix refresh --list-dependent (voir --list-dependent).

bag-emerged

C’est le DAG du paquet, avec les entrées implicites.

Par exemple, la commande suivante :

guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf

… montre ce graphe plus gros :

Graphe des dépendances détaillé de
GNU Coreutils

En bas du graphe, on voit toutes les entrées implicites de gnu-build-system (voir gnu-build-system).

Maintenant, remarquez que les dépendances de ces entrées implicites — c’est-à-dire les dépendances de bootstrap (voir Bootstrapping) — ne sont pas affichées, pour rester concis.

bag

Comme bag-emerged mais cette fois inclus toutes les dépendances de bootstrap.

bag-with-origins

Comme bag, mais montre aussi les origines et leurs dépendances.

reverse-bag

Cela montre le DAG inverse des paquets. Contrairement à reverse-package, il montre aussi les dépendance implicites. Par exemple :

guix graph -t reverse-bag dune

… crée le graphe des tous les paquets qui dépendent de Dune, directement ou indirectement. Comme Dune est une dépendance implicite de nombreux paquets via dune-build-system, cela montre un plus grand nombre de paquets, alors que reverse-package en montrerait très peu, voir aucun.

dérivation

C’est la représentation lu plus détaillée : elle montre le DAG des dérivations (voir Dérivations) et des éléments du dépôt. Comparé à la représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les scripts de construction, les correctifs, les modules Guile, etc.

Pour ce type de graphe, il est aussi possible de passer un nom de fichier .drv à la place d’un nom de paquet, comme dans :

guix graph -t derivation `guix system build -d my-config.scm`
module

C’est le graphe des modules de paquets (voir Modules de paquets). Par exemple, la commande suivante montre le graphe des modules de paquets qui définissent le paquet guile :

guix graph -t module guile | dot -Tpdf > module-graph.pdf

Tous les types ci-dessus correspondent aux dépendances à la construction. Le type de graphe suivant représente les dépendances à l’exécution :

references

C’est le graphe des references d’une sortie d’un paquet, telles que renvoyées par guix gc --references (voir Invoquer guix gc).

Si la sortie du paquet donnée n’est pas disponible dans le dépôt, guix graph essayera d’obtenir les informations sur les dépendances à travers les substituts.

Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu’un nom de paquet. Par exemple, la commande ci-dessous produit le graphe des références de votre profile (qui peut être gros !) :

guix graph -t references `readlink -f ~/.guix-profile`
referrers

C’est le graphe des référents d’un élément du dépôt, tels que renvoyés par guix gc --referrers (voir Invoquer guix gc).

Cela repose exclusivement sur les informations de votre dépôt. Par exemple, supposons que Inkscape est actuellement disponible dans 10 profils sur votre machine ; guix graph -t referrers inkscape montrera le graphe dont la racine est Inkscape avec 10 profils qui y sont liés.

Cela peut aider à déterminer ce qui empêche un élément du dépôt d’être glané.

Les options disponibles sont les suivante :

--type=type
-t type

Produit un graphe en sortie de type typetype doit être l’un des types au-dessus.

--list-types

Liste les types de graphes supportés.

--backend=moteur
-b moteur

Produit un graphe avec le moteur choisi.

--list-backends

Liste les moteurs de graphes supportés.

Actuellement les moteurs disponibles sont Graphviz et d3.js.

--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 graph -e '(@@ (gnu packages commencement) gnu-make-final)'
--system=système
-s système

Affiche le graphe pour système — p. ex. i686-linux.

Le graphe de dépendance des paquets est la plupart du temps indépendant de l’architecture, mais il y a quelques parties qui dépendent de l’architecture que cette option vous permet de visualiser.

--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.

On top of that, guix graph supports all the usual package transformation options (voir Options de transformation de paquets). This makes it easy to view the effect of a graph-rewriting transformation such as --with-input. For example, the command below outputs the graph of git once openssl has been replaced by libressl everywhere in the graph:

guix graph git --with-input=openssl=libressl

So many possibilities, so much fun!


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