Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
projets:ecole:paquets:packaging_cas_particuliers [Le 17/05/2007, 23:07] – DvP | projets:ecole:paquets:packaging_cas_particuliers [Le 15/12/2011, 15:17] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | |||
+ | ====== Cas particuliers d' | ||
+ | |||
+ | //Cette page est le compte-rendu de la session classroom organisée par [[: | ||
+ | |||
+ | Dans ce cours, nous verrons : | ||
+ | * logiciels ne nécessitant pas de compilation | ||
+ | * mise à jour de paquets à partir de '' | ||
+ | * paquets avec python | ||
+ | * patcher des sources | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | Pour suivre ce cours, vous devez connaître les bases du packaging avec [[: | ||
+ | |||
+ | <note help> | ||
+ | **Petit rappel sur le fichier debian/ | ||
+ | Le fichier // | ||
+ | |||
+ | Le but de ce fichier est en fait d' | ||
+ | </ | ||
+ | |||
+ | ===== Empaqueter un paquet ne nécessitant pas de compilation ===== | ||
+ | Tout d' | ||
+ | wget http:// | ||
+ | tar xvf u-script.tar.gz | ||
+ | |||
+ | Entrer dans le dossier " | ||
+ | dpkg-source -x *dsc | ||
+ | |||
+ | Entrez dans le dossier source (venant d' | ||
+ | |||
+ | Le dossier **debian** contient : | ||
+ | < | ||
+ | |||
+ | Les fichiers qui vont nous intéresser sont //dirs//, // | ||
+ | |||
+ | Le but est donc : | ||
+ | * d' | ||
+ | * d' | ||
+ | |||
+ | <note help>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' | ||
+ | Dans ce cas, le script n'est pas directement accessible puisqu' | ||
+ | </ | ||
+ | |||
+ | **Comment installer ces 2 fichiers ?**\\ | ||
+ | Les fichiers // | ||
+ | |||
+ | **Le fichier // | ||
+ | Nous pouvons déjà remarquer qu'il n'y a pas de cible ''" | ||
+ | Il y a une cible ''" | ||
+ | Par contre la règle ''" | ||
+ | // | ||
+ | |||
+ | Lancer le debuild du paquet pour construire le paquet source : | ||
+ | debuild -us -uc | ||
+ | |||
+ | Fin de cette partie :) | ||
+ | |||
+ | ===== Mettre à jour un paquet grâce à debian/ | ||
+ | |||
+ | Reprenez l' | ||
+ | |||
+ | Dans le dossier source (u-script-1.0/ | ||
+ | uscan | ||
+ | |||
+ | En regardant dans le répertoire parent | ||
+ | ls .. | ||
+ | vous voyez que la version 0.2 a été téléchargée et l' | ||
+ | Nous allons nous servir de cela pour mettre à jour le paquet. | ||
+ | |||
+ | Restez dans le répertoire source (u-script-1.0/ | ||
+ | uupdate ../ | ||
+ | Puis placez vous de le répertoire nouvellement crée, comme le suggère le script | ||
+ | cd ../ | ||
+ | Enfin, construisez le paquet source | ||
+ | debuild -us -uc | ||
+ | |||
+ | Le paquet est mis à jour :) | ||
+ | |||
+ | <note important> | ||
+ | **ATTENTION**, | ||
+ | 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... | ||
+ | </ | ||
+ | |||
+ | ==== Précisions sur le fichier '' | ||
+ | |||
+ | Il est composé de 2 lignes : | ||
+ | < | ||
+ | qui doit toujours être à cette valeur, et | ||
+ | < | ||
+ | </ | ||
+ | Le répertoire où se trouvent les sources est donc **http:// | ||
+ | la fin de la ligne est une expression régulière qui laisse le choix pour la version. Les ' | ||
+ | |||
+ | Pour plus d' | ||
+ | man uscan | ||
+ | |||
+ | ===== Empaqueter un logiciel en Python ===== | ||
+ | |||
+ | En fait, empaqueter du python c'est comme empaqueter n' | ||
+ | |||
+ | Pour suivre ce cours, récupérez l' | ||
+ | wget http:// | ||
+ | |||
+ | Il y a 4 versions du même paquet dans ce paquet source et nous allons commencer avec la version 1.\\ | ||
+ | Pour cela : | ||
+ | tar zxvf pyhw.tar.gz | ||
+ | cd pyhw/v1 | ||
+ | dpkg-source -x *dsc | ||
+ | |||
+ | Tout va se passer dans les fichiers // | ||
+ | |||
+ | ==== pycompat ==== | ||
+ | |||
+ | Le fichier // | ||
+ | |||
+ | ==== control ==== | ||
+ | |||
+ | Pour ce qui concerne le fichier // | ||
+ | |||
+ | Ces deux dépendances n'ont rien à voir avec les sources, c'est vraiment propre au packaging avec Python. | ||
+ | |||
+ | C'est pour cela (en simplifiant) qu' | ||
+ | |||
+ | **XS-Python-Version: | ||
+ | |||
+ | **XB-Python-Version: | ||
+ | |||
+ | **Depends: ${python: | ||
+ | |||
+ | < | ||
+ | **python: | ||
+ | </ | ||
+ | |||
+ | **${python: | ||
+ | Par exemple si le module est compatible python 2.4 et 2.5 nous obtiendrons Provides: **python2.4-foo** et **python2.5-foo**. L' | ||
+ | |||
+ | Essayons maintenant de compiler le paquet ([[: | ||
+ | |||
+ | cd pyhw-1.0 | ||
+ | debuild -us -uc | ||
+ | |||
+ | Nous obtiendrons une erreur : | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | Le problème se situe dans le Makefile. Ouvrez ce fichier pour comprendre pourquoi. Vous voyez alors :\\ | ||
+ | < | ||
+ | install -d / | ||
+ | qui permet de créer un dossier mais /// | ||
+ | |||
+ | Cela ne peut pas marcher et il faudra donc modifier le Makefile pour utiliser **$(DESTDIR)/ | ||
+ | |||
+ | Comme tout bon packageur, vous savez qu'il __ne faut pas modifier les sources__ de upstream. Nous allons donc **patcher** le Makefile... | ||
+ | |||
+ | ===== Patcher des sources ===== | ||
+ | |||
+ | ==== Paquet utilisant Debhelper ==== | ||
+ | |||
+ | Nous venons de voir ci-dessus qu'il était nécessaire de patcher le // | ||
+ | cd pyhw/v2 && dpkg-source -x *.dsc | ||
+ | |||
+ | Dans le dossier **debian**, nous avons un dossier **patches** qui contient le patch **01-makefile.dpatch** et le fichier **00list**, qui est en fait la liste des patches à appliquer. | ||
+ | |||
+ | On utilise ici **dpatch** comme système de patch. | ||
+ | |||
+ | Le fichier **debian/ | ||
+ | < | ||
+ | # Include dpatch stuff. | ||
+ | include / | ||
+ | </ | ||
+ | |||
+ | Ceci permet d' | ||
+ | |||
+ | Bien sûr, le paquet **dpatch** doit être [[: | ||
+ | |||
+ | Pour la cible '' | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Maintenant que vous savez appliquer les patches, voyons comment en créer ! | ||
+ | |||
+ | Pour ce faire, nous allons repartir de zéro, et supprimer le patch déja présent dans le paquet : | ||
+ | rm debian/ | ||
+ | |||
+ | Pour créer un patch, il existe un outil très pratique: '' | ||
+ | |||
+ | Exécuter la commande suivant pour créer le patch : | ||
+ | dpatch-edit-patch 01-makefile | ||
+ | |||
+ | <note tip> | ||
+ | Quand il y a plusieurs patchs, ils sont appliqués dans l' | ||
+ | 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... | ||
+ | </ | ||
+ | |||
+ | Nous nous retrouvons dans un **nouveau shell**. | ||
+ | |||
+ | Faites alors les modifications voulues, c'est à dire ajoutez **$(DESTDIR)** dans le // | ||
+ | < | ||
+ | install -d $(DESTDIR)/ | ||
+ | install -m 644 src/*py $(DESTDIR)/ | ||
+ | </ | ||
+ | |||
+ | Enregistrez le fichier, puis lorsque la modification pour ce patch est terminée, tapez : | ||
+ | exit 0 | ||
+ | pour quitter le shell " | ||
+ | |||
+ | Vous pouvez vérifier le contenu de **debian/ | ||
+ | |||
+ | Il ne reste plus qu'à [[: | ||
+ | < | ||
+ | |||
+ | Vous venez de patcher le makefile :) | ||
+ | |||
+ | Vous pouvez ensuite construire le paquet source : | ||
+ | debuild -us -uc | ||
+ | |||
+ | Un Warning apparaîtra, | ||
+ | < | ||
+ | W: python-helloworld: | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | En lançant la commande | ||
+ | dpkg -f *deb | ||
+ | vous verrez que pycentral a correctement remplacé les dépendances par les paquets appropriés :\\ | ||
+ | Le // | ||
+ | |||
+ | **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 ==== | ||
+ | |||
+ | Nous allons passer directement à la version 4 de notre paquet **pyhw** (la v3 étant la même que la 2 mais version cdbs) | ||
+ | |||
+ | cd pyhw/v4 && dpkg-source -x *.dsc | ||
+ | |||
+ | Dans **debian/ | ||
+ | |||
+ | Le fichier **debian/ | ||
+ | < | ||
+ | include / | ||
+ | </ | ||
+ | qui sert à inclure tout le système de patch de CDBS qui traitera tous fichier avec extension .patch du répertoire **debian/ | ||
+ | |||
+ | Nous allons refaire le 2ème patch du paquet. Celui-ci corrigera le //Warning// que nous avons eu plus haut. | ||
+ | |||
+ | Supprimer donc le fichier **debian/ | ||
+ | cdbs-edit-patch 02-shebang | ||
+ | |||
+ | Ce //Warning// est assez courant avec tous les scripts et les modules python sont pas destinés à être exécutés et donc le shebang (# | ||
+ | |||
+ | Il faut donc supprimer la première ligne du fichier **src/ | ||
+ | |||
+ | Une fois la modification effectuée, tapez | ||
+ | exit 0 | ||
+ | pour quitter cdbs-edit-patch. | ||
+ | |||
+ | Votre patch est créé. | ||
+ | |||
+ | ===== Liens ===== | ||
+ | |||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | // |