[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ suivant ]
La place manque pour entrer dans tous les détails de modification des sources amont, mais voici quelques étapes fondamentales et problèmes qui reviennent souvent.
Le programme quilt
fournit la méthode fondamentale pour
enregistrer les modifications du code source pour l'empaquetage Debian.
Puisque de légères modifications au paramétrage par défaut sont
souhaitables pour l'empaquetage Debian, configurez ~/.quiltrc
comme suit : [11]
d=. ; while [ ! -d "$d/debian" -a `readlink -e $d` != / ]; do d="$d/.."; done if [ -d "$d/debian" ] && [ -z "$QUILT_PATCHES" ]; then # Cas d'empaquetage Debian avec $QUILT_PATCHES non configuré QUILT_PATCHES=debian/patches QUILT_PATCH_OPTS="--unified-reject-files" QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto" QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33" if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi fi
Voir quilt(1)
et /usr/share/doc/quilt/quilt.html
pour
apprendre à utiliser quilt
.
Si vous trouvez une erreur dans le fichier Makefile
amont comme
suit, où « install: gentoo » aurait dû être
« install: gentoo-target » :
install: gentoo install ./gentoo $(BIN) install icons/* $(ICONS) install gentoorc-example $(HOME)/.gentoorc
Corrigez l'erreur et enregistrez la modification avec la commande
quilt
sous fix-gentoo-target.patch
: [12]
$ mkdir debian/patches $ quilt new fix-gentoo-target.patch $ quilt add Makefile
Modifiez le fichier Makefile
comme suit :
install: gentoo-target install ./gentoo $(BIN) install icons/* $(ICONS) install gentoorc-example $(HOME)/.gentoorc
Demandez à quilt
de créer
debian/patches/fix-gentoo-target.patch
et ajoutez sa
description :
$ quilt refresh $ quilt header -e ... description du correctif
Normalement, les programmes s'installent d'eux-mêmes dans le sous-répertoire
/usr/local
. Puisqu'il est réservé à l'usage privé de
l'administrateur système (ou de l'utilisateur), les paquets Debian ne doivent
pas utiliser ce répertoire, mais devraient utiliser le sous-répertoire
/usr/bin
conformément à la norme de hiérarchie des fichiers
(FHS
,
/usr/share/doc/debian-policy/fhs/fhs-2.3.html
).
Habituellement, make(1)
est utilisé pour automatiser la
construction du programme et l'exécution de « make
install » installe les programmes directement à l'endroit voulu
par la cible install du fichier Makefile
. Pour
permettre à Debian de fournir des paquets binaires, le système de
construction installe les programmes dans l'image de l'arborescence de fichiers
créé dans un répertoire temporaire plutôt que dans la destination réelle.
Ces deux différences entre (1) l'installation normale du programme et (2)
l'empaquetage Debian peuvent être abordées de façon transparente par le
paquet debhelper
à l'aide des commandes
dh_auto_configure
et dh_auto_install
si les
conditions suivantes sont vérifiées :
le fichier Makefile
suit les conventions GNU pour gérer la
variable $(DESTDIR)
(/usr/share/doc/gnu-standards/standards.html#Makefile-Conventions
) ;
les sources suivent la norme de hiérarchie des fichiers (« Filesystem Hierarchy Standard » ou FHS).
Les programmes qui utilisent GNU autoconf
suivent
automatiquement la norme GNU et leur empaquetage est presque
automatique. Avec ceci et d'autres paramètres, le paquet
debhelper
est estimé fonctionner pour 90 % des paquets sans
modification intrusive à leur système de construction. L'empaquetage n'est
donc pas aussi compliqué qu'il y parait.
Si vous devez modifier le fichier Makefile
, vous devriez vous
assurer qu'il gère la variable $(DESTDIR). La variable
$(DESTDIR) n'y est pas configurée et précède chaque chemin de
fichier utilisé par le programme d'installation. Le script d'empaquetage
configurera $(DESTDIR) en tant que répertoire temporaire.
Le répertoire temporaire utilisé par la commande dh_auto_install
est choisi en tant que debian/paquet
pour les paquets
binaires simples. [13] Le
contenu du répertoire temporaire sera copié sur le système de l'utilisateur
qui installera votre paquet, la seule différence est que dpkg
placera ces fichiers dans le répertoire racine.
Gardez à l'esprit que même si le programme s'installe dans
debian/paquet
, il doit continuer à s'exécuter
correctement quand il est installé dans le répertoire racine, c'est-à-dire
quand il est installé à partir du paquet .deb
. Vous ne devez
donc pas laisser le système de construction coder en dur des chaînes de
caractères comme
/home/moi/deb/paquet-version/usr/share/paquet
dans les fichiers du paquet.
Voici les parties concernées du Makefile
de gentoo
[14] :
# Emplacement des binaires lors du 'make install' BIN = /usr/local/bin # Emplacement des icônes lors du 'make install' ICONS = /usr/local/share/gentoo
Les fichiers sont configurés pour s'installer sous /usr/local/
.
Changez ces chemins en :
# Emplacement des binaires lors du 'make install' BIN = $(DESTDIR)/usr/bin # Emplacement des icônes lors du 'make install' ICONS = $(DESTDIR)/usr/share/gentoo
Mais pourquoi dans ce répertoire, et pas dans un autre ? Parce que
Debian n'installe jamais de fichiers sous /usr/local
— cet
arbre est réservé à l'usage de l'administrateur système. Sur un système
Debian, de tels fichiers doivent plutôt aller sous /usr
.
Les emplacements exacts des exécutables, icônes, documentation, etc., sont
spécifiées dans la norme de hiérarchie des fichiers (voir
/usr/share/doc/debian-policy/fhs/
). Vous devriez la consulter et
lire les sections relatives à votre paquet.
Dès lors, l'exécutable devrait être installé sous /usr/bin
plutôt que sous /usr/local/bin
, la page de manuel sous
/usr/share/man/man1
plutôt que sous
/usr/local/man/man1
, etc. Remarquez qu'il n'y a pas de page de
manuel mentionnée dans le fichier Makefile
de
gentoo
, mais comme la Charte Debian demande que chaque programme
en ait une, il faudra en créer une plus tard et l'installer dans
/usr/share/man/man1
.
Certains programmes n'utilisent pas les variables des fichiers
Makefile
pour définir des chemins comme ceux-ci. Cela signifie
que vous risquez de devoir modifier de vrais fichiers sources C pour qu'ils
utilisent les emplacements corrects. Mais où, et que chercher
exactement ? Vous pouvez le découvrir avec :
$ grep -nr -e 'usr/local/lib' --include='*.[c|h]' .
grep
va parcourir récursivement l'arbre des sources et donner le
nom des fichiers et le numéro des lignes où il trouve une occurrence.
Modifiez ces fichiers et à ces lignes, remplacez usr/local/lib par usr/lib :
$ vim '+argdo %s/usr\/local\/lib/usr\/lib/gce|update' +q \ $(find . -type f -name '*.[c|h]')
Soyez attentif à ne pas casser le reste du code ! :-)
Ensuite, vous devriez trouver la cible d'installation (cherchez une ligne qui
commence par install:, d'ordinaire cela fonctionne) et renommez
toutes les références aux répertoires autres que ceux définis au début du
Makefile
.
Après la correction du bogue amont, la cible « install » de
gentoo
est sous la forme :
install: gentoo-target install ./gentoo $(BIN) install icons/* $(ICONS) install gentoorc-example $(HOME)/.gentoorc
Corrigez l'erreur et enregistrez la modification avec la commande
quilt
sous debian/patches/install.patch
:
$ quilt new install.patch $ quilt add Makefile
Pour le paquet Debian, il faut modifier comme suit avec l'éditeur :
install: gentoo-target install -d $(BIN) $(ICONS) $(DESTDIR)/etc install ./gentoo $(BIN) install -m644 icons/* $(ICONS) install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
Vous aurez sûrement remarqué qu'il y a maintenant une commande
« install -d » avant les autres dans la règle. Elle
n'existait pas dans Le fichier Makefile
originel parce
qu'habituellement /usr/local/bin et les autres répertoires
existent déjà sur le système dans lequel « make
install » est exécuté. Cependant, puisque dans notre cas les
répertoires d'installation sont vides (ou même inexistants), chacun de ces
répertoires doit être créé.
D'autres choses peuvent être ajoutés à la fin de la règle, comme l'installation de la documentation additionnelle que l'auteur amont oublie parfois :
install -d $(DESTDIR)/usr/share/doc/gentoo/html cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
Après avoir soigneusement vérifié que tout est bon, demandez à
quilt
de rafraîchir le correctif pour créer
debian/patches/install.patch
et ajoutez sa description.
$ quilt refresh $ quilt header -e ... description du correctif
Vous avez maintenant un ensemble de correctifs.
correction d'un bogue amont :
debian/patches/fix-gentoo-target.patch
;
modification spécifique à l'empaquetage Debian :
debian/patches/install.patch
;
Chaque fois que vous faites des modifications qui ne sont pas spécifiquement
liées à Debian comme debian/patches/fix-gentoo-target.patch
,
envoyez-les au responsable amont pour qu'elles puissent être incluses dans la
version suivante du programme et que tout le monde puisse en profiter.
Souvenez-vous aussi de ne pas rendre vos corrections spécifiques à Debian ou
Linux (ou même Unix !) avant de les envoyer — faites-les portables.
Cela rendra vos corrections beaucoup plus faciles à appliquer.
Remarquez que vous ne devez pas envoyer les fichiers debian/*
en
amont.
Il y a un autre problème courant : des bibliothèques sont souvent
différentes d'une plate-forme à l'autre. Par exemple, Makefile
peut contenir une référence à une bibliothèque qui n'existe pas sur les
systèmes Debian. Dans ce cas, changez-la en une bibliothèque qui existe dans
Debian, et qui sert à la même chose.
Ainsi, si une ligne de Makefile
(ou Makefile.in
) du
programme indique quelque chose comme ceci (et que le programme ne compile pas)
[15] :
LIBS = -lcurses -lquelquechose -lautrechose
Il suffit de le corriger dans debian/patches/ncurse.patch
en
modifiant curses en ncurses :
$ quilt new ncurse.patch $ quilt add Makefile $ sed -i -e "s/-lcurses/-lncurses/g" Makefile $ quilt refresh $ quilt header -e ... description du correctif
[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ suivant ]
Guide du nouveau responsable Debian
version 1.2.25, 2010-12-22 12:44:34 UTCjoy-mg@debian.org
frederic.dumont@easynet.be
adn+deb@diwi.org
david@tilapin.org
debian-l10n-french@lists.debian.org