<-
Nasgaïa > Forums > Documentation > Doc HTML

Creation d'un nbuild

Auteurs: Martial Daumas

Date: 2003-12-17

Modif:

Petit tutoriel sur la création d'un nbuild

top

Introduction

Dans ce tutoriel, nous imaginons vouloir faire un nbuild pour un paquet foobar-1.0.

top

Première étape

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.

top

Créer le fichier desc

#=========#=========#=========#=========#=========
%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.

top

Créer le fichier build

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

top

Installation des fichiers

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.

top

les patches

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
}

top

Autres fichiers

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

top

Créer le nbuild

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.

top

Erreurs courantes à éviter