Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
documentation:methode_de_creation_des_paquets_pour_0linux_native [25-08-2014 10:12]
appzer0 [Les variables d'environnement]
documentation:methode_de_creation_des_paquets_pour_0linux_native [23-03-2015 13:09]
appzer0 [cflags]
Ligne 1: Ligne 1:
 ====Créer et exécuter des recettes==== ====Créer et exécuter des recettes====
  
-On se base sur la [[http://​git.tuxfamily.org/​0linux/​0linux.git?p=0linux/0linux.git;​a=blob;​f=generique.recette|recette générique]] de 0Linux pour créer rapidement des paquets. La recette a été simplifiée et comprend des fonctions pour automatiser les tâches rébarbatives. Elle inclut toutes les commandes que l'on appellerait habituellement sur la ligne de commande, en s'​aidant des fonctions pré-enregistrées dans ''/​usr/​share/​0outils/​fonctions_paquets.sh''​ .+On se base sur la [[http://​git.tuxfamily.org/​0linux/​0linux.git/​tree/generique.recette|recette générique]] de 0Linux pour créer rapidement des paquets. La recette a été simplifiée et comprend des fonctions pour automatiser les tâches rébarbatives. Elle inclut toutes les commandes que l'on appellerait habituellement sur la ligne de commande, en s'​aidant des fonctions pré-enregistrées dans ''/​usr/​share/​0outils/​fonctions_paquets.sh''​ .
  
 La recette équivaut en fait à empaqueter un logiciel manuellement sur le terminal, ou via un petit script, en le compilant et en l'​installant à un emplacement spécifique puis à le passer à ''​spackpkg''​ pour en faire un paquet pour 0Linux, installable avec ''​spackadd''​. ​ La recette équivaut en fait à empaqueter un logiciel manuellement sur le terminal, ou via un petit script, en le compilant et en l'​installant à un emplacement spécifique puis à le passer à ''​spackpkg''​ pour en faire un paquet pour 0Linux, installable avec ''​spackadd''​. ​
Ligne 34: Ligne 34:
  --infodir=/​usr/​info \  --infodir=/​usr/​info \
  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \
- --build=${PKGARCH}-0-linux-gnu+ --build=${PKGARCH}-0linux-linux-gnu
  
 make -j${JOBS} || make make -j${JOBS} || make
Ligne 176: Ligne 176:
 </​code>​ </​code>​
  
-Voyez pour exemple la recette ​ ''​d/​git/​git.recette''​.+Cette variable sera traitée par la fonction ''​telecharger_sources''​ (voir plus bas). Voyez pour exemple la recette ​ ''​d/​git/​git.recette''​, qui contient un tableau.
  
 Puis vient la description du paquet dans ''​DESC''​ : Puis vient la description du paquet dans ''​DESC''​ :
Ligne 216: Ligne 216:
  
 ''​telecharger_sources''​ télécharge la ou les archives des sources à(aux) (l'​)adresse(s) définie(s) dans ''​$WGET'',​ si la ou les archives sont absentes, que celle-ci soit une simple URL ou bien un tableau de plusieurs URL (voir plus haut dans cette page) puis s'​occupe de vérifier l'​intégrité des archives téléchargées. ''​telecharger_sources''​ télécharge la ou les archives des sources à(aux) (l'​)adresse(s) définie(s) dans ''​$WGET'',​ si la ou les archives sont absentes, que celle-ci soit une simple URL ou bien un tableau de plusieurs URL (voir plus haut dans cette page) puis s'​occupe de vérifier l'​intégrité des archives téléchargées.
 +
 +Depuis ''​0outils 12.9'',​ ''​telecharger_sources''​ gère également les dépôts git. Il suffit de renseigner l'​adresse du dépôt commençant par « git: ». Le commit concerné doit se retrouver dans la variable ''​VERSION''​. On spécifie les 10 premiers caractères du « hash » du commit voulu. Exemple :
 +
 +<code bash>
 +VERSION=13eb208681 # Les 10 premiers caractères du commit désiré
 +WGET=git://​git.kernel.org/​pub/​scm/​linux/​kernel/​git/​firmware/​linux-firmware.git
 +</​code>​
 +
 +Pour éviter de cloner le dépôt à chaque fois, ''​telecharger_sources''​ va se charger de faire plusieurs choses ​ : 
 +  * cloner le dépôt git via ''​git clone''​
 +  * faire un ''​git checkout''​ sur le commit spécifié dans ''​VERSION''​
 +  * nettoyer tout répertoire ''​.git''​
 +  * renommer le répertoire principal en ''​PAQUET-VERSION''​
 +  * créer une archive compressée nommée ''​PAQUET-VERSION.tar.xz''​ du répertoire ''​PAQUET-VERSION''​
 +  * la ranger dans ''​PKGSOURCES/​PAQUET''​
 +
 ---- ----
  
Ligne 278: Ligne 294:
 On peut forcer une autre architecture que celle de l'​hôte pour certains cas spéciaux (compilation croisée pour la prise en charge du multilib notamment, etc.) en appelant la fonction avec un paramètre. Par exemple : On peut forcer une autre architecture que celle de l'​hôte pour certains cas spéciaux (compilation croisée pour la prise en charge du multilib notamment, etc.) en appelant la fonction avec un paramètre. Par exemple :
   cflags i686   cflags i686
-... forcera la compilation en i686 même si l'​hôte est un x86_64. Cette fonction est souvent utilisée dans les recettes nécessitant de gérer le mécanisme « multilib », comme c'est le cas pour les recettes x86_64 nécessitant des bibliothèques 32 bits i686 au sein du même paquet. Voyez la recette ''​[[http://​git.tuxfamily.org/​0linux/​0linux.git?p=0linux/0linux.git;​a=blob;​f=0Linux/​b/​zlib/​zlib.recette|zlib.recette]]''​ pour un exemple concret de recette multilib.+... forcera la compilation en i686 même si l'​hôte est un x86_64. Cette fonction est souvent utilisée dans les recettes nécessitant de gérer le mécanisme « multilib », comme c'est le cas pour les recettes x86_64 nécessitant des bibliothèques 32 bits i686 au sein du même paquet. Voyez la recette ''​[[http://​git.tuxfamily.org/​0linux/​0linux.git/​tree/0Linux/​b/​zlib/​zlib.recette|zlib.recette]]''​ pour un exemple concret de recette multilib.
  
 On peut également forcer une architecture non native (si on veut compiler uniquement du 32 bits i686 sur une 0Linux 64 bits) en spécifiant sur la ligne de commande la variable ''​$FORCE_PKGARCH''​. Cette variable ne sert que dans de rares cas, par exemple générer des paquets purs i686 sur un hôte 64 bits prenant en charge le multilib i686. On peut également forcer une architecture non native (si on veut compiler uniquement du 32 bits i686 sur une 0Linux 64 bits) en spécifiant sur la ligne de commande la variable ''​$FORCE_PKGARCH''​. Cette variable ne sert que dans de rares cas, par exemple générer des paquets purs i686 sur un hôte 64 bits prenant en charge le multilib i686.
Ligne 285: Ligne 301:
 ====configure_make_makeinstall==== ====configure_make_makeinstall====
  
-:!: Disponible uniquement à partir de 0Linux theta+:!: Disponible uniquement à partir de ''​0outils 12.8''​
  
 Cette fonction représente un raccourci qui peut servir pour les cas (trop rares) où la procédure de construction est parfaitement standard (commandes ''​./​configure ; make ; make install''​). Elle déduit les options disponibles dans le ''​configure''​ ( ''​--prefix'',​ ''​--localstatedir'',​ ''​--libdir'',​ ''​--mandir'',​ etc.) et tente de les spécifier au mieux pour 0Linux. Cette fonction représente un raccourci qui peut servir pour les cas (trop rares) où la procédure de construction est parfaitement standard (commandes ''​./​configure ; make ; make install''​). Elle déduit les options disponibles dans le ''​configure''​ ( ''​--prefix'',​ ''​--localstatedir'',​ ''​--libdir'',​ ''​--mandir'',​ etc.) et tente de les spécifier au mieux pour 0Linux.
Ligne 368: Ligne 384:
  --infodir=/​usr/​info \  --infodir=/​usr/​info \
  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \
- --build=${PKGARCH}-0-linux-gnu+ --build=${PKGARCH}-0linux-linux-gnu
  
 make -j${JOBS} || make make -j${JOBS} || make
Ligne 414: Ligne 430:
  --infodir=/​usr/​info \  --infodir=/​usr/​info \
  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \
- --build=${PKGARCH}-0-linux-gnu+ --build=${PKGARCH}-0linux-linux-gnu
  
 make -j${JOBS} || make make -j${JOBS} || make
Ligne 426: Ligne 442:
 # C'est fini. # C'est fini.
  
 +</​code>​
 +----
 +
 +====Recette multilib pour x86_64====
 +
 +Voici une recette qu'on rencontre assez souvent sous 0Linux x86_64, c'ets la recette multilib, contenant les versions 32 bits et 64 bits d'un même paquet. Voyons un exemple avec ''​libidn''​.
 +
 +On a là une recette multilib sommes toutes assez classique. Remarquez qu'on appelle ''​cflags''​ pour définir l'​architecture détectée (ici x86_64), afin d'​appeler à nouveau ''​cflags i686''​ pour compiler en 32 bits sur un hôte en 64 bits. Puis on recompile en 64 bits. Les fichiers installés par l'​étape 64 bits écraseront ceux installés par l'​étape 32 bits. Les plus curieux auront remarqué qu'on appelle ''​preparer_sources''​ 3 fois en tout, ce qui est sinon une erreur, du moins une maladresse.
 +
 +<code bash>
 +#​!/​usr/​bin/​env bash
 +. /​usr/​share/​0outils/​fonctions_paquets.sh
 +
 +VERSION=1.29
 +WGET=http://​ftp.gnu.org/​gnu/​$NAMESRC/​$NAMESRC-$VERSION.tar.gz
 +DESC="​Bibliothèques pour noms de domaine internationalisés"​
 +
 +telecharger_sources
 +preparer_sources # À partir d'ici, on se trouve dans les sources décompactées.
 +cflags
 +
 +# On compile les bibliothèques 32 bits pour le multilib sous x86_64 :
 +if [ "​${PKGARCH}"​ = "​x86_64"​ ]; then
 +
 + # On passe en 32 bits (CFLAGS, LIBDIRSUFFIX,​ PKGARCH et Cie) :
 + cflags i686
 +
 + # Compilation pour i686 :
 + CFLAGS="​${FLAGS}"​ CXXFLAGS="​${FLAGS}"​ \
 + ./​configure \
 + --prefix=/​usr \
 + --sysconfdir=/​etc \
 + --localstatedir=/​var \
 + --libdir=/​usr/​lib${LIBDIRSUFFIX} \
 + --mandir=/​usr/​man \
 + --infodir=/​usr/​info \
 + --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \
 + --build=${PKGARCH}-0linux-linux-gnu
 +
 + make -j${JOBS} || make
 + fakeroot make install DESTDIR=${PKG}
 +fi
 +
 +# On refait la préparation des sources, il peut rester des déchets de la
 +# compilation en 32 bits (et make '​distclean'​ ne fonctionne pas toujours) :
 +preparer_sources # À partir d'ici, on se trouve dans les sources décompactées.
 +cflags
 +
 +# Compilation :
 +CFLAGS="​${FLAGS}"​ CXXFLAGS="​${FLAGS}"​ \
 +./configure \
 + --prefix=/​usr \
 + --sysconfdir=/​etc \
 + --localstatedir=/​var \
 + --libdir=/​usr/​lib${LIBDIRSUFFIX} \
 + --mandir=/​usr/​man \
 + --infodir=/​usr/​info \
 + --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \
 + --build=${PKGARCH}-0linux-linux-gnu
 +
 +make -j${JOBS} || make
 +fakeroot make install DESTDIR=${PKG}
 +
 +installer_doc
 +creer_post_installation
 +stripper
 +empaqueter
 +
 +# C'est fini.
 </​code>​ </​code>​
 ---- ----
Ligne 488: Ligne 573:
  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \
  --enable-bidule \  --enable-bidule \
- --build=${PKGARCH}-0-linux-gnu+ --build=${PKGARCH}-0linux-linux-gnu
  
 make -j${JOBS} || make make -j${JOBS} || make
Ligne 513: Ligne 598:
  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \  --docdir=/​usr/​doc/​${NAMETGZ}-${VERSION} \
  --enable-bidule \  --enable-bidule \
- --build=${PKGARCH}-0-linux-gnu+ --build=${PKGARCH}-0linux-linux-gnu
  
 cd - cd -
Ligne 597: Ligne 682:
 Les paquets-abonnements remplacent les anciens « dépôts » de 0Linux I, II et zeta et permettent de regrouper un ensemble de logiciels sous forme d'​abonnement (par exemple, tout KDE, GIMP et ses greffons, un ensemble d'​applications pour serveur Web, studio multimédia,​ etc.). Ils se nomment obligatoirement avec un suffixe « -abonnement » et leur recette est nommé ainsi : ''​nom-abonnement.recette''​. Les paquets-abonnements remplacent les anciens « dépôts » de 0Linux I, II et zeta et permettent de regrouper un ensemble de logiciels sous forme d'​abonnement (par exemple, tout KDE, GIMP et ses greffons, un ensemble d'​applications pour serveur Web, studio multimédia,​ etc.). Ils se nomment obligatoirement avec un suffixe « -abonnement » et leur recette est nommé ainsi : ''​nom-abonnement.recette''​.
  
-Les sources de 0Linux, contenues dans une arborescence géré par ''​git''​ (voir la page des téléchargements),​ contiennent des fichiers exemples (notamment le fichier ''​generique-abonnement.recette''​) ainsi que de multiples recettes sous ''​0abonnements/''​ dont on peut et devrait s'​inspirer. Voyez plus bas dans cette page pour une explication sur la syntaxe de la description du paquet-abonnement.+Les sources de 0Linux, contenues dans une arborescence géré par ''​git''​ (voir la page des téléchargements),​ contiennent des fichiers exemples (notamment le fichier ''​generique-abonnement.recette''​) ainsi que de multiples recettes sous ''​z/''​ dont on peut et devrait s'​inspirer. Voyez plus bas dans cette page pour une explication sur la syntaxe de la description du paquet-abonnement.
 ---- ----