[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


Apt howto
Chapitre 5 - Construction à partir des sources


5.1 Téléchargement de paquets source

Il est courant dans le monde des logiciels libre d'étudier le code source ou même de faire des corrections sur du code bogué. La construction à partir des sources peut être aussi utile si vous voulez activer des fonctionnalités qui sont désactivées dans le paquet officiel, ou en désactiver certaines qui étaient activées. Pour ce faire, vous aurez besoin de télécharger le code source du programme. Le système APT fournit une manière facile d'obtenir le code source de beaucoup de programmes contenus dans la distribution, y compris les fichiers nécessaires pour créer un .deb du programme.

Une autre utilisation courante des sources Debian est l'adaptation d'une version plus récente d'un programme de la distribution unstable pour l'utiliser avec la distribution stable. La compilation d'un paquet contre stable générera des .deb avec des dépendances ajustées pour correspondre aux paquets disponibles dans cette distribution.

Pour accomplir ceci, l'entrée deb-src de votre /etc/apt/sources.list devrait pointer vers unstable. Il devrait aussi être activé (décommenté). Regardez la section Le fichier /etc/apt/sources.list, Section 3.1.

Le gestionnaire de paquets Aptitude est principalement axé sur les paquets binaires. Pour utiliser les paquets source, nous aurons besoin d'utiliser à la place apt-get. Pour télécharger un paquet source, vous devrez utiliser la commande suivante :

     $ apt-get source nomdupaquet

Cela téléchargera trois fichiers : un .orig.tar.gz, un .dsc et un .diff.gz. Dans le cas des paquets Debian natifs, le dernier fichier cité n'est pas téléchargé et le premier n'aura pas « orig » dans son nom.

Le fichier .dsc est utilisé par dpkg-source pour déballer le paquet source dans le répertoire nomdupaquet-version. Il y a un répertoire debian/ qui contient les fichiers nécessaires pour la création du paquet .deb avec chaque paquet source téléchargé.

Pour construire automatiquement le paquet lorsqu'il est téléchargé, ajoutez simplement -b à la ligne de commande comme ceci :

     $ apt-get -b source nomdupaquet

Si vous décidez de ne pas créer le .deb au moment du téléchargement, vous pouvez le créer plus tard en lançant la commande suivante dans le répertoire qui à été créé pour le paquet après le téléchargement :

     $ dpkg-buildpackage -rfakeroot -uc -b

Remarquez que pour construire la plupart des paquets vous aurez au moins besoin des paquets suivant : devscripts, dpkg-dev, debhelper, fakeroot, jetez un oeil à la section Installation et réinstallation de paquets, Section 4.4 et installez-les avant de continuer. La plupart des paquets dépendront aussi d'outils de compilation, donc il pourrait être utile d'installer le paquet build-essential. D'autres paquets peuvent être nécessaires, pour plus d'informations regardez la section Paquets nécessaires pour la compilation d'un paquet source, Section 5.2.

Pour installer le paquet construit par les commandes ci-dessus, il faut utiliser directement le gestionnaire de paquets. Jetez un oeil à la section Installer des paquets Debian téléchargés manuellement ou créés localement, Section 4.5. Il existe un outil utile fournit par le paquet devscripts : debi. Si vous exécutez debi dans le répertoire des sources, il cherchera le fichier .changes dans le répertoire parent pour découvrir quels paquets binaires le paquet source produit, il lancera alors dpkg pour tous les installer. Cela peut ne pas être utile si votre paquet source produit des paquets en conflit, ce qui n'est pas le cas la plupart du temps. Vous devrez bien sûr avoir les droits superutilisateur pour effectuer cette action.

Il y a une différence entre la méthode source d'apt-get et ses autres méthodes. La méthode source peut être utilisée par les utilisateurs normaux, sans avoir besoin des droits d'administrateur. Les fichiers sont téléchargés dans le répertoire d'où est appelé apt-get source paquet.


5.2 Paquets nécessaires pour la compilation d'un paquet source

En temps normal, pour qu'un paquet puisse être compilé, il est nécessaire que des en-têtes spécifiques et des bibliothèques partagées soient présentes. Tous les paquets sources ont un champ dans leur fichier de contrôle appelé « Build-Depends: » qui indique quels paquets doivent être ajoutés pour que le paquet puisse être construit à partir des sources. Quelques paquets essentiels sont aussi nécessaires, vérifiez la section Téléchargement de paquets source, Section 5.1 avant de continuer.

APT possède une manière simple de télécharger ses paquets. Lancez simplement apt-get build-dep paquet, où « paquet » est le nom du paquet que vous voulez construire. Par exemple :

     # apt-get build-dep gmc
     Lecture des listes de paquets... Fait
     Construction de l'arbre des dépendances... Fait
     Les NOUVEAUX paquets suivants seront installés :
       comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev
       libgpmg1-dev
     0 mis à jour, 7 nouvellement installés, 0 à enlever et 1 non mis à jour.
     Il est nécessaire de prendre 1069ko dans les archives.
     Après dépaquetage, 3514ko d'espace disque supplémentaires seront utilisés.
     Souhaitez-vous continuer ? [O/n]

Les paquets installés sont ceux qui sont nécessaires afin que gmc soit compilé correctement. Il est important de remarquer que cette commande ne télécharge pas le paquet source du paquet à compiler. Par conséquent vous aurez besoin de lancer apt-get source séparément pour l'obtenir.

Si vous voulez seulement vérifier quels paquets sont nécessaires pour construire un paquet donné, il y a la méthode showsrc de la commande apt-cache (voyez la section Obtenir des informations sur les paquets., Chapitre 6), qui affichera, parmi d'autres informations, la ligne Build-Depends qui liste ces paquets.

     # apt-cache showsrc paquet

5.3 Construire un paquet de débogage

Si vous voulez construire un paquet à des fins de débogage pour rapporter un bogue par exemple -- ou en corriger un, vous pouvez utiliser de simples variables d'environnement qui sont supportées par la plupart des paquets Debian.

Pour construire un paquet qui contient des binaires avec tous ses symboles de débogage[6], tout ce que vous aurez besoin de faire c'est de le préfixer par DEB_BUILD_OPTIONS=nostrip. Les optimisations peuvent aussi rendre le débogage plus difficile, vous pouvez les désactiver en ajoutant la chaîne noopt à la variable DEB_BUILD_OPTIONS. Par exemple :

     $ DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -rfakeroot -uc -b

5.4 Modification des options de construction d'un paquet

Si vous voulez modifier la manière dont le paquet est construit, vous aurez besoin d'éditer le fichier debian/rules. Cela signifie qu'à l'intérieur du répertoire créé lorsque le paquet source est extrait, il y a un répertoire debian qui contient beaucoup de fichiers. L'un d'eux est spécial : le fichier rules.

Ce fichier est habituellement un Makefile qui a des cibles pour la configuration, la construction, l'installation et la création du paquet. Par exemple si je veux construire le paquet luola[7] sans son je peux, après le téléchargement et l'extraction de ses sources, éditer le fichier debian/rules qui ressemble à ceci :

     [...]
     configure: configure-stamp
     configure-stamp:
         dh_testdir
         # Ajoutez ici des commandes pour configurer le paquet
         ./configure $(confflags) \
       	--prefix=/usr \
       	--mandir=share/man \
       	--infodir=share/info \
       	--datadir=share/games \
       	--bindir=games \
       	--enable-sound
     #        --enable-sdl-gfx
     
     	touch configure-stamp
     [...]

Voyez-vous l'option --enable-sound ? Si je la supprime ou la remplace par --disable-sound puis reconstruit le paquet en utilisant la technique décrite dans la section Téléchargement de paquets source, Section 5.1, le paquet luola sera construit sans le support du son.

Si vous voulez réellement travailler avec des paquets sources quotidiennement, je vous suggérerais principalement la lecture du Guide des nouveaux responsables Debian et de la Charte Debian. Les autres documentations disponibles depuis le coin des développeurs peuvent être aussi utiles.


5.5 eh, je ne veux pas utiliser le travail fait par Debian

Parfois, des personnes veulent utiliser une version spécifique d'un programme pour lequel seul le code source est disponible, sans paquet Debian. Mais le système de paquets peut en être perturbé. Supposez que vous voulez compiler une nouvelle version de votre serveur de courriels. C'est parfait, mais beaucoup de paquets Debian dépendent d'un MTA (Mail Transport Agent, NdT : Agent de transport de courriels). Étant donné que vous avez installé quelque chose que vous avez compilé vous-même, le système de paquets n'en est pas informé.

C'est à ce moment là que le paquet equivs entre en scène. Pour l'utiliser, installez le paquet portant ce nom. equivs crée un paquet vide qui satisfait les dépendances en faisant croire au système de paquets que les dépendances sont satisfaites.

Avant que nous commencions, il est bon de vous rappeler qu'il y a des façons plus sûres de compiler avec des options différentes un programme qui est déjà empaqueté pour Debian et qu'on ne devrait pas utiliser equivs pour remplacer les dépendances si on ne sait pas ce qu'on fait. Pour plus d'informations, regardez la section Téléchargement de paquets source, Section 5.1.

Continuons avec l'exemple du MTA, vous venez juste d'installer votre postfix fraîchement compilé et vous voulez continuer en installant mutt. Soudain, vous découvrez que mutt veut installer un autre MTA. Mais vous avez déjà le votre.

Allez dans un répertoire (/tmp par exemple) et lancez :

     # equivs-control nom

Remplacez nom par le nom du fichier de contrôle que vous voulez créer. Le fichier sera créé comme le suivant :

     Section: misc
     Priority: optional
     Standards-Version: 3.5.10
     
     Package: <entrer le nom du paquet; par défaut equivs-dummy>
     Version: <entrer la version; par défaut 1.0>
     Maintainer: Votre Nom <votrenom@toto.com>
     Pre-Depends: <paquets>
     Depends: <paquets>
     Recommends: <paquets>
     Suggests: <paquet>
     Provides: <paquet(virtuel)>
     Architecture: all
     Copyright: <fichier copyright; par défaut GPL2>
     Changelog: <fichier changelog; par défaut un changelog générique>
     Readme: <fichier README.Debian; par défaut un générique>
     Extra-Files: <fichiers supplémentaires pour le répertoire doc, séparés par des virgules>
     Description: <description courte; par défaut quelques mots pour en savoir plus>
      description longue et informations
      .
      second paragraphe

Nous avons seulement besoin de modifier ce que nous voulons. Jetez un oeil au format des champs et à leur description, il n'y a pas besoin de tous les expliquer ici, jetons plutôt un oeil sur un exemple :

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: mta-local
     Conflicts: mail-transport-agent
     Replaces: mail-transport-agent
     Provides: mail-transport-agent

Oui, c'est tout. mutt dépend de mail-transport-agent, c'est un paquet virtuel fournit par tous les MTA, mta-local « se déclare » lui-même comme un « mail-transport-agent » en utilisant le champ Provides.

Les champs Conflicts et Replaces sont aussi nécessaires pour qu'APT et dpkg comprennent qu'ils devraient supprimer le paquet MTA actuellement installé en faveur du nouveau que vous êtes en train d'installer.

Maintenant, il ne vous reste plus qu'à construire le paquet :

     # equivs-build nom
     dh_testdir
     touch build-stamp
     dh_testdir
     dh_testroot
     dh_clean -k
     # Ajouter ici des commandes pour installer le paquet dans debian/tmp.
     touch install-stamp
     dh_testdir
     dh_testroot
     dh_installdocs
     dh_installchangelogs
     dh_compress
     dh_fixperms
     dh_installdeb
     dh_gencontrol
     dh_md5sums
     dh_builddeb
     dpkg-deb: building package `nom' in `../nom_1.0_all.deb'.
     
     Le paquet est créé.
     Attention, le paquet est créé dans le répertoire courant.

Et installez le .deb résultant. Regardez la section Installer des paquets Debian téléchargés manuellement ou créés localement, Section 4.5.

Comme nous pouvons le voir, il y a plusieurs utilisations d'equivs. L'une d'entre elles peut même être la création d'un paquet mes-favoris qui dépend des programmes que vous installez habituellement. Laissez libre cours à votre imagination, mais restez prudent.

Il est important de remarquer qu'il y a des exemples de fichiers control dans /usr/share/doc/equivs/examples. Regardez-les.


[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


Apt howto

2.0.2 - October 2006

Gustavo Noronha Silva kov@debian.org

Julien Louis et les membres de la liste debian-l10n-french@lists.debian.org