per page, with , order by , clip by
Results of 0 - 1 of about 0 (0.000 sec.)
Définition des paquets (Manuel de référence de GNU Guix)
@digest: 9b0ad5450dd9cae7921b97fcddb0bdc5
@id: 74083
@mdate: 2019-05-19T21:18:25Z
@size: 22591
@type: text/html
content-type: text/html; charset=utf-8
description: Définition des paquets (Manuel de référence de GNU Guix)
distribution: global
generator: makeinfo
keywords: Définition des paquets (Manuel de référence de GNU Guix)
resource-type: document
#keywords: libressl (35320), remplacements (28421), paquet (19349), renvoie (18956), reecrit (18382), paquets (12837), synonyme (12304), graphe (10669), invoquer (9827), entrees (9769), remplace (9121), champ (7896), openssl (7413), dependances (7242), derivation (6824), construction (6118), cible (6035), voir (5690), specifie (4970), definis (4522), systeme (3909), commande (3827), objet (3822), systemes (3487), maniere (3345), base32 (3321), rewriting (3252), fonction (3209), precedent (2733), matieres (2495), procedure (2184), exemple (2130)
Suivant: Systèmes de construction , Précédent: Modules de paquets , Monter: Interface de programmation [ Table des matières ][ Index ] 6.2 Définition des paquets L'interface de haut-niveau pour les définitions de paquets est implémentée dans les modules (guix packages) et (guix build-system) . Par exemple, la définition du paquet, ou la recette , du paquet GNU Hello ressemble à cela : (define-module (gnu packages hello) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (guix licenses) #:use-module (gnu packages gawk)) (define-public hello (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) (arguments '(#:configure-flags '("--enable-silent-rules"))) (inputs `(("gawk" ,gawk))) (synopsis "Hello, GNU world: An example GNU package") (description "Guess what GNU Hello prints!") (home-page "https://www.gnu.org/software/hello/") (license gpl3+))) Sans être un expert Scheme, le lecteur peut comprendre la signification des différents champs présents. Cette expression lie la variable hello à un objet <package> , qui est essentiellement un enregistrement (voir Scheme records dans GNU Guile Reference Manual ). On peut inspecter cet objet de paquet avec les procédures qui se trouvent dans le module (guix packages) ; par exemple, (package-name hello) renvoie — oh surprise ! — "hello" . Avec un peu de chance, vous pourrez importer tout ou partie de la définition du paquet qui vous intéresse depuis un autre répertoire avec la commande guix import (voir Invoquer guix import ). Dans l'exemple précédent, hello est défini dans un module à part, (gnu packages hello) . Techniquement, cela n'est pas strictement nécessaire, mais c'est pratique : tous les paquets définis dans des modules sous (gnu packages …) sont automatiquement connus des outils en ligne de commande (voir Modules de paquets ). Il y a quelques points à remarquer dans la définition de paquet précédente : Le champ source du paquet est un objet <origin> (voir Référence des origines , pour la référence complète). Ici, on utilise la méthode url-fetch de (guix download) , ce qui signifie que la source est un fichier à télécharger par FTP ou HTTP. Le préfixe mirror://gnu demande à url-fetch d'utiliser l'un des miroirs GNU définis dans (guix download) . Le champ sha256 spécifie le hash SHA256 attendu pour le fichier téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du fichier. La forme (base32 …) introduit a représentation en base32 du hash. Vous pouvez obtenir cette information avec guix download (voir Invoquer guix download ) et guix hash (voir Invoquer guix hash ). Lorsque cela est requis, la forme origin peut aussi avec un champ patches qui liste les correctifs à appliquer et un champ snippet qui donne une expression Scheme pour modifier le code source. Le champ build-system spécifie la procédure pour construire le paquet (voir Systèmes de construction ). Ici, gnu-build-system représente le système de construction GNU familier, où les paquets peuvent être configurés, construits et installés avec la séquence ./configure && make && make check && make install habituelle. Le champ arguments spécifie des options pour le système de construction (voir Systèmes de construction ). Ici il est interprété par gnu-build-system comme une demande de lancer configure avec le drapeau --enable-silent-rules . Que sont ces apostrophes ( ' ) ? C'est de la syntaxe Scheme pour introduire une liste ; ' est synonyme de la fonction quote . Voir quoting dans GNU Guile Reference Manual , pour des détails. Ice la valeur du champ arguments est une liste d'arguments passés au système de construction plus tard, comme avec apply (voir apply dans GNU Guile Reference Manual ). La séquence dièse-deux-points ( #: ) définie un mot-clef Scheme (voir Keywords dans GNU Guile Reference Manual ), et #:configure-flags est un mot-clef utilisé pour passer un argument au système de construction (voir Coding With Keywords dans GNU Guile Reference Manual ). Le champ inputs spécifie les entrées du processus de construction — c.-à-d. les dépendances à la construction ou à l'exécution du paquet. Ici on définie une entrée nommée "gawk" dont la valeur est la variable gawk ; gawk est elle-même liée à un objet <package> . De nouveau, ` (un accent grave, synonyme de la fonction quasiquote ) nous permet d'introduire une liste littérale dans le champ inputs , tandis que , (une virgule, synonyme de la fonction unquote ) nous permet d'insérer une valeur dans cette liste (voir unquote dans GNU Guile Reference Manual ). Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas besoin d'être spécifiés en tant qu'entrées ici. À la place, le gnu-build-system est en charge de s'assurer qu'ils sont présents (voir Systèmes de construction ). Cependant, toutes les autres dépendances doivent être spécifiées dans le champ inputs . Toute dépendance qui ne serait pas spécifiée ici sera simplement indisponible pour le processus de construction, ce qui peut mener à un échec de la construction. Voir Référence des paquets , pour une description complète des champs possibles. Lorsqu'une définition de paquet est en place, le paquet peut enfin être construit avec l'outil en ligne de commande guix build (voir Invoquer guix build ), pour résoudre les échecs de construction que vous pourriez rencontrer (voir Débogage des échecs de construction ). Vous pouvez aisément revenir à la définition du paquet avec la commande guix edit (voir Invoquer guix edit ). Voir Consignes d'empaquetage , pour plus d'informations sur la manière de tester des définitions de paquets et Invoquer guix lint , pour des informations sur la manière de vérifier que la définition respecte les conventions de style. Enfin, voir Canaux pour des informations sur la manière d'étendre la distribution en ajoutant vos propres définitions de paquets dans un « canal ». Finalement, la mise à jour de la définition du paquet à une nouvelle version amont peut en partie s'automatiser avec la commande guix refresh (voir Invoquer guix refresh ). Sous le capot, une dérivation qui correspond à un objet <package> est d'abord calculé par la procédure package-derivation . Cette dérivation est stockée dans un fichier .drv dans /gnu/store . Les actions de construction qu'il prescrit peuvent ensuite être réalisées par la procédure build-derivation (voir Le dépôt ). Procédure Scheme : package-derivation store package [ system ] Renvoie l'objet <derivation> du paquet pour le système (voir Dérivations ). paquet doit être un objet <package> valide et système une chaîne indiquant le type de système cible — p.ex. "x86_64-linux" pour un système GNU x86_64 basé sur Linux. dépôt doit être une connexion au démon, qui opère sur les dépôt (voir Le dépôt ). De manière identique, il est possible de calculer une dérivation qui effectue une compilation croisée d'un paquet pour un autre système : Procédure Scheme : package-cross-derivation store paquet cible [ système ] renvoie l'objet <derivation> du paquet construit depuis système pour cible . cible doit être un triplet GNU valide indiquant le matériel cible et le système d'exploitation, comme "mips64el-linux-gnu" (voir Specifying Target Triplets dans Autoconf ). On peut manipuler les paquets de manière arbitraire. Une transformation utile est par exemple la réécriture d'entrées où l'arbre des dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par d'autres : Procédure Scheme : package-input-rewriting replacements [ nom-réécrit ] Renvoie une procédure qui, lorsqu'on lui donne un paquet, remplace des dépendances directes et indirectes (mais pas ses entrées implicites) en fonction de remplacements . remplacements est une liste de paires de paquets ; le premier élément de chaque pair est le paquet à remplacer, le second son remplaçant. De manière facultative, nom-réécrit est une procédure à un argument qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir réécrit. Regardez cet exemple : (define libressl-instead-of-openssl ;; Cette procédure remplace OPENSSL par LIBRESSL, ;; récursivement. (package-input-rewriting `((,openssl . ,libressl)))) (define git-with-libressl (libressl-instead-of-openssl git)) Ici nous définissons d'abord une procédure de réécriture qui remplace openssl par libressl . Ensuite nous l'utilisons pour définir une variante du paquet git qui utilise libressl plutôt que openssl . cela est exactement ce que l'option en ligne de commande --with-input fait (voir --with-input ). La variante suivante de package-input-rewriting peut repérer les paquets à remplacer par nom à la place de leur identité. Procédure Scheme : package-input-rewriting/spec remplacements Renvoie une procédure qui, étant donné un paquet, applique les remplacements à tous le graphe du paquet (en dehors des entrées implicites). remplacements est une liste de paires de spécifications et de procédures ; chaque spécification est une spécification de paquet comme "gcc" ou "guile@2" , et chaque procédure prend un paquet correspondant et renvoie un remplaçant pour ce paquet. L'exemple ci-dessus pourrait être réécrit de cette manière : (define libressl-instead-of-openssl ;; Remplace tous les paquets nommés « openssl » par LibreSSL. (package-input-rewriting/spec `(("openssl" . ,(const libressl))))) Le différence clef est que, cette fois-ci, les paquets correspondent à la spécification et non à l'identité. En d'autres termes, tout paquet dans le graphe qui est appelé openssl sera remplacé. Une procédure plus générique pour réécrire un graphe de dépendance d'un paquet est package-mapping : elle supporte n'importe quel changement dans les nœuds du graphe. Procédure Scheme : package-mapping proc [ cut? ] Renvoie une procédure qui, avec un paquet, applique proc sur tous les paquets dont il dépend et renvoie le paquet qui en résulte. La procédure arrête la récursion là où cut? renvoie vrai pour un paquet donné. • Référence des paquets : Le type de donnée des paquets. • Référence des origines : Le type de données d'origine. Suivant: Systèmes de construction , Précédent: Modules de paquets , Monter: Interface de programmation [ Table des matières ][ Index ] ...
http://www.gnu.org/savannah-checkouts/gnu/guix/manual/fr/html_node/Definition-des-paquets.html - [detail] - [similar]
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 213328 documents and 1081062 words.