Receipts (Recettes des paquets)
Ce document décrit les possibilités offertes par les recettes utilisées par Tazwok pour compiler et générer des paquets pour SliTaz et tazpkg, via (le wok et les outils). La recette d'un paquet est aussi utilisée par Tazpkg pour installer/désinstaller et donner des informations à propos d'un paquet .tazpkg (package). Chaque recette commence par un commentaire en anglais :
# SliTaz package receipt.
Variables de base
Les 5 premières variables devraient toujours être présentes et configurées. Elles configurent respectivement le nom du paquet ($PACKAGE), sa version, sa catégorie, une courte description et le nom du mainteneur. Exemple pour le paquet du gestionnaire de fichiers Clex :
PACKAGE="clex" VERSION="3.16" CATEGORY="base-apps" SHORT_DESC="Text mode file manager." MAINTAINER="pankso@slitaz.org"
Variables optionnelles
Tazwok sait aussi utiliser diverses variables optionnelles si elles existent, il peut par exemple, utiliser un autre nom pour le paquet source. Il y a aussi des variables qui sont utilisées par Tazpkg pour gérer les dépendances ou donner des informations sur le paquet.
$DEPENDS
: spécifie les dépendances, il peut y avoir plusieurs
paquets séparés par un espace ou sur plusieurs lignes. Cette variable est
principalement utilisée par Tazpkg lors de l'installation du paquet et Tazwok
pour construire de gros paquets comme Xorg. Exemple pour Clex qui dépend du
paquet ncurses :
DEPENDS="ncurses"
$BUILD_DEPENDS
: spécifie les dépendances de compilation, séparées
par un espace ou sur plusieurs lignes. Cette variable est utilisée par Tazwok
lors de la cuisson d'un paquet. Exemple :
BUILD_DEPENDS="ncurses-dev"
$SUGGESTED
: liste les paquets pouvant être utiles sans pour
autant être indispensables. Ils serviront à activer des fonctionnalités
optionnelles.
$TARBALL
: l'archive source avec son extension (tar.gz, tgz ou
tar.bz2). En générale, les variables $PACAKAGE et $VERSION sont utilisées et
il suffit de modifier l'extension, cela permet de mettre à jour le paquet en
ne modifiant que la variable de la version. Exemple générique (voir aussi
la variable $SOURCE) :
TARBALL="$PACKAGE-$VERSION.tar.gz"
$WEB_SITE
: le site web officiel du paquet. Il se peut que
certaines bibliothèques n'aient pas de site Web, dans ce cas il n'y a pas
besoin de spécifier d'URL. Tazwok et Tazpkg s'attendent a trouver l'URL
complet avec le http :
WEB_SITE="http://www.clex.sk/"
$WGET_URL
: l'url de téléchargement de l'archive source. En
générale la variable $TARBALL devrait être utilisée pour faciliter la mise
à jour du paquet en ne modifiant que $VERSION. Le fichier de configuration de
Tazwok configure aussi, par défaut, 3 variables de miroir souvent utilisées.
$GNU_MIRROR pour les miroirs GNU, $SF_MIRROR pour SourceForge et XORG_MIRROR
pour le miroir du serveur graphique Xorg. Exemple pour Clex :
WGET_URL="http://www.clex.sk/download/$TARBALL"
$CONFIG_FILES
: certains paquets fournissent des fichiers de
configuration à adapter. La variable $CONFIG_FILES donne la liste de ces
fichiers qui pourront être sauvegardés par la commande 'tazpkg repack-config'.
Ces fichiers ne seront pas écrasés lors de l'installation du paquet s'ils
existent déjà et le paquet pourra être récréé avec 'tazpkg repack' même s'ils
ont été modifiés par la suite. Exemple pour Netatalk :
CONFIG_FILES="/etc/netatalk/AppleVolumes.* /etc/netatalk/*.conf"
$WANTED
: il y a des paquets SliTaz qui sont dépendants de la
compilation d'un paquet source. La recette de ces paquets ne nécessite pas de
règles de compilation, une variable $WANTED peut être utilisée pour copier des
fichiers depuis les sources du paquet voulu, en utilisant la variable $src.
$SOURCE
: il se peut que le nom du paquet Tazpkg diffère du nom
du paquet source. C'est le cas par exemple pour les paquets d'Xorg, le nom
Tazpkg des bibliothèque X11 est 'xorg-libX11' et le nom du paquet source est
libX11. Cette astuce permet aussi de continuer à utiliser les variables
$src et $_pkg lors la cuisson d'un paquet. A noter que dans le cas libX11,
le nom de l'archive source devient $SOURCE-$VERSION.tar.gz.
$PROVIDE
: certains paquets offrent la même fonctionalité. Par
exemple, le serveur web de SliTaz fût dans un premier temps lighttpd.
Maintenant apache est aussi disponible. Tous les paquets dépendants d'un
serveur web font référence à lighttpd. La ligne PROVIDE="lighttpd"
de la recette d'apache signale qu'il peut se substituer à lighttpd, c'est-à-
dire qu'un paquet dépendant de lighttpd n'a pas à l'installer si apache est
déjà installé.
Mais cette alternative peut avoir des conséquences sur le choix des paquets qui
en dépendent. Le paquet php est prévu pour fonctionner uniquement avec lighttpd.
C'est php-apache qu'il faut installer avec apache. La ligne
PROVIDE="php:apache"
dans la recette de php-apache indique qu'il
faut substituer php-apache à php si apache est installé.
Les paquets dépendants de php installeront alors php-apache ou php selon le
serveur web installé.
Cette variable permet aussi d'avoir un paquet compilé avec différentes options.
La ligne PROVIDE="epdfview:cups"
du paquet epdfview-cups permet
d'installer un package epdfview compilé avec le support de l'impression par
cups.
On peut aussi définir des paquets virtuels avec cette variable. Les lignes
PROVIDE="libgl"
du paquet mesa
et
PROVIDE="libgl:nvidia"
du paquet nvidia-glx
définissent le paquet virtuel libgl
qui sera une version
optimisée lorsque le paquet nvidia
est installé.
$SELF_INSTALL
: certains paquets utilisent des commandes
fournies par le paquet lui-même dans la fonction post_install.
Pour installer ce paquet dans un répertoire autre que la racine et utiliser
ces commandes, il faut qu'il ait déjà été installé dans / auparavent.
La ligne SELF_INSTALL=1
signale à tazpkg cette particularité.
Variables générées automatiquement par tazwok
Certaines variables ne sont connues qu'au moment de la cuisson du paquet ou juste après la cuisson. Tazwok se charge de les ajouter au receipt automatiquement.
$PACKED_SIZE
: taille du ficher tazpkg.
$UNPACKED_SIZE
: taille utilisée par le paquet après son
installation.
$EXTRAVERSION
: certains packages ont besoin de 2 numéros de
version distincts. C'est le cas des modules ajoutés au noyau linux comme
squashfs car le module produit dépend aussi de la version du noyau avec
laquelle il a été compilé. Dans ce cas EXTRAVERSION contient la version du
noyau et tazwok le détermine à partir du contenu de /lib/modules.
Variables utilisables dans les fonctions
Tazwok configure plusieurs variables permettant de faciliter la compilation et la construction de paquets Tazpkg. Ces variables sont gérées automatiquement par Tazwok en utilisant les informations contenues dans les recettes, elles peuvent être utilisées par les fonctions compile_rules et genpkg_rules décrites toutes deux dans le chapitre : Fonctions.
$src
: définit le chemin vers le répertoire des sources désarchivées.
$_pkg
: définit le chemin vers les binaires compilés et installés
via la commande 'make DESTDIR=$PWD/_pkg install'. Cette variable est utilisée
pour copier les fichiers générés et créer des paquets tazpkg.
$fs
: définit le chemin vers le pseudo système de fichier (fs)
propre à chaque paquet. Le 'fs' d'un paquet correspond à la racine du système
cible, un binaire tel que Clex sera par exemple dans $fs/usr/bin/clex, à noter
qu'il faut créer les répertoires nécessaires via la fonction genpkg_rules()
avant de copier des fichiers.
$CONFIGURE_ARGS
: cette variable est définie dans le fichier de
configuration de Tazwok (tazwok.conf), elle permet de spécifier des
arguments d'optimisation générique lors de la configuration d'un paquet.
Par défaut l'architecture est i486.
Fonctions
Une recette peut contenir 4 fonctions. Tazwok sait traiter les fonctions contenant les règles de compliation (compile_rules) et les règles servant à générer un paquet Tazpkg (genpkg_rules). Ces fonctions peuvent contenir toutes sortes de commandes GNU/Linux standards tels que sed ou patch et les variables configurées automatiquement. A noter que ces deux fonctions utilisent les commandes du Cookbook de SliTaz : http://doc.slitaz.org/fr:cookbook:start
compile_rules()
Pour compiler un paquet vous pouvez utiliser la variable $src pour vous déplacer (cd) dans le répertoire des sources et utiliser $CONFIGURE_ARGS pour inclure les arguments depuis le fichier de configuration de Tazwok. Pour construire le paquet il suffit généralement de lancer 'make' sans argument et pour installer le paquet dans un répertoire _pkg/ il faut utiliser la commande 'make DESTDIR=$PWD/_pkg install'. Exemple générique :
# Rules to configure and make the package. compile_rules() { cd $src ./configure --prefix=/usr --infodir=/usr/share/info \ --mandir=/usr/share/man $CONFIGURE_ARGS make make DESTDIR=$PWD/_pkg install }
genpkg_rules()
Pour générer un paquet Tazpkg il faut mettre les commandes à lancer dans la
fonction genpkg_rules
. Dans cet exemple on créé le répertoire
usr/
dans le pseudo système de fichiers du paquet, on copie tou(t)(s)
le(s) binaires(s) et on finit par un strip pour nettoyer les fichiers :
# Rules to gen a SliTaz package suitable for Tazpkg. genpkg_rules() { mkdir -p $fs/usr cp -a $_pkg/usr/bin $fs/usr strip -s $fs/usr/bin/* }
pre_install() et post_install()
Ces deux fonctions sont lancées par Tazpkg lors de l'installation du paquet. Il faut les définir avant de générer le paquet.tazpkg avec Tazwok. Si aucune commande n'est nécessaire ces deux fonctions n'ont aucune raison d'être et peuvent être supprimées. Exemple avec echo pour afficher un peu de texte (aucune fonction ne doit être vide) :
# Pre and post install commands for Tazpkg. pre_install() { echo "Processing pre-install commands..." } post_install() { echo "Processing post-install commands..." }
clean_wok()
Cette fonction est lancée par Tazwok avec la commande clean. Elle permet de définir des commandes supplémentaires à exécuter lors du nettoyage du wok. Elle est très utile pour supprimer des fichiers ou répertoires qui ne sont pas pris en charge par Tazwok.
# clean commands for Tazwok. clean_wok() { rm -rf $WOK/$PACKAGE/vim71 }