fr:pkgxx
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
fr:pkgxx [2011/05/08 20:30] – effacée piernov | fr:pkgxx [2014/05/31 00:27] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Faire un paquet pkg++ selon les règles ====== | ||
+ | |||
+ | Compiler une application 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 | ||
+ | |||
+ | En revanche, lorsqu' | ||
+ | |||
+ | **pkg++** offre une solution en vous permettant de construire des paquets le plus simplement possible. | ||
+ | |||
+ | ===== Prérequis ===== | ||
+ | |||
+ | Voici ce dont vous avez besoin pour créer un paquet **pkg++** : | ||
+ | |||
+ | * Un éditeur de texte (nano, gedit, etc.) | ||
+ | * Quelques notions de shell | ||
+ | * pkg++ | ||
+ | * Les dépendances de l’outil que vous voulez empaqueter | ||
+ | |||
+ | ===== pkg++ ===== | ||
+ | |||
+ | 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