Différences

Ci-dessous, les différences entre deux révisions de la page.

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
projets:paquets:creer_un_paquet_avec_cdbs [Le 05/11/2006, 01:31]
DvP
projets:paquets:creer_un_paquet_avec_cdbs [Le 11/09/2022, 13:17] (Version actuelle)
moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892)
Ligne 1: Ligne 1:
 +Article mis en forme par DvP suite à la séance de formation organisée par Gloubiboulga sur le canal IRC #​ubuntu-fr-classroom. Encore merci à lui pour ses excellents cours.
  
-Article mis en forme par DvP suite à la séance de formation organisée par Gloubiboulga ​sur le canal IRC #​ubuntu-fr-classroom. Encore merci à lui pour ces excellents cours.+Merci à Gloubiboulga pour la relecture et corrections. 
 + 
 +====== CDBS, un outil de création de paquets debian ======
  
-====== CDBS, un outil de création de paquets debian ====== ​ 
 ===== Présentation ===== ===== Présentation =====
-CDBS, pour Common Debian Build System, est un outil qui permet de simplifier votre debian/​rules. Il permet de faire la même chose que ce que vous pouvez faire avec debhelper. Pour certains paquets faits avec CDBS, le debian/​rules se résume à 2 lignes. CDBS est de plus en plus utilisé par les mainteneurs. Sous Ubuntu, GNOME, KDE et Xfce sont entièrement packagés grâce à CDBS.+CDBS, pour Common Debian Build System, est un outil qui permet de simplifier votre debian/​rules. Il permet de faire la même chose que ce que vous pouvez faire avec debhelper. Pour certains paquets faits avec CDBS, le debian/​rules se résume à 2 lignes. CDBS est de plus utilisé par les mainteneurs. Sous Ubuntu, GNOME, KDE et Xfce sont entièrement packagés grâce à CDBS. 
  
 ==== Pré requis ==== ==== Pré requis ====
-Pour pouvoir suivre cette documentation un certain nombre de pré-requis sont nécessaires :  +Pour pouvoir suivre cette documentation un certain nombre de pré-requis sont nécessaires : 
-  * Avoir suivi (ou lu) les cours précédents sur la création de paquets et la compilation ​des sources+  * Avoir suivi (ou lu) les cours précédents sur la [[tutoriel:​creer_un_paquet|création de paquets]] et la [[:​tutoriel:​compilation|compilation d'un programme]]
   * Installer sur votre ordinateur les paquets suivants :   * Installer sur votre ordinateur les paquets suivants :
     * devscripts     * devscripts
Ligne 17: Ligne 20:
     * fakeroot     * fakeroot
  
-Afin d'​installer rapidement ces paquets, ​exécuter la commande suivante ​+Afin d'​installer rapidement ces paquets ​
 + 
 +[[apt://​devscripts,​build-essential,​cdbs,​debhelper,​lintian,fakeroot|{{apt.png}}]] ou en console ​: 
 +<​code>​sudo apt-get install devscripts build-essential cdbs debhelper lintian fakeroot</​code>​
  
-  sudo apt-get install devscripts build-essential cdbs debhelper lintian fakeroot 
  
 ===== Initiation à CDBS ===== ===== Initiation à CDBS =====
 Une fois les paquets nécessaires à la création de paquets avec CDBS installés, regardez ensuite dans /​usr/​share/​cdbs/​1. Nous avons donc 2 dossiers (rules et class) qui contiennent des morceaux de debian/​rules que l'on va pouvoir inclure dans le notre. Les "​rules"​ sont des actions à exécuter suivant la méthode de compilation/​installation du logiciel que vous empaquetez, les "​class"​ permettent d'​automatiser différentes taches que l'on retrouve dans tous les paquets concernant un certain type de paquets. Une fois les paquets nécessaires à la création de paquets avec CDBS installés, regardez ensuite dans /​usr/​share/​cdbs/​1. Nous avons donc 2 dossiers (rules et class) qui contiennent des morceaux de debian/​rules que l'on va pouvoir inclure dans le notre. Les "​rules"​ sont des actions à exécuter suivant la méthode de compilation/​installation du logiciel que vous empaquetez, les "​class"​ permettent d'​automatiser différentes taches que l'on retrouve dans tous les paquets concernant un certain type de paquets.
  
-Regardons le fichier /​usr/​share/​cdbs/​1/​rules/​debhelper.mk (Vous pouvez vous servir de Firefox pour regarder ce genre de fichiers texte). Le début de ce script décrit les variables qu'il utilise. Puis un certain nombre de ces variables sont définies "automatiquement", en tenant compte par exemples ​d'​informations contenues dans debian/​changelog ou debian/​control. Ensuite une série de règles de Makefile sont décrites, avec les actions à exécuter. N'ayez pas peur, la syntaxe des fonctions avancées d'un Makefile ​fait peur, mais il est vraiment rare d'​avoir à s'en servir. Vous verrez enfin à la fin du fichier toute une série de dh_* appelés par ce script.+Regardons le fichier /​usr/​share/​cdbs/​1/​rules/​debhelper.mk (Vous pouvez vous servir de Firefox pour regarder ce genre de fichiers texte). Le début de ce script décrit les variables qu'il utilise. Puis un certain nombre de ces variables sont définies "automagiquement", en tenant compte par exemple ​d'​informations contenues dans debian/​changelog ou debian/​control. Ensuite une série de règles de Makefile sont décrites, avec les actions à exécuter. N'ayez pas peur, la syntaxe des fonctions avancées d'un Makefile ​est assez repoussante, mais il est vraiment rare d'​avoir à s'en servir. Vous verrez enfin à la fin du fichier toute une série de dh_* (scripts debhelper) ​appelés par ce fichier .mk.
  
 Tous les fichiers .mk livrés avec CDBS ont ce profil (debhelper.mk est un exemple assez complexe, gnome.mk est beaucoup plus simple). Tous les fichiers .mk livrés avec CDBS ont ce profil (debhelper.mk est un exemple assez complexe, gnome.mk est beaucoup plus simple).
Ligne 34: Ligne 39:
 Quand vous téléchargez un logiciel, 3 commandes suffisent souvent à le compiler/​installer (les fameuses commandes ./​configure,​ make et make install) mais vous pouvez aussi faire vous même la compilation en utilisant directement gcc ou g++. Quand vous téléchargez un logiciel, 3 commandes suffisent souvent à le compiler/​installer (les fameuses commandes ./​configure,​ make et make install) mais vous pouvez aussi faire vous même la compilation en utilisant directement gcc ou g++.
 C'est ce que font les 3 commandes, mais pour vous c'est beaucoup plus simple. C'est ce que font les 3 commandes, mais pour vous c'est beaucoup plus simple.
-C'est le même principe avec debhelper et cdbs, vous pouvez tout faire manuellement avec debhelper mais vous pouvez aussi utiliser cdbs qui fera le même boulot avec 2 lignes de code (en utilisant debhelper 99 fois sur 100). +C'est le même principe avec debhelper et cdbs, vous pouvez tout faire manuellement avec debhelper mais vous pouvez aussi utiliser cdbs qui fera le même boulot avec 2 lignes de code (en utilisant debhelper 99 fois sur 100).
  
 **Attention** : Notez que seul le debian/​rules est concerné par CDBS, le reste des fichiers de debian/ reste identique suivant que vous utilisiez debhelper ou CDBS. **Attention** : Notez que seul le debian/​rules est concerné par CDBS, le reste des fichiers de debian/ reste identique suivant que vous utilisiez debhelper ou CDBS.
  
-===== Création d'un paquet avec CDBS ===== +===== Création d'un paquet avec CDBS =====
 ==== Préparation ==== ==== Préparation ====
 On va aujourd'​hui empaqueter libtextcat (http://​software.wise-guys.nl/​libtextcat/​). On va procéder en 2 étapes. D'​abord en créant un paquet très laid, mais qui nous permettra de nous faire la main, puis en créant un vrai paquet, tout beau, et qui nous donnera plusieurs .debs. On va aujourd'​hui empaqueter libtextcat (http://​software.wise-guys.nl/​libtextcat/​). On va procéder en 2 étapes. D'​abord en créant un paquet très laid, mais qui nous permettra de nous faire la main, puis en créant un vrai paquet, tout beau, et qui nous donnera plusieurs .debs.
 +
 +
 +
 +
 +
  
 ==== 1 - Création du paquet « pas beau » ==== ==== 1 - Création du paquet « pas beau » ====
 Pour aller vite, Gloubiboulga a préparé un petit script qui va vous permettre de récupérer tous les fichiers nécessaires sur son site. Placez vous dans un dossier (le dossier ~/packaging de la première session fera très bien l'​affaire si vous l'avez toujours) et utilisez : Pour aller vite, Gloubiboulga a préparé un petit script qui va vous permettre de récupérer tous les fichiers nécessaires sur son site. Placez vous dans un dossier (le dossier ~/packaging de la première session fera très bien l'​affaire si vous l'avez toujours) et utilisez :
 <code bash> <code bash>
-wget http://​gauvain.tuxfamily.org/school/​2006-10-31/​get_files.sh+wget http://​gauvain.pocentek.net/u-classroom/​2006-10-31/​get_files.sh
 chmod a+x get_files.sh chmod a+x get_files.sh
 ./​get_files.sh init ./​get_files.sh init
 </​code>​ </​code>​
 +<note important>​Il faut modifier le script get_files.sh,​ et remplacer à la ligne 6 la valeur de BASE_URL par :
 +  BASE_URL="​http://​gauvain.pocentek.net/​u-classroom/​2006-10-31/​textcat"​
 +</​note>​
 Ceci va vous permettre de récupérer le paquet source orig.tar.gz de libtextcat et un dossier debian/ contenant les fichiers nécessaires à la création d'un paquet tout moche ;) Ceci va vous permettre de récupérer le paquet source orig.tar.gz de libtextcat et un dossier debian/ contenant les fichiers nécessaires à la création d'un paquet tout moche ;)
  
Ligne 57: Ligne 70:
 Puis choisir « b » pour la création d'un paquet en utilisant cdbs. Ceci générera le dossier debian/ ainsi que les fichiers au « format » cdbs. Puis choisir « b » pour la création d'un paquet en utilisant cdbs. Ceci générera le dossier debian/ ainsi que les fichiers au « format » cdbs.
  
-Pour le détail sur les fichiers contenus dans le dossier debian/ rapporter vous au précédent tutoriel : [[http://​doc.ubuntu-fr.org/​projets/​paquets/​creer_un_paquet|Créer un paquet]]+Pour le détail sur les fichiers contenus dans le dossier debian/ rapporter vous au précédent tutoriel : [[tutoriel:​creer_un_paquet|Créer un paquet]]
  
 === Contenu du dossier debian/ === === Contenu du dossier debian/ ===
Ligne 77: Ligne 90:
 Ces deux lignes pourraient suffire à faire le paquet, mais essayons d'​aller plus loin. Ces deux lignes pourraient suffire à faire le paquet, mais essayons d'​aller plus loin.
  
-Première chose : installer une page man. On a vu tout à l'​heure que de nombreuses variables sont définies dans debhelper.mk. L'​utilisateur de CDBS peut utiliser ces variables, les modifier ou les compléter pour adapter son paquet. Dans le cas d'un page man, c'est la variable DEB_INSTALL_MANPAGES_<​paquet>​ qui entre en jeu. Le paquet dans notre cas est "​textcat",​ et la page man debian/​createfp.8 (déjà écrite, et disponible dans le dossier debian/ que vous avez téléchargé).+Première chose : installer une page man. On a vu tout à l'​heure que de nombreuses variables sont définies dans debhelper.mk. L'​utilisateur de CDBS peut utiliser ces variables, les modifier ou les compléter pour adapter son paquet. Dans le cas d'une page man, c'est la variable DEB_INSTALL_MANPAGES_<​paquet>​ qui entre en jeu. Le paquet dans notre cas est "​textcat",​ et la page man debian/​createfp.8 (déjà écrite, et disponible dans le dossier debian/ que vous avez téléchargé).
  
 Pour assigner une valeur à la variable, on utilise le symbole ":​="​. Par exemple : //​DEB_INSTALL_MANPAGES_textcat := debian/​createfp.8 // Pour assigner une valeur à la variable, on utilise le symbole ":​="​. Par exemple : //​DEB_INSTALL_MANPAGES_textcat := debian/​createfp.8 //
Ligne 83: Ligne 96:
 CDBS saura qu'une page man existe, et dans quel paquet l'​installer lors de la construction du paquet binaire (en utilisant en fait dh_installman). CDBS saura qu'une page man existe, et dans quel paquet l'​installer lors de la construction du paquet binaire (en utilisant en fait dh_installman).
  
-Il n'y a pas d'​intérêt à détailler toutes les variables utilisables avec CDBS (il y en a des tonnes). Regarder ce qui se passe dans les fichiers .mk est certainement une meilleure idée. Vous pouvez pour cela utiliser grep pour rechercher quelque chose : +Il n'y a pas d'​intérêt à détailler toutes les variables utilisables avec CDBS (il y en a des tonnes). Regarder ce qui se passe dans les fichiers .mk est certainement une meilleure idée. Vous pouvez pour cela utiliser grep pour rechercher quelque chose :
 <code bash> <code bash>
 $ grep -Ri manpage /​usr/​share/​cdbs/​1 $ grep -Ri manpage /​usr/​share/​cdbs/​1
 </​code>​ </​code>​
-Ce qui vous donnera en retour :  +Ce qui vous donnera en retour :
 <code bash> <code bash>
 /​usr/​share/​cdbs/​1/​rules/​debhelper.mk: ​  ​dh_installman -p$(cdbs_curpkg) $(DEB_INSTALL_MANPAGES_$(cdbs_curpkg)) /​usr/​share/​cdbs/​1/​rules/​debhelper.mk: ​  ​dh_installman -p$(cdbs_curpkg) $(DEB_INSTALL_MANPAGES_$(cdbs_curpkg))
Ligne 93: Ligne 106:
 **Note sur grep** : -R permet de chercher dans tous les fichiers, -i de ne pas tenir compte de la casse. Cela donne une indication sur les variables à utiliser. Les noms des variables sont généralement suffisamment explicites pour permettre une recherche avec grep. **Note sur grep** : -R permet de chercher dans tous les fichiers, -i de ne pas tenir compte de la casse. Cela donne une indication sur les variables à utiliser. Les noms des variables sont généralement suffisamment explicites pour permettre une recherche avec grep.
  
-La documentation sur CDBS n'est pas très riche. La meilleure pour le moment est : http://​perso.duckcorp.org/​duck/​cdbs-doc/​cdbs-doc.xhtml+La documentation sur CDBS n'est pas très riche. La meilleure pour le moment est : [[http://​perso.duckcorp.org/​duck/​cdbs-doc/​cdbs-doc.xhtml]] traduite en français [[http://​perso.duckcorp.org/​duck/​cdbs-doc/​fr/​cdbs-doc.xhtml|ici]].
  
 === Customisation du paquet === === Customisation du paquet ===
Ligne 102: Ligne 115:
 Voyez http://​perso.duckcorp.org/​duck/​cdbs-doc/​cdbs-doc.xhtml#​id2452326 pour toutes les règles possibles à ajouter. Voyez http://​perso.duckcorp.org/​duck/​cdbs-doc/​cdbs-doc.xhtml#​id2452326 pour toutes les règles possibles à ajouter.
  
-__Petit rappel__ : Quand on lance le make install en construisant un paquet, ​ça s'installe ​dans debian/​paquet et pas sur le système local. Donc si on une action à faire, ​on la fait dans debian/​paquet.+__Petit rappel__ : Quand on lance le make install en construisant un paquet, ​l'installation se fait dans debian/​paquet et pas sur le système local. Donc si on une action ​est à faire, ​elle doit être faite dans debian/​paquet.
  
 === Compilation du paquet === === Compilation du paquet ===
Ligne 114: Ligne 127:
 debuild -us -uc debuild -us -uc
 </​code>​ </​code>​
-Contrairement à ce que nous avons fait lors de la première session, on ne passe pas par l'​étape paquet source puis pbuilder, puisque vous savez tous faire ça, que c'est long, et que ça n'a aucun intérêt aujourd'​hui ;)+Ce script utilise les fichiers téléchargés tout à l'​heure pour créer un vrai paquet (simplement en copiant le dossier textcat/​debian dans le dossier source décompressé). 
 +Contrairement à ce que nous avons fait lors de la première session, on ne passe pas par l'​étape paquet source puis [[:pbuilder]], puisque vous savez tous faire ça, que c'est long, et que ça n'a aucun intérêt aujourd'​hui ;)
  
 Après le '​moulinage'​ (compilation du paquet) effectuer un : Après le '​moulinage'​ (compilation du paquet) effectuer un :
Ligne 127: Ligne 141:
 Faites un 'dpkg -c' sur le .deb, ceci va lister le contenu du paquet. Vous verrez que vous avez un dossier sbin, et pas de bin ainsi qu'une manpage. Faites un 'dpkg -c' sur le .deb, ceci va lister le contenu du paquet. Vous verrez que vous avez un dossier sbin, et pas de bin ainsi qu'une manpage.
  
-On va maintenant construire un paquet multiple, pour satisfaire la debian policy en changeant le debian/​rules ​;)+On va maintenant construire un paquet multiple, pour satisfaire la debian policy en changeant le debian/​rules
  
 ==== 2 - Création du paquet en respectant la « debian policy » ==== ==== 2 - Création du paquet en respectant la « debian policy » ====
Ligne 156: Ligne 171:
 cat textcat/​debian/​libtextcat-dev.install cat textcat/​debian/​libtextcat-dev.install
 </​code>​ </​code>​
-La ligne src/​textcat.h usr/​include/​ utilise une syntaxe un peu différente. Elle permet en fait d'​installer le fichier src/​textcat.h dans debian/​libtextcat-dev/​usr/​include.+La ligne src/​textcat.h usr/​include/​ utilise une syntaxe un peu différente. Elle permet en fait d'​installer le fichier src/​textcat.h ​(fichier contenu dans les sources) ​dans debian/​libtextcat-dev/​usr/​include.
  
 Le debian/​rules est quasiment identique à celui de notre premier paquet, seul le paquet cible pour l'​installation de la page man et pour le renommage de bin en sbin est changé. Pas besoin d'​appeler dh_install explicitement,​ debhelper.mk s'en charge. Le debian/​rules est quasiment identique à celui de notre premier paquet, seul le paquet cible pour l'​installation de la page man et pour le renommage de bin en sbin est changé. Pas besoin d'​appeler dh_install explicitement,​ debhelper.mk s'en charge.
  
-=== Compilation du paquet ===  +=== Compilation du paquet === 
-Nous allons maintenant compiler les paquets :)+Nous allons maintenant compiler les paquets :
 <code bash> <code bash>
 rm -rf /​tmp/​textcat rm -rf /​tmp/​textcat
Ligne 179: Ligne 194:
   * libtextcat0_2.2-0ubuntu2_i386.deb   * libtextcat0_2.2-0ubuntu2_i386.deb
   * libtextcat-dev_2.2-0ubuntu2_i386.deb   * libtextcat-dev_2.2-0ubuntu2_i386.deb
- 
- 
- 
- 
- 
  • projets/paquets/creer_un_paquet_avec_cdbs.1162686661.txt.gz
  • Dernière modification: Le 05/11/2006, 01:36
  • (modification externe)