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:ecole:paquets:packaging_cas_particuliers [Le 18/05/2007, 01:29]
_Enchained reformulation - part5 (patch cdbs)
projets:ecole:paquets:packaging_cas_particuliers [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 ptitdav69 suite à la séance de formation organisée par  [[utilisateurs:​gloubiboulga|gpocentek]] le 17 mai 2007 sur le canal IRC #ubuntu-fr-classroom. Encore merci à lui pour ses excellents cours.+{{tag>​paquet programmation}} 
 + 
 +----
  
 ====== Cas particuliers d'​empaquetage ====== ====== Cas particuliers d'​empaquetage ======
 +
 +//Cette page est le compte-rendu de la session classroom organisée par  [[:​utilisateurs:​gloubiboulga|gpocentek]] le 17 mai 2007 sur le canal IRC #​ubuntu-fr-classroom.//​
 +
 Dans ce cours, nous verrons : Dans ce cours, nous verrons :
   * logiciels ne nécessitant pas de compilation   * logiciels ne nécessitant pas de compilation
Ligne 12: Ligne 17:
 Pour suivre ce cours, vous devez connaître les bases du packaging avec [[:​tutoriel:​creer_un_paquet|debhelper]] et [[:​projets:​paquets:​creer_un_paquet_avec_cdbs|cdbs]]. Nous ne reviendrons donc pas sur ce qui a été vu dans les sessions précédentes sauf sur le fichier ''​debian/​rules''​. Pour suivre ce cours, vous devez connaître les bases du packaging avec [[:​tutoriel:​creer_un_paquet|debhelper]] et [[:​projets:​paquets:​creer_un_paquet_avec_cdbs|cdbs]]. Nous ne reviendrons donc pas sur ce qui a été vu dans les sessions précédentes sauf sur le fichier ''​debian/​rules''​.
  
-{{:​icons:​iconnote.png }} +<note help> 
->**Petit rappel sur le fichier debian/​rules** +**Petit rappel sur le fichier debian/​rules**\\ 
->Le fichier //​debian/​rules//​ est le script (un Makefile) qui permet de construire le paquet. Même si la plupart du temps il passe par une étape de compilation des sources, ce n'est pas une nécessité. Si le logiciel que vous empaquetez n'a pas besoin d'​être compilé, vous n'avez pas besoin que le debian/​rules ne compile quelque chose. C'est le cas pour un script bash, ou pour un programme python par exemple. +Le fichier //​debian/​rules//​ est le script (un Makefile) qui permet de construire le paquet. Même si la plupart du temps il passe par une étape de compilation des sources, ce n'est pas une nécessité. Si le logiciel que vous empaquetez n'a pas besoin d'​être compilé, vous n'avez pas besoin que le debian/​rules ne compile quelque chose. C'est le cas pour un script bash, ou pour un programme python par exemple. 
-> + 
->Le but de ce fichier est en fait d'​installer les fichiers du logiciel dans ''​**debian/​paquet**''​. Par exemple, si vous récupérez sur Internet un script ''​**foo.sh**'', ​ il suffit de copier ce fichier dans ''​**debian/​foo/​usr/​bin/​**''​ pour créer le paquet.+Le but de ce fichier est en fait d'​installer les fichiers du logiciel dans ''​**debian/​paquet**''​. Par exemple, si vous récupérez sur Internet un script ''​**foo.sh**'', ​ il suffit de copier ce fichier dans ''​**debian/​foo/​usr/​bin/​**''​ pour créer le paquet. 
 +</​note>​
  
 ===== Empaqueter un paquet ne nécessitant pas de compilation ===== ===== Empaqueter un paquet ne nécessitant pas de compilation =====
 Tout d'​abord,​ créez un répertoire propre (''​~/​packaging/​classroom''​ par exemple) pour éviter les soucis, placez-vous dedans et récupérez l'​archive suivante : Tout d'​abord,​ créez un répertoire propre (''​~/​packaging/​classroom''​ par exemple) pour éviter les soucis, placez-vous dedans et récupérez l'​archive suivante :
-  wget http://​gauvain.tuxfamily.org/school/​2007-05-17/​packages/​u-script.tar.gz+  wget http://​gauvain.pocentek.net/u-classroom/​2007-05-17/​packages/​u-script.tar.gz
   tar xvf u-script.tar.gz   tar xvf u-script.tar.gz
  
Ligne 37: Ligne 43:
   * d'​installer //​debian/​u-classroom//​ (qui est un wrapper) dans **/​usr/​bin**   * d'​installer //​debian/​u-classroom//​ (qui est un wrapper) dans **/​usr/​bin**
  
-{{:​icons:​iconnote.png }} +<note help>A quoi sert un **wrapper** :\\ 
->A quoi sert un **wrapper** : +Dans le cadre de ce cours, cela ne sert pas à grand chose mais pour beaucoup de script, le script doit être dans le même dossier que les données ce qui signifie l'​installer dans "​**/​usr/​share/<​paquet>​** avec les images ou autre.\\ 
->Dans le cadre de ce cours, cela ne sert pas à grand chose mais pour beaucoup de script, le script doit être dans le même dossier que les données ce qui signifie l'​installer dans "​**/​usr/​share/<​paquet>​** avec les images ou autre. +Dans ce cas, le script n'est pas directement accessible puisqu'​il n'est pas placé dans **/​usr/​bin**. Le wrapper sert juste d'​intermédiaire entre le script original installé ou il faut et "​l'​interface utilisateur"​ (i.e. lancement du script facilement en console) 
->Dans ce cas, le script n'est pas directement accessible puisqu'​il n'est pas placé dans **/​usr/​bin**. Le wrapper sert juste d'​intermédiaire entre le script original installé ou il faut et "​l'​interface utilisateur"​ (i.e. lancement du script facilement en console)+</​note>​
  
 **Comment installer ces 2 fichiers ?**\\ **Comment installer ces 2 fichiers ?**\\
Ligne 77: Ligne 83:
 Le paquet est mis à jour :) Le paquet est mis à jour :)
  
-{{utilisateurs:​enchained:​stop.png }} +<note important>​ 
->**ATTENTION**,​ //uupdate// n'est pas une formule magique ! +**ATTENTION**,​ //uupdate// n'est pas une formule magique !\\ 
->Tout est à revérifier pour une nouvelle version d'un paquet : vérifier que la licence n'a pas changé, que des fichiers n'ont pas été ajoutés...+Tout est à revérifier pour une nouvelle version d'un paquet : vérifier que la licence n'a pas changé, que des fichiers n'ont pas été ajoutés... 
 +</​note>​
  
 ==== Précisions sur le fichier ''​debian/​watch''​ ==== ==== Précisions sur le fichier ''​debian/​watch''​ ====
Ligne 86: Ligne 93:
 <​file>​version=3</​file>​ <​file>​version=3</​file>​
 qui doit toujours être à cette valeur, et qui doit toujours être à cette valeur, et
-<​file>​http://​gauvain.tuxfamily.org/school/​2007-05-17/​archive/​u-script-(.*)\.tar\.gz+<​file>​http://​gauvain.pocentek.net/u-classroom/​2007-05-17/​archive/​u-script-(.*)\.tar\.gz
 </​file>​ </​file>​
-Le répertoire où se trouvent les sources est donc **http://​gauvain.tuxfamily.org/school/​2007-05-17/​archive** et+Le répertoire où se trouvent les sources est donc **http://​gauvain.pocentek.net/u-classroom/​2007-05-17/​archive** et
 la fin de la ligne est une expression régulière qui laisse le choix pour la version. Les '​**.**'​ dans les regexp sont des caractères particuliers donc ils doivent être "​échappés"​ d'où le '​**\**'​ devant. la fin de la ligne est une expression régulière qui laisse le choix pour la version. Les '​**.**'​ dans les regexp sont des caractères particuliers donc ils doivent être "​échappés"​ d'où le '​**\**'​ devant.
  
Ligne 96: Ligne 103:
 ===== Empaqueter un logiciel en Python ===== ===== Empaqueter un logiciel en Python =====
  
-En fait, empaqueter du python c'est comme empaqueter n'​importe quoi mais il y a quelques règles à respecter : la fameuse [[http://wiki.debian.org/​DebianPython/NewPolicy|Python Policy]].+En fait, empaqueter du python c'est comme empaqueter n'​importe quoi mais il y a quelques règles à respecter : la fameuse [[http://www.debian.org/​doc/​packaging-manuals/​python-policy/|Python Policy]].
  
 Pour suivre ce cours, récupérez l'​archive suivante : Pour suivre ce cours, récupérez l'​archive suivante :
-  wget http://​gauvain.tuxfamily.org/school/​2007-05-17/​packages/​pyhw.tar.gz+  wget http://​gauvain.pocentek.net/u-classroom/​2007-05-17/​packages/​pyhw.tar.gz
  
 Il y a 4 versions du même paquet dans ce paquet source et nous allons commencer avec la version 1.\\ Il y a 4 versions du même paquet dans ce paquet source et nous allons commencer avec la version 1.\\
Ligne 127: Ligne 134:
 **Depends: ${python:​Depends}** permet de calculer les dépendances python (en incluant la version) et pycentral. **Depends: ${python:​Depends}** permet de calculer les dépendances python (en incluant la version) et pycentral.
  
-{{utilisateurs:​enchained:​warning.png }} +<​note>​ 
->**python:​Depends** ne calcule pas tout (pas comme **shlibs:​Depends** dans les paquets "​courants"​). Si votre paquet a besoin de **python-gtk2** (par exemple), il faudra l'​ajouter.+**python:​Depends** ne calcule pas tout (pas comme **shlibs:​Depends** dans les paquets "​courants"​). Si votre paquet a besoin de **python-gtk2** (par exemple), il faudra l'​ajouter. 
 +</​note>​
  
 **${python:​Provides}** : Dans notre exemple, cela ne sert à rien car notre paquet est **arch: all** (fonctionnel pour toutes les architectures) mais pour les modules privés de python (des .so), cela permet de définir des paquets virtuels.\\ **${python:​Provides}** : Dans notre exemple, cela ne sert à rien car notre paquet est **arch: all** (fonctionnel pour toutes les architectures) mais pour les modules privés de python (des .so), cela permet de définir des paquets virtuels.\\
Ligne 152: Ligne 160:
  
 ===== Patcher des sources ===== ===== Patcher des sources =====
- 
  
 ==== Paquet utilisant Debhelper ==== ==== Paquet utilisant Debhelper ====
Ligne 171: Ligne 178:
 Ceci permet d'​inclure des règles toute faites qui automatisent le "​patchage/​dépatchage"​. Ceci permet d'​inclure des règles toute faites qui automatisent le "​patchage/​dépatchage"​.
  
-Bien sûr, le paquet **dpatch** doit être [[:tutoriel_comment_installer_un_paquet|installé]] sur votre système.+Bien sûr, le paquet **dpatch** doit être [[:tutoriel:​comment_installer_un_paquet|installé]] sur votre système.
  
 Pour la cible ''​**build:​**''​ on ajoute **patch** et **unpatch** pour la cible ''​**clean :​**'',​ de façon à patcher les sources avant la compilation/​installation et remettre les sources en l'​état après la construction du paquet source. Pour la cible ''​**build:​**''​ on ajoute **patch** et **unpatch** pour la cible ''​**clean :​**'',​ de façon à patcher les sources avant la compilation/​installation et remettre les sources en l'​état après la construction du paquet source.
  
-{{:​utilisateurs:​enchained:​warning.png }} +<note important>Si dans le **debian/​rules** il y a une cible ''​**configure:​**'',​ c'est là qu'il faudra appliquer **patch**.</​note>​
->Si dans le **debian/​rules** il y a une cible ''​**configure:​**'',​ c'est là qu'il faudra appliquer **patch**.+
  
 Maintenant que vous savez appliquer les patches, voyons comment en créer ! Maintenant que vous savez appliquer les patches, voyons comment en créer !
Ligne 188: Ligne 194:
   dpatch-edit-patch 01-makefile   dpatch-edit-patch 01-makefile
  
-{{:​utilisateurs:​enchained:​astuce.png }} +<note tip> 
->Quand il y a plusieurs patchs, ils sont appliqués dans l'​ordre alphabétique. +Quand il y a plusieurs patchs, ils sont appliqués dans l'​ordre alphabétique.\\ 
->Commencer leur nom par un chiffre permet de savoir dans quel ordre ils seront appliqués. Lorsque l'on se retrouve avec 15-20 patches, c'est assez pratique. +Commencer leur nom par un chiffre permet de savoir dans quel ordre ils seront appliqués. Lorsque l'on se retrouve avec 15-20 patches, c'est assez pratique. 
-> + 
->le nom du patch est arbitraire. Ici nous nommons le patch **01-makefile** car c'est le premier patch crée (à appliquer) et qu'il agit sur le Makefile...+le nom du patch est arbitraire. Ici nous nommons le patch **01-makefile** car c'est le premier patch crée (à appliquer) et qu'il agit sur le Makefile... 
 +</​note>​
  
 Nous nous retrouvons dans un **nouveau shell**. Nous nous retrouvons dans un **nouveau shell**.
Ligne 216: Ligne 223:
   debuild -us -uc   debuild -us -uc
  
-Un Warning apparaîtra,​ nous reviendrons dessus plus bas : +Un Warning apparaîtra,​ nous reviendrons dessus plus bas :
 <​file>​ <​file>​
 W: python-helloworld:​ script-not-executable W: python-helloworld:​ script-not-executable
Ligne 228: Ligne 235:
  
 **Python-central** a donc complètement géré les problèmes de version de python (Depends: python, python-central (>= 0.5.8)). **Python-central** a donc complètement géré les problèmes de version de python (Depends: python, python-central (>= 0.5.8)).
- 
  
 ==== Paquet utilisant CDBS ==== ==== Paquet utilisant CDBS ====
Ligne 246: Ligne 252:
 Nous allons refaire le 2ème patch du paquet. Celui-ci corrigera le //Warning// que nous avons eu plus haut. Nous allons refaire le 2ème patch du paquet. Celui-ci corrigera le //Warning// que nous avons eu plus haut.
  
-Supprimer donc le fichier **debain/​patches/​02-shebang.patch** et exécutez :+Supprimer donc le fichier **debian/​patches/​02-shebang.patch** et exécutez :
   cdbs-edit-patch 02-shebang   cdbs-edit-patch 02-shebang
  
Ligne 257: Ligne 263:
 pour quitter cdbs-edit-patch. pour quitter cdbs-edit-patch.
  
-Votre patch est crée :)+Votre patch est créé.
  
 ===== Liens ===== ===== Liens =====
Ligne 263: Ligne 269:
   * [[https://​wiki.ubuntu.com/​MOTU/​School/​PatchingSources|(en) Patching Ubuntu packages (session donnée par Martin Pitt aka pitti qui est l'​auteur de {cdbs,​dpatch}-edit-patch)]]   * [[https://​wiki.ubuntu.com/​MOTU/​School/​PatchingSources|(en) Patching Ubuntu packages (session donnée par Martin Pitt aka pitti qui est l'​auteur de {cdbs,​dpatch}-edit-patch)]]
   * [[http://​wiki.debian.org/​DebianPython/​NewPolicy|(en) Debian Python NewPolicy]]   * [[http://​wiki.debian.org/​DebianPython/​NewPolicy|(en) Debian Python NewPolicy]]
 +
 +----
 +
 + //​Contributeurs:​ [[:​utilisateurs:​ptitdav69]],​ [[:​utilisateurs:​_Enchained]]//​
  • projets/ecole/paquets/packaging_cas_particuliers.1179444598.txt.gz
  • Dernière modification: Le 18/05/2007, 01:32
  • (modification externe)