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
Prochaine révision Les deux révisions suivantes
tutoriel:creer_un_paquet [Le 30/11/2009, 16:21]
213.95.41.13
tutoriel:creer_un_paquet [Le 09/10/2021, 16:45]
88.166.188.193 [Création du paquet source] Makefile à la racine du projet
Ligne 5: Ligne 5:
 ====== Comment créer des paquets ? ====== ====== Comment créer des paquets ? ======
  
 +<​note>​Ici il est expliqué comment créer un paquet .deb depuis des sources, pour créer un .deb depuis une archive binaire voir [[tutoriel:​creation_deb|Création d'un paquet deb à partir d'une archive]]</​note>​
  
-===== Présentation =====+Dans une version récente d'un système [[:​GNU]]/​[[:​Linux]] comme peut l'​être Ubuntu, l'​installation de logiciels est devenue extrêmement facile grâce à [[:​software-center|La logithèque]] ou aux outils [[:​apt-get]] (en ligne de commande) ou [[:​Synaptic]] (Gnome) ou [[:Muon]] (KDE). Ces outils donnent accès à des [[:​dépôts]] contenant plus de 49000 paquets (([[https://​launchpad.net/​ubuntu/​vivid/​amd64|Ubuntu Vivid (15.04) dispose de 49031 paquets pour l'​architecture amd64]])). Pourtant, la richesse de l'​univers des [[wpfr>​logiciels libres]] fait que, malgré ce nombre important, il existe encore des applications qui ne sont pas empaquetées. Nous allons donc nous intéresser ici à la création de paquets Debian (les fameux fichiers « .deb », utilisés aussi dans Ubuntu) à partir des sources d'une application existante. 
 +<note aide>Il est aussi possible de créer un paquet d'une façon très simple avec [[:​checkinstall]]. Cette est décrit la procédure détaillée pour une validation sur des dépôts officiels que ne permet pas checkinstall.</​note>​
  
-Dans une version récente d'un système [[:​GNU]]/​[[:​Linux]] comme peut l'​être Ubuntu, l'​installation de logiciels est devenue extrêmement facile grâce aux outils [[:​apt-get]] (en ligne de commande) ou [[:​Synaptic]] (Gnome) ou [[:Adept]] (KDE) ou [[:​Aptitude]]. Ces outils donnent accès à des dépôts contenant pas loin de 18000 paquets. Pourtant, la richesse de l'​univers des logiciels libres fait que, malgré ce nombre important, il existe encore des applications qui ne sont pas packagées. Nous allons donc nous intéresser ici à la création de paquets Debian (les fameux fichiers « .deb »,​ utilisés aussi dans Ubuntu) à partir des sources d'une application existante. +===== 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 :
  
   * Les dépôts source doivent être disponibles dans synaptic (décommentez les lignes qui commencent par deb-src dans /​etc/​apt/​sources.list)   * Les dépôts source doivent être disponibles dans synaptic (décommentez les lignes qui commencent par deb-src dans /​etc/​apt/​sources.list)
-  * [[tutoriel:​comment_installer_un_paquet|Installez les paquets]] **debhelper cdbs lintian build-essential fakeroot devscripts pbuilder dh-make debootstrap** ([[apt://debhelper,cdbs,lintian,build-essential,fakeroot,devscripts,pbuilder,dh-make,debootstrap|en 1 clic]]).+  * [[tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt>debhelper,cdbs,lintian,build-essential,fakeroot,devscripts,pbuilder,dh-make,debootstrap|debhelper cdbs lintian build-essential fakeroot devscripts pbuilder dh-make debootstrap]]**
  
  
Ligne 23: Ligne 22:
 ==== Paquet binaire et paquet source ==== ==== Paquet binaire et paquet source ====
  
-Commençons par une petite précision technique. Les paquets binaires sont les paquets ​(.deb) qui contiennent ​les fichiers nécessaires à l'​application pour pouvoir fonctionner sur votre ordinateur. C'est ce que nous allons nous efforcer de créer. Tous les paquets binaires disponibles dans les dépôts Ubuntu ont été construits à partir de paquets sources. Un paquet source est un ensemble de fichiers (attention le terme de paquet est utilisé par analogie. Il n'y a pas ici de fichier conteneur comme peut l'​être le .deb pour les binaires) contenant les sources originelles de l'​application,​ ainsi que les indications des modifications nécessaires à la création du paquet debian.+Commençons par une petite précision technique ​:  
 + 
 +- Un paquet binaire est un paquet ​(.deb) qui contient ​les fichiers nécessaires à l'​application pour pouvoir fonctionner sur votre ordinateur. C'est ce que nous allons nous efforcer de créer. ​ 
 +Tous les paquets binaires disponibles dans les dépôts Ubuntu ont été construits à partir de paquets sources. ​ 
 + 
 +Un paquet source est un ensemble de fichiers (attention le terme de paquet est utilisé par analogie. Il n'y a pas ici de fichier conteneur comme peut l'​être le .deb pour les binaires) contenant les sources originelles de l'​application,​ ainsi que les indications des modifications nécessaires à la création du paquet debian.
  
 ==== Étude d'un exemple de paquet source ==== ==== Étude d'un exemple de paquet source ====
Ligne 47: Ligne 51:
 <​note>​Vous obtiendrez exactement ces fichiers si vous êtes sous Dapper, peut-être une autre version sous d'​autres versions d'​Ubuntu.</​note>​ <​note>​Vous obtiendrez exactement ces fichiers si vous êtes sous Dapper, peut-être une autre version sous d'​autres versions d'​Ubuntu.</​note>​
  
-Le fichier **xfce4-xkb-plugin_0.4.1.orig.tar.gz** est en fait l'​archive contenant les fichiers sources tels que l'on peut les obtenir sur le site du projet (typiquement ceux que l'on installe avec « ''​./​configure && make && make install''​ »). Le répertoire est d'​ailleurs issu de la décompressionde cette archive. Seul le nom du fichier a été changé pour des raisons que nous préciserons plus tard.+Le fichier **xfce4-xkb-plugin_0.4.1.orig.tar.gz** est en fait l'​archive contenant les fichiers sources tels que l'on peut les obtenir sur le site du projet (typiquement ceux que l'on installe avec « ''​./​configure && make && make install''​ »). Le répertoire est d'​ailleurs issu de la décompression de cette archive. Seul le nom du fichier a été changé pour des raisons que nous préciserons plus tard.
  
 Le fichier **xfce4-xkb-plugin_0.4.1-0ubuntu5.dsc** contient la description du paquet source (et des deux autres fichiers, avec leur taille et leur somme MD5). Le fichier **xfce4-xkb-plugin_0.4.1-0ubuntu5.dsc** contient la description du paquet source (et des deux autres fichiers, avec leur taille et leur somme MD5).
Ligne 67: Ligne 71:
 <note warning>​Faites attention à bien être dans **~/​packaging** : ''​rm -rf''​ efface tout sans confirmation !</​note>​ <note warning>​Faites attention à bien être dans **~/​packaging** : ''​rm -rf''​ efface tout sans confirmation !</​note>​
  
-  cd ~/packaging +  cd ~/​packaging ​&& ​rm -rf * # on nettoie :-)
-  ​rm -rf * # on nettoie :-)+
   mkdir epdfview && cd epdfview   mkdir epdfview && cd epdfview
   wget http://​gauvain.pocentek.net/​u-classroom/​2006-08-31/​epdfview-0.1.5.tar.gz   wget http://​gauvain.pocentek.net/​u-classroom/​2006-08-31/​epdfview-0.1.5.tar.gz
Ligne 185: Ligne 188:
 Il est important de faire attention à ce fichier car s'il est mal renseigné, le détenteur du copyright peut très bien aller jusqu'​à vous intenter un procès (la majorité se contenteront d'un mail vous signalant l'​erreur et, si vous êtes courtois, n'​hésiterons pas à vous aider). Mais soyez prudent(e) malgré tout, certains deviennent susceptibles dès que l'on écorne leur copyright. Il est important de faire attention à ce fichier car s'il est mal renseigné, le détenteur du copyright peut très bien aller jusqu'​à vous intenter un procès (la majorité se contenteront d'un mail vous signalant l'​erreur et, si vous êtes courtois, n'​hésiterons pas à vous aider). Mais soyez prudent(e) malgré tout, certains deviennent susceptibles dès que l'on écorne leur copyright.
  
-D'​ailleurs,​ lors de la réalisation d'un package n'​hésitez à contacter l'​auteur. C'est en général assez apprécié et cela peut vous permettre de faire valider ce fichier directement auprès de la personne concernée.+D'​ailleurs,​ lors de la réalisation d'un package n'​hésitez ​pas à contacter l'​auteur. C'est en général assez apprécié et cela peut vous permettre de faire valider ce fichier directement auprès de la personne concernée.
  
 === Le fichier « control » === === Le fichier « control » ===
Ligne 215: Ligne 218:
  
 La difficulté principale de cette étape est d'​indiquer correctement les Build-Depends. Elles peuvent être déterminées en fouillant les sources ou en compilant à la main l'​application (grâce aux messages d'​erreurs du ./configure notamment). Elles sont quelquefois indiquées sur le site du projet. La difficulté principale de cette étape est d'​indiquer correctement les Build-Depends. Elles peuvent être déterminées en fouillant les sources ou en compilant à la main l'​application (grâce aux messages d'​erreurs du ./configure notamment). Elles sont quelquefois indiquées sur le site du projet.
-Attention lors des tests sur votre machine. Il se peut qu'une dépendance nécessaire soit déjà installée et que la compilation fonctionne (à priori) parfaitement. Cependant tous les paquets ubuntu sont compilés dans un environnement vierge. Si la ligne "​Build-Depends:"​ n'est pas exacte, la compilation risque alors d'​échouer (pbuilder ​ est un outil indispensable pour tester les Build Depends, nous en reparlerons plus tard). +Attention lors des tests sur votre machine. Il se peut qu'une dépendance nécessaire soit déjà installée et que la compilation fonctionne (à priori) parfaitement. Cependant tous les paquets ubuntu sont compilés dans un environnement vierge. Si la ligne "​Build-Depends:"​ n'est pas exacte, la compilation risque alors d'​échouer (pbuilder ​ est un outil indispensable pour tester les Build Depends, nous en reparlerons plus tard). ​Vous pouvez obtenir la liste des dépendances de epdview en exécutant cette commande: <code bash> 
 +apt-cache show epdfview 
 +</​code>​
 == Le paquet « debhelper » == == Le paquet « debhelper » ==
  
Ligne 237: Ligne 241:
   * build: correspond au `make` ($(MAKE))   * build: correspond au `make` ($(MAKE))
   * install: correspond au `make install`   * install: correspond au `make install`
 +
 +<note important>//​ATTENTION//​ : si l'on met un fichier Makefile à la racine de son projet, rules lancera la première cible ce qui est potentiellement catastrophique (si la 1ère cible est "​debuild",​ il tournera en boucle par exemple)</​note>​
  
 Ici l'​installation se fait dans "​$(CURDIR)/​debian/​epdfview",​ donc dans le dossier « debian/​ » créé tout à l'​heure. Ici l'​installation se fait dans "​$(CURDIR)/​debian/​epdfview",​ donc dans le dossier « debian/​ » créé tout à l'​heure.
Ligne 256: Ligne 262:
 (vous aurez remarqué que dh_installman fait partie des outils du paquet debhelper). (vous aurez remarqué que dh_installman fait partie des outils du paquet debhelper).
  
-Pour avoir des informations sur tous les outils dh_* que vous voyez listés dans ce fichier n'​hésitez pas à consulter les pages man. Une bonne partie ​d'entre elles seront francisées (n'​oubliez pas d'​installer ​le paquet manpages-fr pour pouvoir les lire).+Pour avoir des informations sur tous les outils dh_* que vous voyez listés dans ce fichier n'​hésitez pas à consulter les pages man. Elles ont toutes été traduites en français (et en espagnol). Ces traductions font partie ​intégrante de debhelper et s'installent donc automatiquement. Si votre "​locale"​ est «*.fr» alors « man dh_* » affiche directement la version française, sinon il faut le spécifier avec « man -fr dh_* ».
  
 Une fois arrivé ici notre paquet source est prêt, il ne nous reste plus qu'à le créer vraiment pour pouvoir retrouver les trois fichiers que nous avons vus plus tôt, dans notre premier exemple. Une fois arrivé ici notre paquet source est prêt, il ne nous reste plus qu'à le créer vraiment pour pouvoir retrouver les trois fichiers que nous avons vus plus tôt, dans notre premier exemple.
Ligne 325: Ligne 331:
 </​note>​ </​note>​
  
-Si vous avez le droit au passage à l'​erreur suivante : 
  
-<​code>​ 
-debsign: gpg error occurred! ​ Aborting.... 
-debuild: fatal error at line 1155: 
-running debsign failed 
-</​code>​ 
- 
-C'est sûrement que vous utilisez [[:​seahorse]] pour gérer vos clef PGP. Dans ce 
-cas, il s'agit d'un bug (#78165) que vous pouvez contourner en éditant le 
-fichier /​etc/​devscripts.conf pour y rajouter la ligne : 
- 
-<​code>​ 
-DEBUILD_PRESERVE_ENVVARS="​DISPLAY"​ 
-</​code>​ 
  
 Pour voir le résultat : Pour voir le résultat :
Ligne 361: Ligne 353:
  
 <​code>​ <​code>​
-sudo echo "​COMPONENTS=\"​main restricted universe multiverse\"" ​>> ​/​etc/​pbuilderrc+echo "​COMPONENTS=\"​main restricted universe multiverse\"" ​| sudo tee -a /​etc/​pbuilderrc
 sudo pbuilder update sudo pbuilder update
 </​code>​ </​code>​
  
-Pour initialiser ​pbuider, tapez dans votre terminal : +Pour initialiser ​pbuilder, tapez dans votre terminal : 
  
 <​code>​ <​code>​
Ligne 379: Ligne 371:
 (feisty peut être remplacé par le nom de code d'une autre version d'​Ubuntu).</​note>​ (feisty peut être remplacé par le nom de code d'une autre version d'​Ubuntu).</​note>​
  
-Ces commandes peuvent être lancées en début de travail dans un autre terminal, car cette étape peut prendre un certain temps. N'​étant utilisé qu'la fin vous pouvez très bien commencer à préparer vos paquets sources pendant ce temps.+Ces commandes peuvent être lancées en début de travail dans un autre terminal, car cette étape peut prendre un certain temps. N'​étant utilisé qu'à la fin vous pouvez très bien commencer à préparer vos paquets sources pendant ce temps.
  
  
 ===Création du paquet binaire=== ===Création du paquet binaire===
  
-Une fois l'​étape précédente terminée il ne vous reste plus qu'taper la commande suivante pour compiler votre paquet source (dans « ~/​packaging/​epdfview ») :+Une fois l'​étape précédente terminée il ne vous reste plus qu'à taper la commande suivante pour compiler votre paquet source (dans « ~/​packaging/​epdfview ») :
  
 <code bash> <code bash>
Ligne 390: Ligne 382:
 </​code>​ </​code>​
  
-Et à laisser mariner… en cas d'​erreur de dépendance (eh oui cela peut encore arriver pendant la compilation) reprendre à l'​étape **Création du paquet binaire** en ajoutant le paquet manquant avant lancer le //build//, il est possible d'​ajouter plusieurs ​paquet ​en les séparants ​avec une espace :+Et à laisser mariner… en cas d'​erreur de dépendance (eh oui cela peut encore arriver pendant la compilation) reprendre à l'​étape **Création du paquet binaire** en ajoutant le paquet manquant avant lancer le //build//, il est possible d'​ajouter plusieurs ​paquets ​en les séparant ​avec un espace :
  
 <code bash> <code bash>
Ligne 426: Ligne 418:
  
  
 +===== Foire aux questions =====
 +
 +=== Est-ce que je dois passer en root pour créer mon paquet ? ===
 +
 +Ce n'est pas nécessaire,​ et absolument pas recommandé. Seule l'​installation d'un .deb et la compilation avec [[:​pbuilder]] nécessitent d'​être super utilisateur.
 +
 +=== L'​étape de création de paquet échoue au make, comment gérer les dépendances ? ===
 +
 +`sudo pbuilder login` vous amènera dans l'​environnement chrooté, donc sans paquets installés. Utilisez le `./​configure && make` ici pour savoir quels paquets sont nécessaires à la compilation.
 +
 +=== Après avoir exécuté `debuild -S -sa`, je n'ai pas de .diff.gz ! ===
 +
 +C'est que la syntaxe de votre .orig.tar.gz n'est pas correcte. Vérifiez bien qu'il est de la forme : nomDuPaquet**_**x.y.z.orig.tar.gz
 +
 +Notez le '​_'​ (pas de '​-'​),​ qui est souvent source d'​erreur.
 +
 +Lors de l'​exécution de `debuild -S -sa`, vous pouvez vérifier qu'il a bien créé le .diff.gz et tenu compte de votre .orig.tar.gz en cherchant les lignes suivantes :
 +  dpkg-source:​ building foo using existing foo_x.y.z.orig.tar.gz
 +  dpkg-source:​ building foo in foo_x.y.z-0ubuntu1.diff.gz
 +
 +=== Le programme que je veux empaqueter est fourni dans un .tar.bz2. Qu'​est-ce que j'en fait ? ===
 +
 +Il faut absolument avoir une archive compressée avec gzip. Décompressez ce que vous avez téléchargé avec :
 +
 +  bunzip2 foo-x.y.z.tar.bz2
 +
 +puis recompressez avec gzip (compression maximale) :
 +
 +  gzip -9 foo-x.y.z.tar
 +
 +Renommez enfin votre archive pour avoir un .orig.tar.gz correct.
 +
 +=== De nombreuses applications sous Ubuntu sont disponibles via plusieurs paquets notamment app.deb et app-common.deb. Comment cela est il obtenu ? ===
 +
 +
 +Cela nécessite deux étapes :
 +
 +  * Décrire les deux paquets binaires résultants dans debian/​control (en plus de la description du paquet source)
 +  * en installant les fichiers voulus dans les dossiers debian/app et debian/​app-common
 +
 +L'​intérêt de ce procédé est de n'​avoir qu'un seul paquet -common sur les dépôts, utilisable sur toutes les architectures (des images, fichiers .xml, etc).
 +
 +=== Quand on installe un paquet qui va dans « /​usr/​include »,​ il y reste ? ===
 +
 +Oui, jusqu'​au moment où on l'​enlève. On peut enlever après la compilation.
 +
 +=== Comment faire pour tester un paquet sans toucher à son système de base ? ===
 +
 +FIXME
 +<note tip>Une des solutions pour tester est d'​utiliser un système virtualisé (à l'aide de [[::​virtualbox|VirtualBox]] par exemple). En utilisant correctement les //​snapshots//,​ on peut facilement faire un rollback du système virtualisé avant l'​installation du paquet.</​note>​
 +
 +<note tip>Une autre solution est d'​utiliser Docker.</​note>​
 +
 +----
  
 +//​Contributeurs : [[utilisateurs:​Ju]],​ [[utilisateurs:​lordphoenix]],​ [[utilisateurs:​kagou]],​ [[utilisateurs:​Sp4rky]],​ [[utilisateurs:​itoon]],​ [[utilisateurs:​Gloubiboulga]].//​
  
-نحن دجميع الشبيبات ​+//Suite à la séance de formation organisée par [[utilisateurs:​Gloubiboulga]] sur le canal IRC #​ubuntu-fr-classroom.//​
  • tutoriel/creer_un_paquet.txt
  • Dernière modification: Le 23/10/2023, 12:12
  • par polobuntu