===== le PKGBUILD ===== Le PKGBUILD est la recette de cuisine permettant de créer un package. Le PKGBUILD est un fichier texte utilisé par //makepkg// pour compiler les sources d'une archive en binaire installable simplement par //pacman//. == Pré-requis == Pour réaliser un PKGBUILD, vous devrez connaître les rouages de la compilation et l'édition de fichier texte. ==== Qu'est ce qu'un PKGBUILD et que contient-il ? ==== Un PKGBUILD est un fichier qui contient les informations sur un package. C'est un fichier au format texte. En voici un exemple : # $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $ # Maintainer: judd # Contributor: Judd Vinet pkgname=foo pkgver=0.99 # note: if the pkgver had been '0.99-10' then use an underscore. like '0.99_10' pkgrel=1 pkgdesc="short description of foo" arch=(i686 x86_64) url="http://www.foo.org" license=('GPL') groups= provides= depends=('qt' 'python') makedepends=('guile') conflicts=('yafoo') replaces=('mffoo') backup=('etc/foo/foo.conf') install=('foo.install') source=(http://www.foo.org/download/$pkgname-$pkgver.tar.gz) md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d35175bee593a7cc7d6205584a94d8625') build() { cd $startdir/src/$pkgname-$pkgver ./configure --prefix=/usr make || return 1 make prefix=$startdir/pkg/usr install } Analysons chaque champ : * ''# text'' : commentaires * ''# $Id'' : identification * ''# Maintainer'' : Responsable officiel * ''# Contributor'' : Première personne à avoir écrit le PKGBUILD * ''pkgname'' : Nom du package, à positionner sur le nom du logiciel, en minuscule et sans - ou espace * ''pkgver'' : Version du **logiciel** * ''pkgrel'' : Numéro de création du package. Doit être positionné à 1 la première fois et incrémenté à chaque modification majeure du **PKGBUILD** d'une **même** version d'un **même** logiciel * ''pkgdesc'' : Description succinte du logiciel. C'est celle qui apparaitra lorsque vous ferez ''pacman -Qi $pkgname'' * ''arch'' : Indication de l'architecture pour laquelle le programme peut-être compilé. * ''url'' : La page web relative au logiciel * ''license'' : La licence sous laquelle le logiciel est distribué * ''groups'' : Utile lorsque votre paquet doit apartenir à un "méta-paquet" (e.g. kdebase appartiens à kde) * ''provides'' : Si votre paquet fournit un autre logiciel (e.g. //kernel-scsi// fournit //kernel//) * ''depends'' : les dépendances nécessaires à l'exécution du logiciel * ''makedepends'' : les dépendances nécessaires à la compilation du logiciel * ''conflicts'' : certains paquets ne **peuvent** être utilisés simultanément, ce champ permet d'en tenir compte * ''replaces'' : Si votre paquet en remplace un autre * ''backup'' : les fichiers à restaurer lors de la désintallation * ''source'' : l'adresse des sources du documents. Il peut-être utile de réutiliser les champs //$pkgname// et //$pkgver// * ''md5sums'' : Somme de controle md5 des sources pour vérifier l'intégrité du paquet Expliquons les fonctions contenus dans le PKGBUILD : * build : Toutes les actions nécessaires pour compiler le paquet. (attention, ce n'est pas systématiquement ''./configure && make && make install'') Avec tout cela, vous êtes déjà en mesure de créer vos propres paquets. Le PKGBUILD est la **base** de **tout** paquet. Il existe aussi des fichiers d'installation. En voici un exemple: post_install() { /bin/true } post_upgrade() { /bin/true } pre_remove() { /bin/true } op=$1 shift $op "$@" \\ * post_install : script exécuté après l'installation. Il prends comme argument le numéro de version. * post_upgrade : script exécuté après la mise à jour. Il prends comme arguments le nouveau numéro de version et l'ancien. * pre_remove : script exécuté avant la désinstallation. Il prends comme argument le numéro de version. ===== La fonction de construction : build ===== Si vous n'êtes pas familier avec la compilation d'un programme, sachez que la plus part d'entre eux se construisent de la façon suivante : - Récupération des sources : wget http://www.foo.org/download/foo-0.99.tar.gz - Décompression : tar zxf foo-0.99.tar.gz && cd foo-0.99 - Configuration : ./configure [options] Si vous ne connaissez pas les options, ou que vous avez un doute, n'hésitez pas à utiliser l'aide : ''./configure --help''. - Compilation : make - Installation : make install Si vous avez le moindre doute, n'hésitez pas à lire le fichier **INSTALL** ou **README**. Jettons donc un oeil à la fonction //build// build() { cd $startdir/src/$pkgname-$pkgver ./configure --prefix=/usr make || return 1 make prefix=$startdir/pkg/usr install } On a supposé que le répertoire des sources était ''src/$pkgname-$pkgver'', ce qui n'est pas toujours le cas, cela peut-être ''src/$pkgname''. ''./configure --prefix=/usr'' permet d'indiquer que le répertoire d'installation devra être ''/usr''. make || return 1 permet de compiler le programme ou de sortir avec le code 1 en cas d'erreur. Et enfin, make prefix=$startdir/pkg/usr install permet d'installer le programme. Il faut noter que cette partie ce déroule dans un environnement ''fakeroot'', qui simule les droits de root dans une racine située dans ''$startdir''. Ceci permet donc de copier les fichiers dans le répertoire ''$startdir/pkg''. Le contenu de ce répertoire servira ensuite à créer le fichier **foo-0.99-1.pkg.tar.gz** Pour installer un tel paquet, il suffira de faire pacman -U foo-0.99-1.pkg.tar.gz((''sed s/pacman/yaourt/'')) //Je vous recommande vivement de créer un répertoire distinct pour chaque paquet que vous créez localement dans ''/var/abs/local''// ==== Que contient un package ==== Un package est un fichier (e.g. ''//toto//.pkg.tar.gz''). Ce fichier n'est ni plus ni moins qu'une archive contenant * les fichiers à installer (à copier) * .PKGINFO : contient les dépendances du paquets * .FILELIST : contient la liste des fichiers (utile en cas de désinstallation) * .INSTALL : nécessaire dans certains cas pour l'installation et la désinstallation \\ Page traduite depuis [[http://wiki.archlinux.org/index.php/ABS_-_The_Arch_Build_System]]\\ ===== En savoir d'avantage ===== * [[:howto:archlinux:man_pkgbuild|page man francophone de PKGBUILD.5]] * [[:howto:archlinux:archpackagingstandards|Standard de création de paquetage pour Arch Linux]] ====== Crédit ====== --- //[[vincentxavier@archlinux.fr|vincentxavier]] 26/11/2006 19:02//