====== Règles ====== Ces règles sont élaborées pour obtenir une homogénéité des packages et une intégration parfaite dans Xfce et tout environnement de bureau respectant les standard freedesktop.\\ Si vous pensez avoir respecté ces rêgles, vous pouvez proposer/soumettre votre package à la communauté. **A/** Le nom du package doit être de la forme :\\ $name-$version-$arch-$zenwalk-release.$build.tgz - name:Le nom du package: il ne peut contenir que des caractères alphanumériques, "-" est supporté mais devrait être évité. - version: la version: celle de l'application (ex 1.5.0.6), avec quelques règles encore: * les séparateurs "_,()-" sont interdits, utilisez "." - arch: l'arche: i486 le plus souvent (il faut une excellente raison pour ne pas le faire) - zenwalk-release: la version de zenwalk pour laquelle le package a été construit (ex: zenwalk-4.0 fraîchement installé > 40, zenwalk-4.0 installé mais depuis, vous utilisez le répertoire "snapshot" pour les mises à jour > 42) - build: "compilation, construction": la version du package pour une même application (ex: 1ère compilation de XW-3.0: 40.1, amélioration, nouvelle compilation de XW-3.0: 40.2) - Rien ne commence par 0 (ex: 002 doit être convertit en 2) - Les mots "alpha, beta, svn, ... sont interdits, utilisez .a, .b, .c **B/** Tous les packages doivent s'installer sans que l'utilisateur doive éxécuter quoique ce soit après l'installation pour rendre le package utilisable. **C/** Tous les packages doivent contenir un fichier "slack-desc" qui décrit brièvement l'application **D/** Le script de post-install (doinst.sh) ne doit contenir que des chemins relatifs à / (ex: /etc/profile est = etc/profile dans doinst.sh) **E/** Tous les packages doivent être accompagné de leur signature md5, pour vérifier leur intégrité, ainsi que de leur fichier .dep qui liste les dépendances.\\ Pour l'obtenir : # requiredbuilder -z packageX.tgz > packageX.dep **F/** Tous les packages doivent inclure leur ZenBuild, nommé "build-packageX.sh" dans le répertoire "/usr/src/packageX-x.x" **G/** Le ZenBuild est un script bash qui automatise la création du package.\\ Il doit contenir au minimum :\\ * le nom du packager * l'url vers la source du package * les commandes bash utilisées pour construire le package **H/** Les packages (sauf excellente raison) sont compilés avec :\\ CFLAGS="-O2 -march=i486 -mtune=i686"\\ CXXFLAGS="-O2 -march=i486 -mtune=i686" **I/** Résumé des principales options de configuration : ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --mandir=/usr/man Ce qui veut dire : * Le package n'est pas autorisé à installer des fichiers dans /opt et /usr/local * /usr est le chemin du préfixe d'installation * les fichiers log doivent être installés dans /var * les fichiers de configuration : /etc * les pages de manuel : /usr/man **J/** Tous les binaires et librairies systèmes doivent être strippées de symboles de "débugages" **K/** Les pages de manuel doivent être gzippées **L/** Les permissions des fichiers installés dans /usr/bin sont: root:root **M/** Les fichiers installés dans /usr/doc ne peuvent avoir de permissions d'écriture pour l'utilisateur **N/** Tous les packages tournant sous X doivent installer: * leur fichier .desktop dans /usr/share/applications * leur icône dans usr/share/icons/hicolor/scalable/apps/ (si vectorielle) et/ou usr/share/icons/hicolor/48x48/apps/ (si png) ====== ZenBuild ====== ===== modèle ===== Voici un exemple de modèle de ZenBuild qui, en plus du package.tgz, vous fournira le fichier .md5 ainsi q'un fichier.log traçant la compilation : #!/bin/bash # packager : Prénom Nom (mon_email@mail.com) # source location : http://www.lieu_des_sources/source.tar.gz # last revised : date de la dernière mise à jour softname='Nom_PackageX' softversion='' packageversion='' arch='i486' cpu='i686' prefix=/usr # log ;) ( # parameters needed for the build process buildir=$(pwd) srcpkg="$buildir/$softname-$softversion.tar.gz" src="$buildir/$softname-$softversion" package="$softname-$softversion-$arch-$packageversion" dest="$buildir/$package" # prepare the build result directory dest="$buildir/$package" rm -rf $dest mkdir -p $dest mkdir -p $dest/install mkdir -p $dest/usr/doc/$softname-$softversion mkdir -p $dest/usr/src/$softname-$softversion # Slack-desc cat < $dest/install/slack-desc |-----handy-ruler------------------------------------------------------| Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: Nom_PackageX: EOF # extract the source code cd $buildir tar xvf $srcpkg cd $src # build export CFLAGS="-O2 -march=$arch -mtune=$cpu" export CXXFLAGS="-O2 -march=$arch -mtune=$cpu" ./configure \ --prefix=$prefix \ --enable-static=no \ --program-prefix="" \ --program-suffix="" \ --build=$arch-slackware-linux make make install DESTDIR=$dest # add 'default' files cp -a \ AUTHORS COPYING INSTALL README ChangeLog \ $dest/usr/doc/$softname-$softversion # Compress Man Pages gzip -9 $dest/usr/man?/* # Strip ( cd $dest find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) # .desktop file cat << "EOF" > $dest/usr/share/applications/$softname.desktop [Desktop Entry] Encoding=UTF-8 Name= Name[fr]= Comment= Comment[fr]= Exec= Icon= Terminal=false Type=Application Categories=Application;System; StartupNotify=true EOF # Make the package freedesktop compliant cp $buildir/$softname-$softversion/pixmaps/$softname.png $dest/usr/share/icons/hicolor/48x48/apps/ # ZenBuild cp $buildir/build-$softname.sh $dest/$prefix/src/$softname-$softversion # set target permissions chown -R root:root $dest cd $dest find . -perm 664 -exec chmod 644 {} \; find . -perm 600 -exec chmod 644 {} \; find . -perm 444 -exec chmod 644 {} \; find . -perm 400 -exec chmod 644 {} \; find . -perm 440 -exec chmod 644 {} \; find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 511 -exec chmod 755 {} \; find . -perm 711 -exec chmod 755 {} \; find . -perm 555 -exec chmod 755 {} \; # real packaging work cd $dest makepkg -l y -c n $dest.tgz # md5sum signature cd $buildir md5sum $package.tgz > $package.md5 # log ;) ) 2>&1 | tee "$softname-$softversion-build.log"