PKGBUILD(5) Manuel de Pacman PKGBUILD(5) NOM PKGBUILD - fichier descriptif de construction de paquetage ArchLinux SYNOPSIS PKGBUILD DESCRIPTION L'objectif de cette page de manuel est de decrire les regles concernant les fichiers PKGBUILD. Une fois que son fichier PKGBUILD est ecrit, le paquetage est construit avec makepkg et installe avec pacman. Note Il y a un exemple PKGBUILD, utile comme modele, dans /usr/share/pacman ainsi que d'autres fichiers modeles, tel le script d'install . Vous pouvez recopier le fichier PKGBUILD.proto dans un autre repertoire de production de paquet et l'adapter a vos besoins. OPTIONS ET DIRECTIVES Cette page contient la liste des options et directives standards utilisables dans un PKGBUILD. Elles sont toutes reconnues et interpretees par makepkg et un certain nombre seront transferees litteralement dans le paquetage final.Un PKGBUILD fonctionnel doit au minimum comporter les champs pkgname, pkgver, pkgrel and arch. Si vous avez besoin de creer vos propres variables pour la compilation, il est recommande de les faire preceder du prefixe _ (souligne). Cela evitera toute possibilite de conflit avec les variables internes a makepkg. Par exemple, pour stocker la version du noyau dans une variable, utilisez quelque chose comme `$_basekernver`. pkgname (liste) Soit le nom d'un paquetage, soit une liste de noms pour les paquetages repartis. Les caracteres valides pour les items de cette liste sont les caracteres alphanumeriques, ainsi que n'importe lesquels des caracteres suivants : "@ . _ + -". De plus, les noms ne doivent pas commencer par un tiret ou un point. pkgver La version du logiciel telle que l'a publiee l'auteur (e.g., 2.7.1). La variable ne doit contenir ni deux-points, ni barre oblique, ni tiret ni espace. La variable pkgver peut etre automatiquement mise a jour en fournissant une fonction pkgver() dans PKGBUILD qui affiche le nouveau numero du paquetage. Elle est executee a la fin du telechargement, de l'extraction des sources et de l'execution de la fonction prepare() (s'il y en a une), elle peut donc utiliser ces fichiers pour determiner le nouveau pkgver. C'est tres utile avec des sources de systemes a controle de version (voir ci-apres). pkgrel C'est le numero de version, specifique a la distribution Arch Linux. Cela permet notamment au mainteneur du paquetage de mettre a jour les options de configuration du paquetage. Un pkgrel est typiquement a 1 dans sa premiere diffusion et est incremente a chaque mise a jour intermediaire du PKGBUILD. C'est un numero, eventuellement complete d'un second numero, avec un point de separation entre les deux, de la forme x.y). epoque Utilise pour forcer la mise a jour du paquetage par pacman, meme si le numero de version ne necessite pas de mise a jour. C'est pratique quand le type de numero de version d'un paquetage change (ou est alphanumerique). Voir pacman(8) pour plus d'informations concernant la comparaison de version. pkgdesc Il s'agit ici en principe d'une breve description du paquetage et de ses fonctionnalites. Essayez de faire la description sur une seule ligne de texte (NdT : environ 100 caracteres maximum). url Ce champ contient l'URL optionnel qui peut etre associe avec l'empaquetage. C'est simplement l'adresse internet officielle du projet. licence (table) Ce champ precise la licence du paquetage. Les licences les plus utilisees sont dans /usr/share/licenses/common. Si vous voyez la licence du paquetage ici, faites en simplement reference dans le champ de la licence (ex: license=('GPL')). Si le paquetage est distribue avec une licence non trouvee dans /usr/share/licenses/common, vous devrez inclure la licence dans le paquetage et renseigner license=('custom') ou license=('custom:LicenseName'). La licence doit etre placee dans $pkgdir/usr/share/licenses/$pkgname/ lors de la construction du paquetage. Si plusieurs licences sont applicables pour le paquetage, listez les toutes : license=('GPL' 'FDL'). install Precise le fichier special d'installation qui n'est pas inclus dans le paquetage. Celui ci est dans le meme repertoire que le PKGBUILD et sera copie dans le paquetage par makepkg. Il n'est pas necessaire de l'inclure dans la variable source. (ex : install=$pkgname.install). changelog Fournit le fichier-journal des modifications a inclure dans le paquetage. Ce fichier devrait se terminer par un seul retour-chariot. Ce fichier doit etre place dans meme repertoire que le PKGBUILD et sera recopie dans le paquetage par makepkg. Il n'est pas necessaire de l'inclure dans la liste des sources (ex : install=pkgname.install). source (ligne) La ligne source contient les fichiers requis pour la construction du paquetage. Les fichiers sources doivent etre dans le meme repertoire que le PKGBUILD, sinon ils doivent avoir leur URL complete. Pour simplifier la maintenance de PKGBUILD, utilisez les variables $pkgname et $pkgver lorsque vous indiquez l'emplacement du telechargement. Toute archive compressee sera automatiquement decompactee, a moins d'apparaitre dans la liste noextract presentee ci-apres. Additional architecture-specific sources can be added by appending an underscore and the architecture name e.g., source_x86_64=(). There must be a corresponding integrity array with checksums, e.g. cksums_x86_64=(). Il est aussi possible de modifier le nom du fichier telecharge, ce qui peut rendre service avec des URL non-classiques ou pour recuperer differentes sources portant le meme nom. La syntaxe est : source=('nom::url')&. makepkg peut aussi prendre en charge la compilation de versions de developpement en integrant des fichiers sources telecharges de systemes de controle de version (VCS)&. Pour plus d'information, voir ci-apres INTEGRER LES SOURCES D'UN VCS. La commande makepkg reconnait les fichiers d'une liste de sources portant les extensions &.sig, .sign ou .asc comme des signatures PGP et elle s'en servira automatiquement pour verifier l'integrite des fichiers sources correspondants. validpgpkeys (liste) Liste d'empreintes PGP. Si cette liste n'est pas vide, makepkg n'acceptera que les signatures des clefs enumerees ici et ne tiendra pas compte des degres de securite des clefs du trousseau. Si le fichier source etait authentifie par une sous-clef, makepkg examinera quand meme sa clef primaire`&. Seules les empreintes de clef completes sont acceptees. Elles doivent etre en lettres majuscules et ne doivent pas contenir d'espace. noextract (liste) Les noms de fichiers presents dans cette liste doivent apparaitre dans la ligne qui suit le mot-clef source, vu ci-dessus. Les fichiers listes ici ne seront pas extraits avec le reste des fichiers sources. Cela sert pour les paquetages utilisant directement des donnees compressees. cksums (array) This array contains CRC checksums for every source file specified in the source array (in the same order). makepkg will use this to verify source file integrity during subsequent builds. If SKIP is put in the array in place of a normal hash, the integrity check for that source file will be skipped. To easily generate cksums, run "makepkg -g >> PKGBUILD". If desired, move the cksums line to an appropriate location. Note that checksums generated by "makepkg -g" should be verified using checksum values provided by the software developer. md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays) Alternative integrity checks that makepkg supports; these all behave similar to the cksums option described above. To enable use and generation of these checksums, be sure to set up the INTEGRITY_CHECK option in makepkg.conf(5). groups (liste) Liste de noms symboliques representant des groupes de paquetages, ce qui vous permet d'installer plusieurs paquetages a la fois avec un seul champ. Par exemple, vous pourriez installer tous les paquetages KDE en installant le groupe kde. arch (liste) Definit les architectures pour lesquelles le paquetage est valable (par ex., arch=('i686' 'x86_64')). Les paquetages qui ne comportent aucun fichier dependant d'une architecture devraient utiliser arch=('any'). Les caracteres autorises pour les elements de cette liste sont les caracteres alphanumeriques et "_". backup (liste) Une liste de noms, depourvus de barre-oblique (slash) a l'initiale, qu'il faudra sauvegarder si le paquetage est supprime ou mis a jour. Est generalement utilise pour les paquetages placant des fichiers de configuration dans /etc. Voir CONFIGURATION dans la page man de pacman(8) pour de plus amples renseignements. depends (liste) Une liste de paquetages desquels depend le paquetage compile et installe. Les paquetages de cette liste doivent etre entoures de simples guillemets et doivent contenir au moins le nom du paquetage. Vous pouvez aussi inclure la version requise sous cette forme : nom<>version, ou <> est un des trois comparateurs : >= (superieur ou egal a), <= (inferieur ou egale a), ou = (egal a). Si le nom de la dependance se trouve etre une bibliotheque (terme se terminant par .so), makepkg essaiera de trouver un binaire qui depend de la bibliotheque dans le paquetage et rajoutera le numero de version requis pour ce binaire. Le fait d'ajouter un numero de version a la main desactive cette detection automatique. On peut ajouter des dependances d'architecture supplementaires en completant d'un caractere souligne et du nom de l'architecture, par ex., depends_x86_64=(). makedepends (liste) Une liste de paquetages dont depend le paquetage a compiler, mais non indispensables a son fonctionnement. Le format de la liste des paquetages est celui du champ depends. On peut conditionner l'installation (makedepends) par la presence d'autres architectures en completant d'un caractere souligne et du nom de l'architecture, par ex., makedepends_x86_64=(). checkdepends (liste) Une liste de paquetages dont depend le paquetage pour passer les tests de bon fonctionnement, mais non indispensables au fonctionnement de celui-ci. Ces dependances ne sont prises en compte que si la fonction check() est presente et que makepkg doit la lancer. On peut ajouter des verifications suplementaires liees a une architecture en ajoutant un caractere souligne suivi du nom de l'architecture, par ex&., checkdepends_x86_64=(). optdepends (ligne) Une liste de paquetages (avec les explications) qui ne sont pas essentiels pour une utilisation sommaire, mais qui peuvent etre utiles a l'utilisation de ce paquetage. optdepends est utilise uniquement pour information et n'est pas utilise par pacman pendant la resolution des dependances. La presentation devra ressembler a ceci : optdepends=('python: for library bindings') Il est possible d'ajouter des options en fonction d'une architecture particuliere en ajoutant le nom de cetta architecture precedee d'un caractere souligne, par ex., optdepends_x86_64=(). conflicts (ligne) Une liste de paquetages qui entrent en conflit avec ce paquetage (c'est-a-dire qu'ils ne peuvent pas cohabiter sur le systeme). Cette variable repond aux memes exigences que le champ depends hormis que vous ne pouvez pas preciser les versions. Il est possible de declarer des conflits lies a une architecture particuliere en ajoutant le nom de cette architecture precedee d'un caractere souligne. provides (ligne) Une liste d'"didentifiants virtuels" propres au paquetage. Cela permet qu'un paquetage evoque une liste de dependances plutot que son propre nom directement. Par exemple, le paquetage dcron peut se designer par le pseudonyme cron : tous les paquetages vont dependre de cron au lieu de dcron OU fcron. Les identifiants peuvent aussi incorporer un code de version. Par exemple, dcron peut fournir cron 2.0 pour satisfaire la dependance cron>=2.0 demandee par un autre paquetage. Les solutions faisant intervenir les operateurs '>' et '<' ne sont pas valables : il faut donner les noms de version des paquetages explicitement. Si le nom fournit se trouve etre celui d'une bibliotheque (se termine par .so), makepkg essaiera de trouver la bibliotheque dans le paquetage et ajoutera le numero de version correct. Le fait d'ajouter le numero de version soi-meme desactive automatiquement cet automatisme. On peut ajouter d'autres actions specifiques a une architecture en ajoutant le nom de cette architecture precede d'un caractere souligne, par ex., provides_x86_64=(). replaces (ligne) C'est une liste de paquetages que le paquetage devrait remplacer, il peut etre utilise pour remplacer des paquetages renommes/retravailles. Par exemple, si le paquetage nomme j2re est renomme en jre, cette directive permet aux futures mises a jour de continuer meme si le paquetage est modifie. Sysupgrade est pour l'instant la seule operation de pacman qui se sert de ce champs. Une simple synchronisation ou une mise a jour ne s'en sert pas. On peut conditionner des substitutions par la presence d'une certaine architecture sur le systeme, en ajoutant le nom de cette architecture, precede d'un caractere souligne, par ex. replaces_x86_64=(). options (array) Ce champ permet d'outrepasser les fonctionnalites par defaut de makepkg lors de la creation du paquetage. Pour ajouter une option, vous devez ajouter une des options suivantes dans la variable options. Pour inverser le comportement par defaut, mettez un "!" devant l'option. Precisez les options uniquement si vous souhaitez outrepasser les options de makepkg.conf(5). NOTE : force est une option speciale utilise pour le PKGBUILD(5), a n'utiliser seulement si vous savez ce que vous faites. strip Permet d'alleger le code binaire et les bibliotheques des mnemoniques d'edition de lien. Si toutefois vous utilisez frequemment un debuggeur pour les programmes ou les bibliotheques, il peut etre utile de desactiver cette option. docs Conserver les repertoires de documentation. Si vous souhaitez supprimer ces repertoires, placez !docs dans ce champ. libtool Conserver les fichiers libtool (.la) dans le paquetage. Precisez !libtool pour les supprimer. staticlibs Conserver les fichiers libtool (.la) dans le paquetage. Precisez !staticlibs pour les supprimer (s'ils sont remplaces par un equivalent). emptydirs Conserve les repertoires vides dans le paquetage. zipman Compresse les pages man et info avec gzip. ccache Permet d'utiliser ccache pour la compilation. Plus pratique dans sa forme negative !ccache pour les paquetages qui ont des problemes de compilation avec ccache. distcc Permet d'utiliser distcc pour la compilation. Plus pratique dans sa forme negative !distcc avec les paquetages qui ont des problemes de compilation avec distcc. buildflags Permet d'utiliser un makeflags particulier indique dans makepkg.conf(5) pendant la compilation. Plus pratique dans sa forme negative !makeflags avec les paquetages qui ont des problemes de compilation avec les makeflags personnalises comme -j2 (ou superieur). makeflags Permet d'utiliser un makeflags utilisateur pendant la compilation, comme explique dans dans makepkg.conf(5). Plus pratique dans sa forme negative !makeflags avec les paquetages qui ont des problemes de compilation avec les makeflags personnalises comme -j2 (ou superieur). debug Ajoute les indicateurs de debuggage utilisateur (DEBUG_CFLAGS, DEBUG_CXXFLAGS) aux indicateurs de compilation comme explique dans makepkg.conf(5). Employe en conjonction avec l'option `strip', cree un paquetage distinct contenant les symboliques de debuggage. lto Enable building packages using link time optimization. Adds -flto to both CFLAGS and CXXFLAGS. FONCTIONS DE PREPARATION DE PAQUETAGE Outre les directives precedentes, les PKGBUILDs ont besoin d'un ensemble de fonctions leur donnant les instructions necessaires pour construire et installer les paquetages. Au minimum le PKGBUILD doit contenir une fonction package() qui installe tous les fichiers du paquetage dans le repertoire convenable, et accessoirement des fonctions prepare(), build() et check() pour creer les executables. Ces fonctions sont directement lues et executees par makepkg, donc tout ce que bash ou le systeme a deja interprete est utilisable dans ces fonctions. S'il faut en plus des commandes exotiques, verifier qu'elles apparaissent dans la liste `makedepends`. Si vous creez vos propres variables pour l'une quelconque de ces fonctions, il est recommande d'utiliser un mot-clef Bash `local` pour limiter leur portee a chacune de ces fonctions. Fonction package() La fonction package() sert a installer des fichiers dans ce qui sera le repertoire-racine du paquetage une fois compile. Elle est executee apres toutes les fonctions donnees ci-apres. L'etape de paquetage est executee dans un repertoire-racine temporaire (fakeroot) pour donner les permissions correctes au paquetage compile. Toutes les autres fonctions seront lancees quand l'utilisateur execute makepkg. Fonction prepare() On peut specifier une fonction prepare() optionnelle qui effectue les operations de preparation des sources prealablement a la compilation. Cette fonction est executee une fois que l'extraction des sources est terminee et avant la fonction build(). La fonction prepare() n'est pas executee si l'etape d'extraction des sources a ete sautee. Fonction build() The optional build() function is used to compile and/or adjust the source files in preparation to be installed by the package() function. Fonction check() Il est possible de specifier une fonction check() optionnelle pour lancer la batterie de tests du paquetage. Cette fonction est lancee entre les fonctions build() et package(). Verifiez que toutes les commandes exotiques apparaissent bien dans la liste des dependances de verification. Toutes les variables precedentes comme `pkgname` et `pkgver` sont utilisables dans la fonction build. En complement, makepkg definit trois variables a utiliser pendant la compilation et l'installation : srcdir Cela pointe sur le repertoire ou makepkg extrait ou copie tous les fichiers sources. Toutes ces fonctions qui viennent d'etre definies sont executees initialement depuis le repertoire $srcdir pkgdir Cela pointe sur le repertoire ou makepkg conditionne les paquetages installes. Ce repertoire va devenir le repertoire racine du paquetage. Cete variable ne devrait etre utilisee que dans la fonction package(). startdir Option desuete, a proscrire desormais. Contenait le chemin absolu ou PKGBUILD est situe, lequel correspondait le plus souvent a la sortie de `$(pwd)` quand makepkg est lance. SCISSION DE PAQUETAGE makepkg permet la construction de plusieurs paquetages a partir d'un simple PKGBUILD. Il faut pour cela attribuer une liste de noms de paquetages a la variable pkgname. Chaque paquetage doit appeler une fonction de compilation propre, nommee package_foo(), ou `foo` est le nom du paquetage scinde. Toutes les options et les directives pour les paquetages scindes sont par defaut celles du PKGBUILD. Cependant certaines peuvent etre forcee pour chaque fonction de construction de paquetage scinde. Les variables suivantes peuvent etre forcees : `pkgdesc`, `licence`, `groups`, `depends`, `optdepends`, `provides`, `conflicts`, `replaces`, `backup`, `options`, `install`et `changelog`. Observez que makepkg ne tient pas compte des dependances des paquetages scindes lorsqu'il verifie si les dependances sont en place avant la compilation avec --syncdeps. Tous les paquetages necessaires pour produire chacun des paquetages scindes doivent etre explicites dans les dependances globales et les listes de dependances de compilation makedepends. Une directive generale optionnelle est utilisable lors de la construction de paquetage scinde : pkgbase Le nom utilise pour designer le groupe de paquetage dans l'affichage par makepkg et pour le nom des tarball des sources. Si ce n'est pas indique, le premier nom de la variable `pkgname` est utilise. Les caracteres valides pour les items de cette liste sont les caracteres alphanumeriques, ainsi que n'importe lesquels des caracteres suivants : "@ . _ + -". De plus, les noms ne doivent pas commencer par un tiret ou un point. SCRIPT D'INSTALLATION / MISE A JOUR / SUPPRESSION Pacman a la faculte de conserver et d'executer des scripts specifiques par paquetage quand il installe, desinstalle ou met a jour un paquetage. Cela permet au paquetage de se configurer tout seul apres l'installation et de faire exactement le contraire lors de sa desinstallation. La duree exacte d'execution du script depend de la nature de chaque operation, et devrait etre previsible. Notez qu'au cours d'une operation de mise a jour, aucune des fonctions d'installation ou de suppression ne sera appelee. On comunique aux scripts un ou deux noms de version complets, un nom de version complet etant soit pkgver-pkgrel, soit (si epoque n'est pas nul) epoque:pkgver-pkgrel. pre_install Script ance avant l'extraction des fichiers. Un argument est passe : nouvelle version du paquetage. post_install Script lance apres l'extraction des fichiers. Retourne un seul argument : la nouvelle version du paquetage. pre_upgrade Script lance avant l'extraction des fichiers. Deux arguments de type chaine de caracteres sont transmis : nouvelle version du paquetage, version ancienne du paquetage. post_upgrade Script lance apres l'extraction des fichiers. Transmet deux chaines de caracteres en argument : le nom de version complet de la nouvelle version, puis celui de l'ancienne version du paquetage. pre_remove Script lance avant la suppression des fichiers. Un argument est passe : ancienne version du paquetage. post_remove Script lance apres la suppression des fichiers. Un argument est passe : ancienne version du paquetage. Pour utiliser cette option, vous devez creer un fichier pkgname.install et mettez le dans le meme repertoire que le script PKGBUILD. Utilisez la variable install : install=pkgname.install Le script d'installation n'a pas besoin d'etre specifie dans le champ source. Un modele de fichier install est disponible dans l'arborescence ABS. INTEGRER LES SOURCES D'UN VCS Building a developmental version of a package using sources from a version control system (VCS) is enabled by specifying the source in the form: source=('directory::url#fragment?query') Currently makepkg supports the Bazaar, Git, Subversion, Fossil and Mercurial version control systems. For other version control systems, manual cloning of upstream repositories must be done in the prepare() function. L'URL source comporte quatre composantes : directory (optionnel) Precise le nom de repertoire ou makepkg recopie les sources du VCS. url L'URL du depot VCS, qui doit comporter le nom du VCS dans le protocole URL, afin que makepkg puisse l'identifier comme source de VCS. Si le protocole n'incorpore pas de lui-meme le nom du VCS, on peut l'ajouter en prefixant l'URL d'un vcs+. Par exemple, avec un depot Git via un protocole HTTP, l'URL source serait de la forme : git+https://.... fragment (optional) Allows specifying a revision number or branch for makepkg to checkout from the VCS. A fragment has the form type=value, for example to checkout a given revision the source line would be source=(url#revision=123). The available types depends on the VCS being used: bzr revision (voir 'bzr help revisionspec' pour les details) fossil branch, commit, tag git branch, commit, tag hg branch, revision, tag svn revision query (optionnel) Permet d'indiquer s'il faut verifier les certificats PGP des revisions d'un depot VCS. La ligne source devrait avoir le format source(url#fragment?signed) ou source=(url?signed#fragment). N'est pour l'instant supporte que par Git. EXEMPLE Voici un exemple de PKGBUILD pour le paquetage patch. Pour davantage d'exemples, examinez les fichiers de compilation de votre distribution. Pour les utilisateurs d'Arch linux, consultez l'arborescence ABS (Arch Build System). # Maintainer: Joe User pkgname=patch pkgver=2.7.1 pkgrel=1 pkgdesc="A utility to apply patch files to original sources" arch=('i686' 'x86_64') url="https://www.gnu.org/software/patch/patch.html" license=('GPL') groups=('base-devel') depends=('glibc') makedepends=('ed') optdepends=('ed: for "patch -e" functionality') source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig}) md5sums=('e9ae5393426d3ad783a300a338c09b72' 'SKIP') build() { cd "$srcdir/$pkgname-$pkgver" ./configure --prefix=/usr make } package() { cd "$srcdir/$pkgname-$pkgver" make DESTDIR="$pkgdir/" install } VOIR AUSSI makepkg(8), pacman(8), makepkg.conf(5) Consulter le site internet de pacman a l'adresse https://.archlinux.org/pacman/ pour de nouvelles informations sur pacman et ses outils associes. BOGUES Bogues ? C'est une blague ; il n'y a pas de bogues dans ce logiciel. Mais s'il y en a, envoyez un rapport de bogue contenant autant de details que possible dans la section Pacman du systeme de suivi de bogues de Arch Linux. AUTEURS Developpeurs actuels : o Allan McRae o Andrew Gregory o Eli Schwartz o Morgan Adamiec Contributeurs anterieurs majeurs : o Judd Vinet o Aurelien Foret o Aaron Griffin o Dan McGee o Xavier Chantry o Nagy Gabor o Dave Reisner Pour des contributeurs supplementaires, utiliser git shortlog -s sur le depot pacman.git. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Marc Poiroud et Jean-Jacques Brioist Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pacman 6.0.2 6 fevrier 2024 PKGBUILD(5)