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
}
Copyright © SliTaz - GNU General Public License;
Documentation publiée sous GNU Free Documentation License et codée en xHTML 1.0 valide.