== Détails des étapes de l'atelier « Paquet Debian » == {i} Cette section présente le détail des étapes que nous verrons ensemble pendant l'atelier. Il n'est pas nécessaire de les faire avant. '''Seuls les pré-requis sont indispensables et doivent avoir été préparés avant l'atelier.''' == Chercher un paquet Debian existant se rapprochant le plus du besoin == Ici on veut créer un paquet pour déployer facilement des polices laotiennes sur des postes installés selon la norme AuF, donc sous Ubuntu “Jaunty Jackalope” 9.04. Il est donc logique d'effectuer la recherche à partir de ce système : {{{ apt-cache search font lao }}} On remarque alors 2 paquets intéressants : `language-support-font-lo` et `ttf-lao`. On examine leur description avec la commande suivante : {{{ apt-cache show language-support-fonts-lo ttf-lao }}} On comprend alors que le premier sert à lister les paquets à installer automatiquement lorsqu'on demande à installer l'environnement de langue laotienne, tandis que le second contient effectivement des polices laotiennes, le premier paquet dépendant du second. == Récupérer les sources du paquet et les extraire == Ici notre choix va donc se porter sur le paquet `ttf-lao` qui correspond exactement au type de paquet que nous souhaitons faire. Il y a 2 façons possibles d'en récupérer les sources : * soit manuellement via le web : http://packages.ubuntu.com/source/jaunty/ttf-lao * soit automatiquement via un gestionnaire de paquets APT La seconde méthode étant généralement préférable, c'est celle que nous allons utiliser. Quand on fait un `apt-cache policy ttf-lao` on constate que ce paquet est dans la section `main`. Il faut donc tout d'abord s'assurer d'avoir au moins la ligne suivante dans son fichier `/etc/apt/sources.list` : {{{ deb-src http://archive.ubuntu.com/ubuntu/ jaunty main }}} ''Note : ne pas oublier de lancer `sudo aptitude update` après chaque modification du `sources.list`.'' On se placera ensuite dans un répertoire de travail pour y extraire les sources du paquet : {{{ mkdir ~/atelier-tap cd ~/atelier-tap apt-get source ttf-lao }}} Pour toute la suite des travaux, on va se placer dans le répertoire du paquet extrait : {{{ cd ttf-lao-* }}} == Étudier les informations et le contenu du paquet extrait == En listant le contenu du dossier courant avec `ls`, on constate que ce paquet est relativement simple : juste un fichier de police et un sous-dossier `debian`. Ce sous-dossier `debian` est celui qui contient toutes les informations nécessaires pour construire le paquet et il nous faut donc l'examiner, sans aller trop dans les détails (le guide d'empaquetage est là pour ça). L'un des fichiers les plus importants est le fichier `control` qui contient des informations générales sur le paquet (nom, section, priorité, mainteneur, ... dans la section `Source:`) ainsi que celles nécessaires pour construire le paquet à partir de ses sources (le `Build-Depends` de la section `Source:` et toutes les sections `Package:` suivantes). Le second fichier important est le fichier `rules` qui contient les « règles » de construction du paquets, généralement à la façon d'un `Makefile` (ce n'est pas grave si vous ne savez pas ce que c'est pour le moment). Un fichier non moins important est le fichier `changelog`, qui sert bien sûr à mémoriser la liste des changements effectués sur le paquets, mais également à préciser certaines informations qui seront utilisées pour la construction du paquet telles que le nom, le numéro de version et la distribution (ici `unstable` car ce paquet est une reprise directe de [[Debian]] sans adaptation pour [[Ubuntu]]). Et finalement un fichier très spécifique à ce type de paquet (concernant les polices) est le fichier `ttf-lao.defoma-hints`. Ce fichier contient des informations qui serviront au déploiement de cette police pour tous les logiciels les utilisant sur le système (Xwindow, pango, ghostscript, ...). Pour plus de détails à ce sujet voir les pages de manuels concernant `defoma`. == Adapter les informations pour le nouveau contenu == À présent nous allons commencer à nous occuper de notre propre paquet. Nous avons 3 stratégies possibles : * soit nous envoyons les nouvelles polices au mainteneur [[Debian]] pour qu'il les intègre dans le paquet `ttf-lao` * soit nous enrichissons le paquet actuel `ttf-lao` pour en produire une nouvelle version contenant des polices supplémentaires * soit nous créons un nouveau paquet sur le modèle de `ttf-lao` ne contenant que les polices supplémentaires La première méthode est certainement la meilleure, mais a plusieurs inconvénients dans notre cas précis : * nous dépendons alors de l'empaquetage au niveau de [[Debian]] : des délais du mainteneur, de l'entrée dans le dépôt officiel [[Debian]], puis de l'arrivée dans celui de [[Ubuntu]], qui ne sera dans tous les cas pas utilisable avant la prochaine version * les polices dont la licence n'est pas libre seront refusées La seconde méthode a l'inconvénient majeur de ne plus pouvoir profiter ensuite du système des mises à jour pour ce paquets précis, vu qu'une mise à jour supprimerait les polices supplémentaires pour revenir au contenu d'origine du paquet. La troisième méthode est donc la plus approprié par rapport à notre besoin ici : créer un paquet totalement indépendant et le maintenir nous-même. [[Progfou|Je]] propose de l'appeler `ttf-lao-auf`. Nous allons donc commencer par renommer tous les fichiers, y compris le répertoire courant, de `ttf-lao` vers `ttf-lao-auf`. On en profite également pour changer le numéro de version au passage : {{{ cd ~/atelier-tap mv ttf-lao-0.0.20060226 ttf-lao-auf-0.0.20100107 cd ttf-lao-auf-* rename s/ttf-lao/ttf-lao-auf/ debian/* sed -i s/ttf-lao/ttf-lao-auf/ debian/* }}} Il nous faut ensuite adapter le fichier `debian/control` par rapport à notre nouveau contenu : * le nom `ttf-lao` a déjà été remplacé partout par `ttf-lao-auf` grâce au `sed` précédent * remplacer le mainteneur après `Maintainer:` par votre propre nom et adél * adapter éventuellement la description pour être plus précise Il nous faut également recréer un fichier `debian/changelog` adapté à notre paquet, en utilisant les commandes suivantes : {{{ rm debian/changelog dch --create }}} Cela lancera un éditeur dans lequel il faudra changer les valeurs suivantes : * remplacer `PACKAGE` par `ttf-lao-auf` * remplacer `VERSION` par `0.0.20100107` * remplacer `UNRELEASED` par `unstable` * effacer la partie ` Closes: #XXXXXX)` (qui concerne une demande de création de paquet chez [[Debian]]) * remplacer l'adél par la vôtre (une adél correcte) Ensuite il nous faut copier [[http://www.laoscript.net/downloads/fonts/saysettha_ot.ttf|la ou les nouvelles polices TrueType]] dans le dossier principal du paquet (au même niveau que le sous-dossier `debian` et la police existante). Ne pas oublier de supprimer la police d'origine du paquet `ttf-lao` sinon il y aura un conflit au moment de l'installation ! Et enfin il nous faut générer un fichier de description des polices pour le système `defoma` : {{{ defoma-hints -c --no-question truetype *.ttf > debian/ttf-lao.defoma-hints }}} /!\ vu que `defoma-hints` [[http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=285653|ne fonctionne plus]] il nous faut faire sans en supprimant le fichier `debian/ttf-lao-auf.defoma-hints` et en créant un fichier `debian/postinst` avec le contenu suivant : {{{#!shell #!/bin/sh set -e fc-cache --system-only exit 0 }}} == Construire le paquet == Avant de pouvoir construire un paquet, il faut vérifier que toutes les dépendances requises pour la construction sont disponibles. Cela se fait avec la commande `dpkg-checkbuilddeps`, dans le dossier du contenu du paquet : {{{ cd ~/atelier-tap/ttf-lao-auf-* dpkg-checkbuilddeps }}} Ici on constate qu'il nous faut installer les paquets additionnels `build-essentials` et `cdbs` : {{{ sudo aptitude install build-essentials cdbs }}} Une fois que tout est prêt, construire un paquet est assez simple : on se place dans le dossier du contenu du paquet et on lance la commande `debuild` : {{{ cd ~/atelier-tap/ttf-lao-auf-* debuild -us -uc }}} ''Note : les options `-us` et `-uc` empêcheront la tentative de signer les paquets pour plus de sécurité, un sujet qui pourrait faire l'objet d'un autre atelier... ;-)'' On notera qu'il n'est pas nécessaire d'avoir les droits administrateur (`root`) pour construire un paquet, cela grâce à l'outil `fakeroot` qui va simuler un environnement root le temps de la construction. ----