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 18/05/2007, 01:32] – _Enchained | 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:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | // | ||
