Projet de distribution GNU/Linux
Auteurs: Martial Daumas
Date: 2003-12-17
Modif:
Petit tutoriel sur la création d'un nbuild
Dans ce tutoriel, nous imaginons vouloir faire un nbuild pour un paquet foobar-1.0.
Créer un répertoire foobar/, s'y placer. Créer le fichier infos
VERSION="1.0"
NODE="SYSTEM"
META_NODES=""
PRI_DL_URL="ftp://truc.machin.org/src/foobar/$VERSION/foobar-$VERSION.tar.gz"
CREATE_DIR="foobar-$VERSION"
LICENSE="GPL-2"
COPYRIGHTS="/usr/share/doc/foobar-$VERSION/Copyrights.txt"
AUTHORS="/usr/share/doc/foobar-$VERSION/AUTHORS"
META="nga:autoselect,contrib"
NBUILD_MAINT="moi <moi@fai.net>"
PROJECT_URL="http://www.machin.org/"
Les variables les plus importantes sont
VERSION, NODE, PRI_DL_URL
.
La variable NODE
représente la série dans laquelle s'intègre
le logiciel, le choix n'est pas toujours simple, donc le mieux est de
voir les séries qui existent déjà (find /var/npkg/files/
-type d
) et quels logiciels y sont.
Il est possible d'en créer de nouvelles, mais si vous avez un doute,
demander juste sur la liste.
Essayez quand cela est possible de réutiliser $VERSION
dans PRI_DL_URL
et autres variables: quand une mise à
jour est à faire, et que le paquet n'a pas beaucoup changé, il suffit
de modifier la variable version, et le changement se propage dans tout
le reste du même coup.
CREATE_DIR
indique le répertoire créer par la décompression
de l'archives indiqué par $PRI_DL_URL
META
sert à indiquer des mots-clés. Par exemple, tout les
paquets présent sur le CD utilisent le mot-clé oncd - mais dans le
cas de contributions, seul contrib est acceptable. Si le paquet est
connu pour poser des problèmes spéciaux (conflits avec d'autres paquets
par exemple), enlevez le mot-clé autoselect.
#=========#=========#=========#=========#=========
%SD[fr] foobar
%LD[fr] foobar est un logiciel de calcul foo
%SD[en] foobar
%LD[en] foobar is an utility for foo calculation
SD
doit tenir en une unique ligne pour chaque langue et
donner le "nom" suffisant à reconnaître le paquet.
LD
donne pour chaque langue une brève description.
En général, faire simple est bien, pas la peine de faire un roman,
ça n'est pas supposé remplacer la doc et les divers README, mais
juste donner une idée.
Vous pouvez avoir plusieurs lignes LD pour chaque langue.
IMPORTANT: utilisez une tabulation et non un espace entre %XX[locale] et le reste de la ligne, sinon on ne verra pas le contenu dans Nsetup.
Il est impossible de rentrer dans tout les détails sur ce fichier ici, car il y'a des multitudes de cas possible. Il est donc indispensable d'étudier des Nbuilds existants pour voir divers cas réels.
Tous les fichiers build commencent par:
#!/bin/bash
CWD=`pwd`
BWD=`basename $CWD`
$CWD
contient donc le chemin complet du répertoire
de compilation, dans notre cas ce serait:
/var/Ncooker/COMPILE/SYSTEM/foobar-1.0.
Ici, $BWD
contient foobar-1.0. Étant donné
que les versions, et aussi les séries sont appelées à être modifiées
de temps à autres, il faut utiliser ces variables au maximum,
cela rend le script plus abstrait.
La plupart des appels à configure prennent comme options de base:
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--sysconfdir=/etc/usr
Il faut bien sûr ajouter toutes les options utiles. Pour cela,
./configure --help
est votre ami! Il faut
toujours en passer par là sinon vous risquez d'oublier des
choses intéressante. Ajoutez à la fin du configure la
variable $EXTRA_CONF
, cela donne un moyen simple
de surpasser les options sans rien éditer. Exemple, dans le nbuild,
il y a --with-ssl
, si l'utilisateur veut pour une
raison quelconque tester sans ce support, il fera:
EXTRA_CONF="--without-ssl" Nmake2 -b machin
do_preinstall sert principalement a ajouter les fichier de distribution (les README et compagnie), exemple:
add_doc_files /usr/share/doc/$BWD AUTHORS BUGS ChangeLog COPYING \
INSTALL NEWS README THANKS TODO
Le principe d'un Nbuild, c'est qu'on installe RIEN sur le vrai
système, donc, pas de make install
directement !
Dans une majorité de cas cela est la bonne méthode:
make DESTDIR=$INST_ROOT install
Dans notre exemple, INST_ROOT
équivaut à
/var/Ncooker/INST_ROOT/SYSTEM/foobar-1.0/data.
data remplace la racine (/).
Plus tard, makenpkg2 va s'en occuper et le transformer
en data.tar.bz2.
Pour informations, $NTMP
est égal au répertoire
père de data/ - y sont copiés les fichiers
desc, build, etc. Cela sert à créer dans
certains cas des scripts de post-installation (post_inst)
Pour savoir si un paquet supporte DESTDIR
, lisez
le fichier Makefile.in. Si ce n'est pas le cas, il va
falloir jeter un oeil au Makefile et s'assurer de passer
à make install
toute les variables nécessaire,
cela peut varier.
Dans notre exemple, il y'a des chances que cela soit la bonne méthode:
make prefix=$INST_ROOT/usr \
mandir=$INST_ROOT/usr/share/man \
infodir=$INST_ROOT/usr/share/info \
sysconfdir=$INST_ROOT/etc/usr install
Quand DESTDIR
est utilisable, utilisez le
en priorité, c'est la méthode idéale.
Il se peut que votre fichier build
doivent
appliquer un ou plusieurs patches. Dans le répertoire ou
vous avez créer build desc et infos
, créez un
répertoire patches/ et placez-y vos patches.
L'application des patches est en général à faire dans
do_preconfigure ()
, exemple:
do_preconfig () {
if [ ! -f NC-patched ]; then
patch -Np1 -i $PATCH_DIR/foobar-$VERSION.diff
touch NC-patched
else
echo "Already patched"
fi
}
Si votre build à besoin d'autre fichiers (une icône, un fichier de config, etc.) cela va dans res/ qui est accessible par build en tant que $RES_DIR. Exemple:
mkdir -p $INST_ROOT/usr/share/applications
install -m 0644 $RES_DIR/*.desktop \
$INST_ROOT/usr/share/applications
Placer vous dans le répertoire ou sont vos fichier, puis
utilisez nbuild-repack
, cela va créer un
fichier tar portant le nom du répertoire courant (foobar
dans notre cas) et y adjoindre -$VERSION (ici -1.0):
foobar-1.0.tar.
Vous pouvez maintenant le placer dans
/var/Ncooker/Nbuilds/SYSTEM
Après, Nmake2 foobar-1.0
doit le trouver et
donner les informations, il ne reste plus qu'a tester
tout cela avec par exemple:
Nmake2 -gb foobar -p "wipe"
Tapez Nmake2
pour voir les autres options
possibles.
Une fois le nba créer, il sera stocké comme /var/Ncooker/NVA/SYSTEM/foobar-1.0.nba.
export CFLAGS
alors que rien
ne s'y oppose, avant un configure
.
$EXTRA_CONF
en
dernier argument du configure
alors
que rien ne s'y oppose.
aclocal_versionize
dans do_postinstall ()
si le paquet
installe des fichier .m4 dans
/usr/share/aclocal.
AUTHORS=
). Ça ne marchera pas
car infos est évalué ligne à ligne, donc seule la
dernière occurrence est prise en compte. S'il y'a trop de chose
à mettre dans une ligne, c'est souvent signe qu'il vaut mieux
faire autrement (comme dans l'exemple, simplement indiquer le
chemin du fichier AUTHORS plutôt que le recopier, d'autant
que le contenu de ces fichiers varie d'une version à l'autre).
strip_bins $INST_ROOT
strip_debug_libs $INST_ROOT
do_postinstall ()
si rien ne s'y oppose.