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
* les séparateurs “_,()-” sont interdits, utilisez “.”
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 :
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 :
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:
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 <pseudo> (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 <<EOF > $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"