LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


archlinux:pkgbuild

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 <jvinet@zeroflux.org>
# Contributor: Judd Vinet <jvinet@zeroflux.org>
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 :

  1. Récupération des sources :
    wget http://www.foo.org/download/foo-0.99.tar.gz
  2. Décompression :
    tar zxf foo-0.99.tar.gz && cd foo-0.99
  3. 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.

  4. Compilation :
    make
  5. 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

1)

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

Crédit

vincentxavier 26/11/2006 19:02

1)
sed s/pacman/yaourt/
archlinux/pkgbuild.txt · Dernière modification: 2018/11/17 12:52 (modification externe)