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


La FAQ Debian GNU/Linux
Chapitre 7 - Les bases du système de gestion des paquets Debian


Ce chapitre touche aux mécanismes internes de bas niveau du système de gestion de paquets Debian. Si vous êtes avant tout intéressé par l'utilisation des outils appropriés, passez aux chapitres Outils de gestion des paquets Debian, Chapitre 8 et Garder son système Debian à jour, Chapitre 9.


7.1 Qu'est ce qu'un paquet Debian ?

Les paquets contiennent généralement tous les fichiers nécessaires pour implémenter un ensemble de commandes ou de fonctionnalités. Il y a deux sortes de paquets Debian :

L'installation de logiciels par le système de paquets utilise les dépendances qui sont définies avec attention par le responsable du paquet. Ces dépendances sont documentées dans le fichier control associé à chaque paquet. Par exemple, le paquet du compilateur GNU C (gcc) dépend du paquet binutils qui contient l'éditeur de lien et l'assembleur. Si un utilisateur essaye d'installer gcc sans avoir préalablement installé binutils, le système de gestion de paquets (dpkg) renverra un message d'erreur disant qu'il a aussi besoin de binutils et arrêtera l'installation de gcc. (Cependant ceci peut être forcé par un utilisateur insistant, voir dpkg(8)). Pour plus d'informations, voir Que signifie qu'un paquet dépend (Depends), recommande (Recommends), suggère (Suggests), est en conflit (Conflicts), remplace (Replaces), casse (Breaks) ou fournit (Provides) un autre paquet ?, Section 7.9 plus loin.

Les outils de gestion de paquets Debian peuvent être utilisés pour :


7.2 Quel est le format d'un paquet binaire Debian ?

Un paquet Debian ou un fichier d'archive Debian, contient les fichiers exécutables, les bibliothèques, et la documentation liée à une suite particulière de programme ou à un ensemble de programmes. Normalement, un fichier archive Debian a un nom se terminant par .deb.

Les mécanismes internes du format des paquets binaires Debian sont décrits dans la page de manuel de deb(5). Ce format interne est susceptible de changer (entre chaque version principale de Debian GNU/Linux), donc utilisez toujours dpkg-deb(1) si vous avez besoin d'effectuer des opérations de bas niveau sur des fichiers .deb.


7.3 Pourquoi les noms des paquets Debian sont-ils si longs ?

Le nom des paquets binaires Debian se conforme à la convention suivante : <foo>_<NuméroVersion>-<NuméroRévisionDebian>_<DebianArchitecture>.deb

Notez que foo est supposé être le nom du paquet. On peut connaître le nom associé à un fichier d'archive Debian particulier (fichier .deb) d'une de ces manières :

Le composant VVV est le numéro de version fourni par le développeur amont. Il n'y a pas de standard ici, donc le numéro de version peut avoir différents formats comme « 19990513 » ou « 1.3.8pre1 ».

Le composant RRR est le numéro de révision Debian et il est choisi par le développeur Debian (ou un utilisateur s'il choisit de construire lui-même son paquet). Ce numéro correspond au niveau de révision du paquet Debian, ainsi, une nouvelle révision signifie généralement des modifications du Makefile Debian (debian/rules), du fichier de contrôle Debian debian/control), des scripts d'installation ou de désinstallation (debian/p*) ou des fichiers de configurations utilisés avec le paquet.

Le composant AAA identifie le processeur pour lequel le paquet a été construit. Il s'agit généralement de i386, pour les processeurs compatibles avec l'Intel 386 et ultérieurs. La structure de l'archive Debian Quels sont tous ces répertoires dans les archives FTP de Debian ?, Section 6.7 montre les autres possibilités. Pour plus de détails, consultez la description de « l'architecture Debian » dans la page de manuel dpkg-architecture(1).


7.4 Qu'est ce qu'un fichier de contrôle ?

Des détails concernant le contenu du fichier control Debian sont fournis dans la charte Debian, au chapitre cinq, voir Quelles autres documentations existent sur le système Debian ?, Section 12.1.

Brièvement, un fichier control est montré ci-dessous pour le paquet Debian hello :

     Package: hello
     Priority: optional
     Section: devel
     Installed-Size: 45
     Maintainer: Adam Heath <doogie@debian.org>
     Architecture: i386
     Version: 1.3-16
     Depends: libc6 (>= 2.1)
     Description: Le classique et bon exemple
      Le programme bonjour de GNU produit une salutation familière et amicale. Il
     
      permet à des non-programmeurs d'utiliser un outil classique d'informatique 
      qui leur serait autrement indisponible.
      .
      Sérieusement:  c'est un exemple sur comment faire un paquet Debian. 
      C'est la version Debian du programme du projet GNU « bonjour 
      le monde » (qui est lui-même un exemple pour le projet de GNU).

Le champ « Package » contient le nom du paquet. C'est le nom par lequel les outils de gestion de paquet peuvent le manipuler. Il est habituellement similaire mais pas nécessairement le même à la première chaîne composant le nom de l'archive Debian.

Le champ de « Version » donne le numéro de version du développeur amont et (dans le dernier composant) le niveau de révision du paquet de Debian de ce programme comme expliqué dans Pourquoi les noms des paquets Debian sont-ils si longs ?, Section 7.3.

Le champ « Architecture » indique pour quel processeur ce binaire particulier a été compilé.

Le champ « Depends » donne une liste des paquets qui doivent être installés afin d'installer ce paquet avec succès.

Le champ « Installed-Size » indique l'espace disque utilisé par le paquet une fois installé. Ceci est prévu pour être employé par les programmes d'installation pour vérifier s'il y a suffisamment d'espace disque disponible pour installer le programme.

La ligne « Section » indique la section où le paquet Debian est conservé sur les sites FTP de Debian.

Le champ « Priority » indique l'importance d'un paquet pour l'installation, de sorte que des logiciels semi-intelligents comme dselect ou aptitude peuvent trier les paquets dans une catégorie, par exemple les paquets installés facultativement. Voir Qu'est ce qu'un paquet Essential, Required, Important, Standard, Optional ou Extra ?, Section 7.7.

Le champ « Maintainer » contient l'adresse électronique de la personne actuellement responsable de la maintenance du paquet.

Le champ « Description » fournit un bref résumé des fonctionnalités du paquet.

Pour plus d'informations sur les champs disponibles dans un paquet, reportez-vous au chapitre 5 de la charte Debian, « Fichiers control et leurs champs », consultez Quelles autres documentations existent sur le système Debian ?, Section 12.1.


7.5 Qu'est ce qu'un Debian conffile ?

Conffiles est une liste de fichiers de configuration (habituellement placés dans /etc) que le système de gestion de paquet n'écrasera pas quand le paquet est mis à jour. Ceci s'assure que les valeurs locales pour ces fichiers seront préservées, et c'est un dispositif critique permettant la mise à niveau des paquets sur un système en fonctionnement.

Pour déterminer exactement quels fichiers sont préservés pendant la mise à jour, lancez :

     dpkg --status package

et regardez la section « Conffiles: ».


7.6 Qu'est-ce qu'un script Debian preinst, postinst, prerm, et postrm ?

Ces fichiers sont des scripts exécutables qui sont lancés automatiquement avant ou après l'installation d'un paquet. Avec le fichier appelé control, tous ces fichiers font partie de la section commande d'une archive Debian.

Les fichiers individuels sont :

preinst

Ce script est exécuté avant que le paquet soit désarchivé du fichier archive (.deb). Beaucoup de scripts « preinst » arrêtent les services des paquets qui sont mis à jour jusqu'à ce que leurs installations ou leurs mises à jour soient terminées (suivant le succès de l'exécution du script « postinst »).

postinst

Ce script termine typiquement n'importe quelle configuration exigée du paquet foo une fois que foo a été désarchivé à partir du fichier d'archive Debian (« deb »). Souvent le script « postinst » demande à l'utilisateur des informations et avertit l'utilisateur que s'il accepte les valeurs par défaut, il devrait se souvenir de revenir en arrière et de reconfigurer le paquet lorsque la situation le demandera. Beaucoup de scripts « postinst » exécutent toutes les commandes nécessaires au démarrage ou au redémarrage d'un service une fois qu'un nouveau paquet a été installé ou mis à jour.

prerm

Ce script arrête généralement tous les démons qui sont associés avec le paquet. Il est exécuté avant la suppression des fichiers associés au paquet.

postrm

Ce script modifie généralement les liens ou les autres fichiers associés à foo et/ou supprime les fichiers créés par le paquet (Voir aussi Qu'est-ce qu'un paquet virtuel ?, Section 7.8.)

Actuellement tous les fichiers de commande peuvent être trouvés dans le répertoire /var/lib/dpkg/info. Les fichiers concernant le paquet foo commencent par le nom "foo" et sont suivis par les extensions "preinst", "postinst" etc. Le fichier foo.list dans ce répertoire liste tous les fichiers installés par le paquet foo. (Notez que l'emplacement de ces fichiers est interne à dpkg ; vous ne devriez pas compter sur eux).


7.7 Qu'est ce qu'un paquet Essential, Required, Important, Standard, Optional ou Extra ?

À chaque paquet Debian est assignée une priorité par les développeurs de la distribution, c'est une aide pour le système de gestion de paquet. Les priorités sont :

Si vous faites une installation Debian par défaut, tous les paquets ayant une priorité standard ou supérieure seront installés sur votre système. Si vous choisissez des tâches prédéfinies, vous obtiendrez aussi les paquets de priorité plus faible.

De plus, certain paquets sont marqués comme essentiels (Essential) puisqu'ils sont absolument nécessaires pour un fonctionnement correct du système. Les outils de gestion de paquets refuseront de les supprimer.


7.8 Qu'est-ce qu'un paquet virtuel ?

Un paquet virtuel est un nom générique qui s'applique à n'importe quel groupe de paquets fournissant une fonctionnalité de base semblable. Par exemple, les programmes tin et trn sont des programmes de lecture de nouvelles Usenet et devraient donc satisfaire n'importe quelle dépendance d'un programme exigeant la présence d'un programme de lecture de nouvelles sur le système, afin de fonctionner ou pour être utiles. Les deux sont donc capables de fournir le paquet virtuel appelé news-reader.

De la même façon, smail et sendmail fournissent tous les deux les fonctionnalités d'un agent de transport de courrier électronique. Les deux sont donc capables de fournir le paquet virtuel mail-transport-agent. Si l'un ou l'autre est installé, alors n'importe quel programme exigeant l'installation d'un agent de transport de courrier électronique sera satisfait par l'existence de ce paquet virtuel.

Debian fournit un mécanisme de sorte que, si plus d'un paquet fournissant le même paquet virtuel est installé sur le système, alors les administrateurs peuvent choisir leur paquet préféré. La commande appropriée est update-alternatives, et est décrite plus loin dans Certains utilisateurs apprécient mawk, d'autres gawk ; certains utilisent vim, d'autres elvis ; certains préfèrent trn, d'autres tin ; comment Debian gère-t-elle la diversité ?, Section 11.10.


7.9 Que signifie qu'un paquet dépend (Depends), recommande (Recommends), suggère (Suggests), est en conflit (Conflicts), remplace (Replaces), casse (Breaks) ou fournit (Provides) un autre paquet ?

Le système de paquet Debian a une gamme de « dépendances » sur les paquets qui permet d'indiquer (avec un simple drapeau) à quel niveau un programme A peut fonctionner indépendamment de l'existence du programme B sur un système donné :

Une information plus détaillée sur l'utilisation de chacun de ces termes peut être trouvée dans la charte Debian, consultez le chapitre 7.2 « Dépendances binaires ».


7.10 Quel est le sens de « Pre-Depends » ?

« Pre-Depends » est une dépendance particulière. Dans le cas de la plupart des paquets, dpkg désarchivera les fichiers archives (c'est-à-dire les fichiers .deb) indépendamment de l'existence sur le système des fichiers dont il dépend. De manière simpliste, le désarchivage signifie que dpkg extraira à partir du fichier archive les fichiers qui sont censés être installés sur votre système de fichiers, et les mettra en place. Si ces paquets dépendent de l'existence de quelques autres paquets sur votre système, dpkg refusera d'accomplir l'installation (par l'exécution de l'action de configuration) jusqu'à ce que les autres paquets soient installés.

Cependant, pour certain paquets, dpkg refusera de les désarchiver jusqu'à ce que certaines dépendances soient résolues. De tels paquets sont dits « Pré-dépendants » de la présence de quelques autres paquets. Le projet Debian fournissait ce mécanisme pour gérer la mise à jour de systèmes utilisant le format a.out vers le format ELF, où l'ordre de désarchivage était critique. Il y a d'autres situations de mise à jour où cette méthode est utile, par exemple pour les paquets ayant une priorité « required » et des dépendances sur la libc.

Comme ci-dessus, une information plus détaillée sur l'utilisation de ce terme peut être trouvée dans la charte Debian.


7.11 Quelle est la signification de unknown, install, remove, purge et hold dans le statut du paquet ?

Ces drapeaux indiquent ce que souhaite faire l'utilisateur avec un paquet (ils sont positionnés par les actions de l'utilisateur dans la section « Section » de dselect ou par des appels directs de dpkg par l'utilisateur).

Leurs significations sont :


7.12 Comment est-ce que je mets un paquet en « hold » ?

Il y a trois moyens de bloquer un paquet, avec dpkg, aptitude ou dselect.

Avec dpkg, vous devez exporter la liste de sélection des paquets, avec la commande :

     dpkg --get-selections \* > selections.txt

puis éditer le fichier selections.txt, changer la ligne contenant le paquet que vous souhaitez conserver, par exemple pour libc6, de ceci :

     libc6                                           install

à ceci :

     libc6                                           hold

sauvegarder le fichier et le recharger dans la base de données de dpkg avec :

     dpkg --set-selections < selections.txt

Avec aptitude, vous pouvez conserver un paquet en faisant

     aptitude hold package_name

et enlever le drapeau « hold » avec

     aptitude unhold package_name

Avec dselect, vous devez entrer dans l'écran [S]elect, trouver le paquet que vous souhaitez conserver dans l'état actuel, et appuyer sur la touche '=' (ou sur 'H'). Les changements seront pris en compte à la sortie de l'écran [S]elect.


7.13 Comment est-ce que j'installe un paquet source ?

Les paquets sources Debian ne peuvent pas être véritablement installés, ils sont seulement dépaquetés dans n'importe quel répertoire où vous voulez en construire les paquets binaires.

Les paquets sources sont distribués sur la plupart des serveurs où vous pouvez obtenir les paquets binaires. Si vous configurez votre fichier sources.list(5) pour APT en ajoutant la ligne « deb-src » appropriée, vous pourrez facilement télécharger toutes les sources des paquets en lançant la commande

     apt-get source foo

Pour vous aider réellement à la construction du paquet de source, Debian fournit un mécanisme pour les dépendances de construction. Ceci signifie que le responsable du paquet tient une liste des autres paquets nécessaires à la construction du paquet. Pour voir comment cela fonctionne, exécutez

     apt-get build-dep foo

avant de construire les sources.


7.14 Comment est-ce que je peux construire les paquets binaires depuis les paquets sources ?

La méthode recommandée est d'utiliser les différents outils de haut-niveau (« wrappers »). Voici comment faire en utilisant les outils devscripts. Installez le paquet si cela n'est pas déjà fait.

Maintenant, commencez par récupérer le paquet source :

     apt-get source foo

puis entrez dans l'arborescence source :

     cd foo-*

Puis installez les dépendances de construction nécessaires (s'il y en a) :

     sudo apt-get build-dep foo

Puis créez une version particulière de votre propre construction (afin de ne pas les confondre plus tard lorsque Debian publiera sa propre nouvelle version) :

     dch -l local 'Blah blah blah'

Et enfin construisez votre paquet :

     debuild -us -uc

Si tout a correctement fonctionné, vous deviez pouvoir installer votre paquet avec la commande :

     sudo dpkg -i ../*.deb

Si vous préférez effectuer les opérations vous-même, et ne voulez pas utiliser devscripts, suivez cette procédure :

Vous aurez besoin de tous les fichiers foo_*.dsc, foo_*.tar.gz et foo_*.diff.gz pour compiler les sources (remarquez que pour certains paquets il n'y a pas de fichier .diff.gz, ce sont les paquets natifs à Debian).

Une fois que vous les avez récupérés (voir Comment est-ce que j'installe un paquet source ?, Section 7.13), si vous avez le paquet dpkg-dev installé, la commande suivante :

     dpkg-source -x foo_version-revision.dsc

désarchivera le paquet dans un répertoire nommé foo-version.

Si vous souhaitez juste compiler le paquet, vous devez vous placer dans le répertoire foo-version et lancer la commande

     dpkg-buildpackage -rfakeroot -b

pour construire le paquet (notez que la paquet fakeroot est aussi nécessaire) et faites

     dpkg -i ../foo_version-revision_arch.deb

pour installer le nouveau paquet.


7.15 Comment est-ce que je crée un paquet Debian ?

Pour une description plus détaillée, lisez le « guide des nouveaux responsables Debian », disponible dans le paquet maint-guide ou à l'adresse http://www.debian.org/doc/devel-manuals#maint-guide.


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


La FAQ Debian GNU/Linux

version 5.0.2, 2 Juin 2013

Vous trouverez la liste des auteurs à Auteurs de la FAQ Debian