PKGBUILD
De ArchwikiFR.
Un PKGBUILD est un fichier décrivant la manière de construire un paquet Arch Linux.
Il s'agit d'un fichier bash qui généralement comporte trois parties:
- Les informations sur le paquet (une liste de variables).
- La fonction build() permettant de compiler le programme.
- La fonction package() ou un ensemble de fonction package_pkg1(), package_pkg2()... s'il s'agit de paquet splitté.
Les prototypes pour les différents fichiers (PKGBUILD, y compris pour un paquet splitté, .install) se situent dans /usr/share/pacman/.
Un paquet est construit à l'aide de makepkg et devrait se conformer aux standards d'empaquetage d'Arch, particulièrement si vous comptez le partager.
Sommaire |
Fichier PKGBUILD
Variables
- pkgbase: Nom désignant le paquet ou le groupe de paquet en cas de PKGBUILD pour paquets splittés. Pour un PKGBUILD standard, c'est le premier élément de pkgname.
- pkgname: Nom du paquet/des paquets (en cas de paquets splittés). Cette variable a les mêmes limitations que pour un nom de fichier.
- pkgver: Version du programme. Elle ne doit pas comporter de tiret (-).
- pkgrel: Version du paquet, de même que pkgver, le tiret n'est pas permis.
- pkgdesc: Description du paquet, de préférence, elle doit tenir sur une ligne.
- url: Lien vers le site web du programme.
- license: Liste des licences applicables. La liste des licences communes se trouve dans /usr/share/licenses/common. Si la licence de votre programme n'y est pas, il faut l'inclure dans l'installation à l'emplacement $pkgdir/usr/share/licenses/$pkgname/.
- install: Nom d'un script d'installation. Ce dernier se lance à chaque installation/suppression/mise à jour du paquet.
- changelog: Nom du fichier ChangeLog
- source: Liste des sources requises par le paquet. Tout fichier compressé sera décompressé sauf s'il est indiqué dans noextract. Il est possible d'indiquer un nom de fichier pour la source: source=('fichier::url').
- noextract: Liste des fichiers inclus dans source et ne devant pas être extraits.
- md5sums: Liste des sommes de contrôle md5 pour chaque fichier source. Cette liste permet de vérifier l'intégrité des fichiers utilisés. Une fois les sources renseignées, on peut obtenir automatiquement les sommes de contrôle par:
makepkg -g >> PKGBUILD
- sha1sums / sha256sums / sha384sums / sha512sums: Alternatives à md5sums. Pensez à bien définir la variable INTEGRITY_CHECK dans /etc/makepkg.conf.
- groups: Définit les groupes auquels appartien(en)t ce(s) paquet(s).
- arch: Définit les architectures sur la(les)quelle(s) ce paquet peut être construit. arch=('any') indique que le paquet ne contient pas de fichier dépendant de l'architecture.
- backup: Indique les fichiers à sauvegarder lors de suppression/mise à jour. Voir man pacman. Les fichiers sont à spécifier sans le premier /.
- depends: Liste des dépendances. Vous pouvez indiquer une version requise, minimum ou maximum.
depends=('diffutils' 'pacman>=3.3.3' 'package-query>=0.3')
- makedepends: Liste des dépendances qui ne sont requises que lors de la construction.
- optdepends: Liste des dépendances optionnelles. Cela permet d'indiquer le nom d'un paquet supplémentaire à installer pour avoir une fonctionnalité précise.
optdepends=('aurvote: vote for favorite packages from AUR for inclusion in [community]'
'customizepkg: automatically modify PKGUILD during install/upgrade'
'pacman-color: fully colorized output'
'rsync: retrieve PKGBUILD from official repositories')
- conflicts: Liste des paquets en conflit avec celui-ci. Même format que depends.
- provides: Liste des paquets virtuellement fournis par celui-ci. Même format que depends.
- replaces: Liste des paquets remplacés par celui-ci. Même format que depends.
- options: Liste d'options écrasant celle par défaut de makepkg, voir man makepkg.conf et man pkgbuild.
Variables pour versions de développement
makepkg permet de mettre à jour la version d'un paquet ciblant une version de développement disponible dans un dépôt de système de gestion de révision. Pour en profiter, il faut définir les bonnes variables selon le système de gestion de révision:
- CVS: _cvsroot et _cvsmod
- SVN: _svntrunk et _svnmod
- GIT: _gitroot et _gitname
- Mercurial: _hgroot et _hgrepo
- Darcs: _darcstrunk et _darcsmod
- Bazaar: _bzrtrunk et _bzrmod
Fonctions
build()
Cette fonction permet de compiler le programme, c'est une fonction bash, donc à priori, toute syntaxe bash est acceptable.
Néanmoins, toute erreur dans cette fonction provoque l'arrêt de makepkg, elle est exécutée dans l'environnement utilisateur, et ne doit en aucun cas modifier un fichier en dehors de ceux du paquet en construction. Les variables startdir, srcdir et pkgdir contiennent les chemins absolus vers respectivement le répertoire du PKGBUILD, celui des sources décompressées, et enfin celui des fichiers du paquet. Ces variables sont disponibles à l'intérieur de la fonction build().
Exemple:
build() {
cd "$srcdir/$pkgname-$pkgver"
./configure --localstatedir=/var --prefix=/usr \
--sysconfdir=/etc
make
}
package()
Cette fonction a pour rôle d'installer le programme dans le dossier $pkgdir (pas dans /) et, lorsque l'option fakeroot est définie, elle est exécutée dans un environnement... fakeroot.
Exemple:
package ()
{
cd "$srcdir/$pkgname-$pkgver"
make DESTDIR="$pkgdir" install
}
Paquets splittés
Le PKGBUILD d'un paquet splitté diffère du paquet non splitté par le nombre de fonction **package_*()** ainsi que par la possibilité de redéfinir différentes variables par paquets.
Les variables pouvant êtres redéfinies sont: pkgver, pkgrel, pkgdesc, arch, license, groups, depends, optdepends, provides, conflicts, replaces, backup, options, install, changelog.
Exemple de fonction package() pour paquet splitté:
pkgbase=paquetsplit
# ....
pkgname=('paquet1', 'paquet2')
# ....
package_paquet1() {
pkgdesc="Le paquet 1 du split"
cd "${srcdir}/${pkgbase}-${pkgver}"
make DESTDIR="${pkgdir}/ install"
rm "${pkgdir}/usr/bin/binaire-paquet2"
}
package_paquet2() {
pkgdesc="Le paquet 2 du split"
cd "${srcdir}/${pkgbase}-${pkgver}"
make DESTDIR="${pkgdir}/ install"
rm "${pkgdir}/usr/bin/binaire-paquet1"
}
Fichier .install
Le fichier .install permet d'effectuer certaines actions lors de l'installation, suppression ou mise à jour du paquet. Les actions à lancer sont définies par les fonctions suivantes:
- Installation: Ces fonctions reçoivent comme argument la version du paquet installé.
- pre_install: Avant installation.
- post_install: Après installation.
- Mise à jour: elles reçoivent deux arguments, la version du paquet supprimé et celle du paquet installé.
- pre_upgrade
- post_upgrade
- Suppression: un seul argument, la version du paquet supprimé.
- pre_remove
- post_remove