Détails des étapes de l'atelier « Paquet Debian »
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.
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 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 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 :
#!/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.