fr:pkgxx
Différences
Ci-dessous, les différences entre deux révisions de la page.
Dernière révisionLes deux révisions suivantes | |||
fr:pkgxx [2011/05/08 20:22] – créée piernov | fr:pkgxx [2011/05/08 20:30] – effacée piernov | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Faire un paquet pkg++ selon les règles ====== | ||
- | |||
- | Compiler une application sur un systeme GNU/Linux n'est souvent pas bien plus compliqué que de décompresser les sources et de lancer par la suite les commandes suivantes : | ||
- | |||
- | # ./ | ||
- | # make | ||
- | # make install | ||
- | |||
- | Par contre, lorsqu' | ||
- | |||
- | ===== Prérequis ===== | ||
- | |||
- | Voici ce dont vous avez besoin pour créer un paquet **pkg++** : | ||
- | |||
- | * Une distribution fonctionelle | ||
- | * Un éditeur de texte (nano, vim...) | ||
- | * Des outils de développement (suivant l' | ||
- | * Quelques notions de shell | ||
- | * pkg++ | ||
- | |||
- | ===== Quelques règles ===== | ||
- | |||
- | * **Arborescence de fichier** : Il est grandement conseillé de suivre les [[http:// | ||
- | * **Désignation** : Les noms des paquets doivent correspondre au nom de l' | ||
- | * **Documentation** : Selon les distributions, | ||
- | |||
- | ===== pkg++ ===== | ||
- | |||
- | La fabrication des paquets est grandement facilitée grâce à l' | ||
- | Un paquet n'est rien d' | ||
- | Ce paquet pourra ensuite être installé sur votre système grâce à votre gestionnaire de paquet ( comme **RPM** ou **dpkg** ) et il se retrouvera dans la base de données des paquets installés sur votre système.\\ | ||
- | Pour construire un paquet, il est nécessaire d' | ||
- | |||
- | ==== / | ||
- | |||
- | |||
- | Ce fichier de configuration est lu par **pkg++** avant l' | ||
- | Voici à quoi il peut ressembler : | ||
- | |||
- | < | ||
- | # | ||
- | # / | ||
- | # | ||
- | |||
- | # For optimisation with CFLAGS, you can see | ||
- | # http:// | ||
- | # It is *strongly recommended* to use a known -march= and not -march=native, | ||
- | # because your package will be optimised for an unknown processor, which would | ||
- | # be a problem to share them. | ||
- | |||
- | export CHOST=$MACHTYPE | ||
- | |||
- | export CFLAGS=" | ||
- | export CXXFLAGS=" | ||
- | |||
- | export MAKE_OPTS=" | ||
- | |||
- | # Do NOT export USE directly, ZSH hates this. | ||
- | USE=(nls man info free -binary) | ||
- | |||
- | # PKGMK_SOURCE_MIRRORS=() | ||
- | PKGMK_SOURCE_DIR="/ | ||
- | PKGMK_PACKAGE_DIR="/ | ||
- | PKGMK_LOGS_DIR="/ | ||
- | PKGMK_WORK_DIR="/ | ||
- | # PKGMK_DOWNLOAD=" | ||
- | # PKGMK_IGNORE_FOOTPRINT=" | ||
- | # PKGMK_IGNORE_NEW=" | ||
- | # PKGMK_NO_STRIP=" | ||
- | # PKGMK_WGET_OPTS="" | ||
- | # PKGMK_CURL_OPTS="" | ||
- | # PKGMK_COMPRESSION_MODE=" | ||
- | # PKGMK_MAN_COMPRESSION=" | ||
- | |||
- | # Variable | ||
- | PKGMK_DOWNLOAD_TOOL=curl # curl wget axel | ||
- | PKGMK_UNTAR_TOOL=gtar | ||
- | PKGMK_TARLIST_TOOL=gtar | ||
- | PKGMK_UNRPM_TOOL=rpm | ||
- | PKGMK_UNZIP_TOOL=unzip | ||
- | |||
- | # These variables will be used for the packages construction. | ||
- | PKGMK_PACKAGE_MANAGER=pkgutils | ||
- | |||
- | # End of file | ||
- | </ | ||
- | |||
- | On y remarque donc les //CFLAGS// et // | ||
- | Cette ligne : // | ||
- | Cette ligne : // | ||
- | |||
- | ===== Votre dossier source ===== | ||
- | |||
- | Il s'agit du dossier à partir duquel vous allez construire votre paquet, il contient obligatoirement le fichier **Pkgfile**, | ||
- | |||
- | ==== Arborescence ==== | ||
- | |||
- | |||
- | Voici l' | ||
- | Les fichiers sources de l' | ||
- | Le paquet binaire se retrouvera dans **/ | ||
- | Votre dossier de recette peut se situer n' | ||
- | \\ | ||
- | < | ||
- | appli_test/ | ||
- | |-Pkgfile | ||
- | |-.md5sum | ||
- | |-.sha256sum | ||
- | |-.footprint | ||
- | |-appli_test.desktop | ||
- | |-appli_test.png | ||
- | |-appli_test_bugfix.patch | ||
- | </ | ||
- | |||
- | ==== Pkgfile ==== | ||
- | |||
- | Le fichier **Pkgfile** va décrire comment le paquet doit être construit. Une fois ce fichier écrit convenablement, | ||
- | Ce fichier est toujours rédigé de la même façon.\\ | ||
- | Chaque ligne de ce fichier est lue et a son importance. | ||
- | |||
- | < | ||
- | description=" | ||
- | packager=" | ||
- | maintainer=" | ||
- | url=" | ||
- | depends=( Dépendances du paquets, séparés par une espace ) | ||
- | |||
- | name=nom_du_paquet | ||
- | version=version_du_paquet | ||
- | release=numéro_de_construction_du_paquet | ||
- | source=( | ||
- | L'URI d'où télécharger les sources de l' | ||
- | fichier.desktop (si nécessaire) | ||
- | fichier.png (si nécessaire) | ||
- | fichier1.patch (si nécessaire) | ||
- | fichier2.patch (si nécessaire) | ||
- | ) | ||
- | |||
- | build () | ||
- | { | ||
- | cd $name-$version | ||
- | ./ | ||
- | --prefix=/ | ||
- | make | ||
- | make DESTDIR=$PKG install | ||
- | } | ||
- | </ | ||
- | |||
- | === La fonction build === | ||
- | |||
- | La fonction //build// est ceci : | ||
- | < | ||
- | build() { | ||
- | |||
- | } | ||
- | </ | ||
- | |||
- | Les instructions se trouvant dans cette fonction sont toutes les instructions requises pour compiler les sources qui se trouveront décompressées dans le dossier $SRC ( / | ||
- | |||
- | La plupart du temps, cette fonction sera juste équivalente à : | ||
- | |||
- | < | ||
- | build() { | ||
- | cd $name-$version | ||
- | ./configure –prefix=/ | ||
- | make | ||
- | make DESTDIR=$PKG install | ||
- | } | ||
- | </ | ||
- | |||
- | Voire, ceci pour une application Perl : | ||
- | < | ||
- | build() { | ||
- | cd URI-$version | ||
- | perl Makefile.PL | ||
- | make | ||
- | make DESTDIR=$PKG install | ||
- | } | ||
- | </ | ||
- | |||
- | Ou encore ceci pour une application Python : | ||
- | < | ||
- | build() { | ||
- | cd $name-$version | ||
- | python setup.py build install --root=$PKG | ||
- | } | ||
- | </ | ||
- | |||
- | Pour plus d' | ||
- | |||
- | En sachant que $PKG représente le répertoire de destination qui sera contenu dans le paquet ( / | ||
- | |||
- | Parfois, bien évidemment, | ||
- | |||
- | Ce que vous n'avez pas à faire car **pkg++** le fait pour vous :\\ | ||
- | -Archiver et compresser les pages man et les pages info. | ||
- | -Fixer les permissions du paquet à root:root (sauf exception, voir au bas de la page ) | ||
- | |||
- | |||
- | ==== .md5sum, .sha256sum et .footprint ==== | ||
- | |||
- | Le fichier **.md5sum** correspond à la somme MD5 des sources de l' | ||
- | De même, le fichier **.sha256sum** correspond à la somme SHA256 des sources de l' | ||
- | Le fichier **.footprint** correspond à l'// | ||
- | Bien évidemment, | ||
- | \\ | ||
- | A la prochaine construction, | ||
- | |||
- | # pkg++ -um -us | ||
- | |||
- | L' | ||
- | |||
- | # pkg++ -uf | ||
- | |||
- | ==== .desktop ==== | ||
- | |||
- | Ce fichier répond aux standards FreeDesktop et est utile à l' | ||
- | Il est généralement de cette forme : | ||
- | |||
- | < | ||
- | [Desktop Entry] | ||
- | Encoding=UTF-8 | ||
- | Name=Le nom de l' | ||
- | Comment=Une description courte de l' | ||
- | Exec=Le nom de l' | ||
- | Icon=Le nom de l' | ||
- | Terminal=false | ||
- | Type=Application | ||
- | Categories=Application; | ||
- | StartupNotify=true | ||
- | </ | ||
- | |||
- | Les catégories selon les standards [[http:// | ||
- | Ce fichier doit se nommer $name.desktop (ou $name = nom de l' | ||
- | |||
- | Si vous avez créé ce fichier à la main dans votre répertoire source, vous le déclarez au niveau source du build puis vous le copiez dans le paquet, au bon endroit, généralement comme ceci : | ||
- | |||
- | < | ||
- | mkdir -p $PKG/ | ||
- | install -m 644 ../ | ||
- | </ | ||
- | |||
- | |||
- | ==== L' | ||
- | |||
- | Le paquet doit contenir, toujours pour respecter les standards FreeDesktop, | ||
- | Cette icône peut être soit de format .png, soit de format .svg\\ | ||
- | |||
- | Si elle est au format PNG, elle doit se trouver, selon sa taille, dans le dossier / | ||
- | |||
- | Si elle est au format SVG, elle doit se trouver dans le dossier / | ||
- | |||
- | Donc, idem, si vous avez l' | ||
- | |||
- | < | ||
- | mkdir -p $PKG/ | ||
- | install -m 644 ../ | ||
- | </ | ||
- | |||
- | L' | ||
- | |||
- | ==== Les patchs ==== | ||
- | |||
- | Les sources de l' | ||
- | Généralement, | ||
- | |||
- | < | ||
- | patch < votre_fichier_patch.patch | ||
- | </ | ||
- | |||
- | ===== Droits et permissions ===== | ||
- | |||
- | Normalement, | ||
- | |||
- | < | ||
- | cd $PKG | ||
- | chown -R root:root . | ||
- | 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 {} \; | ||
- | </ | ||
- | |||
- | Vous pouvez aussi avoir besoin de parametrer des permissions plus restrictives, | ||
- | |||
- | |||
- | ====== FakeRoot ====== | ||
- | |||
- | Si vous souhaitez construire vos paquets sans risquer d' | ||
- | Vous n'avez qu'a installer le paquet disponnible dans votre distribution (ou l' | ||
- | |||
- | $ fakeroot pkg++ -d | ||
- | |||
- | Ceci construirea votre paquet, mais pkg++ -i ne fonctionnera pas car cette commande demande d' | ||
- | |||
- | ====== Recettes ====== | ||
- | |||
- | Vous pouvez vous procurer des recettes de différente manière : | ||
- | |||
- | * Par le biais des ports de [[http:// | ||
- | * de [[http:// | ||
- | |||
- | ====== Construction du paquet ====== | ||
- | |||
- | Vous avez vérifié que votre dossier de recette contien bien une arborescence comme celle ci : | ||
- | |||
- | < | ||
- | appli_test/ | ||
- | |-Pkgfile | ||
- | |-.md5sum | ||
- | |-.sha256sum | ||
- | |-.footprint | ||
- | |-appli_test.desktop | ||
- | |-appli_test.png | ||
- | |-appli_test_bugfix.patch | ||
- | </ | ||
- | |||
- | et que le Pkgfile est bien rédigé ? | ||
- | Il ne vous reste plus qu'a lancer la construction : | ||
- | |||
- | # pkg++ -d | ||
- | |||
- | Et patienter, suivant l' | ||
- | Si la construction échoue, vérifiez bien votre Pkgfile. Si une erreur survient pendant la compilation, | ||
- | Si votre paquet est construit correctement (vous pouvez le tester dans un chroot vierge par exemple), la communauté de votre distribution sera ravie de l' | ||
- | |||
- | ---- | ||
- | |||
- | //“Ce document issu de http:// | ||
- | Article originial : [[http:// |
fr/pkgxx.txt · Dernière modification : 2014/05/31 00:27 de 127.0.0.1