===== 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//