APT & DPKG

Où comment gérer les paquets .deb les doigts dans le nez.

Nicolas Boos <nicolas.boos@wanadoo.fr>

Mardi 9 Janvier 2001, Dernière correction le Samedi 3 Février 2001

Une fois que l'on connaît et que l'on maîtrise le fonctionnement des deux outils que sont APT (Advanced Package Tool) et DPKG, on ne peut plus s'en passer.

Moi même, à l'époque où ma machine tournait encore sous une Slink (Debian GNU/Linux 2.1), et que je trouvait que la Potato tardait à sortir, j'ai voulu essayer une autre distribution Linux, une Mandrake si mes souvenirs sont bons... Après une installation exaspérante, trop longue à mon goût peut-être, je me suis retrouvé avec une distribution "bazar". Trop de choses inutilement installées, des démons lancés en pagaille et pas mal d'autres choses, en particulier des programmes qui ne se lançaient pas, ou plantaient trop facilement. Trois jours après, j'ai jeté l'éponge, ma distribution ne ressemblait plus à grand chose, le système tenait plus du bricolage qu'autre chose. Quand on a goûté à la souplesse et la stabilité exemplaire d'une Debian, difficile de revenir en arrière. Ceci dit, à part une Slackware, cela fait bien longtemps que je n'ai pas installé autre distribution que Debian GNU/Linux, les choses ont donc peut-être évolué dans le bon sens...

Avec le temps, lorsque l'on connaît bien le monde GNU/Linux, on sait quels sont les programmes dont l'on a besoin pour ses activités. Lorsque l'on réinstalle son système Debian (ce qui n'arrive que très très rarement, sauf si l'on s'amuse comme moi avec la version instable et/ou avec des compilations plus qu'hasardeuses...), on n'installe plus que le minimum au début, et on complète ensuite à la main avec les paquets que l'on utilise vraiment. Vous verrez, beaucoup d'entre vous y viendrons sûrement.

Voila, à noter que ce petit article n'a de prétention aucune, il est juste là pour éclairer certains sur ce qui une des bases importante de système Debian GNU/Linux, à savoir le couple APT - DPKG. Je ne pense vraiment pas être un gourou sur le sujet, il est juste le fruit de mon humble expérience. Vos remarques sont donc bien sûr les bienvenues.

1. Quelques bases

Pour faire simple, la distribution maintient en son bord une base de données qui renferme une foule d'informations sur les paquets installés ou non sur le système. Dans cette base, on peut trouver les noms des paquets disponibles, ainsi que leur description singulière. APT nécessite principalement deux fichiers situés dans /etc/apt ; le fichier apt.conf auquel on ne devrait pas avoir besoin de toucher normalement, et un deuxième plus important celui là, nommé sources.list

1.1 Le fichier sources.list

Le nom devrait déjà vous mettre la puce à l'oreille. Il s'agit du fichier (une liste...) qui indique à APT où il doit trouver (la ou les sources...) les informations concernant de nouveaux paquets pour compléter la base de données du système (d'où sources.list, ehehe, pas si cons les mecs de Debian...). Voici donc un petit exemple d'un fichier sources.list possible:

# See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
#deb http://http.us.debian.org/debian stable main contrib non-free
#deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
#deb http://security.debian.org stable/updates main contrib non-free
 
# Uncomment if you want the apt-get source function to work
#deb-src http://http.us.debian.org/debian stable main contrib non-free
#deb-src http://non-us.debian.org/debian-non-US stable non-US
 
deb cdrom:[Debian GNU/Linux 2.2 r0 _Potato_ - Official i386 Binary-3 (20000814)]/ unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 2.2 r0 _Potato_ - Official i386 Binary-2 (20000814)]/ unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 2.2 r0 _Potato_ - Official i386 Binary-1 (20000814)]/ unstable contrib main non-US/contrib non-US/main

Avant tout, consultez la page de manuel sources.list. Ensuite, et comme vous avez pu le constater, on peut ajouter différentes sources ; http, ftp, cdrom, file (pour ce dernier, des fichiers en local, un miroir par exemple).

1.2 Mettre à jour la base de données des paquets

Après toute modification du fichier sources.list, n'oubliez pas de mettre à jour la base de donnée. Sinon "APT il sera pas content du tout du tout". Vous effectuez donc cela avec la commande apt-get update, et tout devrait bien se passer. Faite aussi cela périodiquement si vous savez que certaines de vos sources sont mise à jour régulièrement (http et ftp le plus souvent), pour des corrections de bogues par exemple.

2. Rechercher et s'informer

Pour manipuler les paquets Debian, on utilise particulièrement et le plus souvent trois commandes ; il s'agit de apt-get, apt-cache et dpkg. Encore une fois, lisez les pages de manuel s'y rapportant.

2.1 dpkg -l "<cequevousvoulez>"

Vous pouvez ainsi rechercher avec cette commande tout les noms des paquets disponibles pour votre système. Vous aurez même droit à une très courte description pour ceux déjà installés. Exemple d'utilisation:

dpkg -l "x*" | more

Cela vous donnera la liste de tous les paquets disponibles commençant par la lettre x. Les guillemets sont importants, sans ceux-ci, la commande chercherais à passer en paramètre la liste de tous les fichiers de votre répertoire courant commençant par x (s'il y en a bien sûr), ce qui est très différent!

2.2 apt-cache show <nompaquet>

Maintenant vous avez la liste des paquets disponibles, installés ou non (voir commande précédente). Mais pour les paquets non-installés vous n'avez toujours pas de description. Et bien qu'à cela ne tienne, petit exemple avec le nom de paquet xbill :

apt-cache show xbill

La commande vous retourne un tas d'informations, dont les dépendances, et la description du paquet en question (vous aurez noté au passage qu'il s'agissait d'un sauvage jeu de massacre, d'un goût... particulier...). Si vous voulez plus d'informations sur les dépendances, remplacez show par showpkg

2.3 apt-cache search <nompaquet/motdansdescriptiondepaquet>

C'est bien beau tout ça, mais se taper toute la liste des paquets avec un apt-cache show <totoetcie>, ça peut être long... Il existe donc un moyen beaucoup plus rapide pour trouver son bonheur. Par exemple, j'ai installé le paquet wmaker (Gestionnaire de fenêtre Window Maker pour X) et je voudrais mettre plein de trucs "quiserventàrienmaisçaépatelescopains" dans le dock (la barre verticale à droite dans WM).

apt-cache search "Window Maker"

Et j'obtiens automatiquement une liste de paquets ayant un rapport de près ou de loin avec Window Maker, inclus des applications dockables (J'ai mis des guillemets à cause de l'espace entre les deux termes). Ici, on a cherché dans les descriptions et dans les noms de paquets. Mais on peut aussi uniquement chercher dans ces derniers, en ajoutant l'option --names-only

apt-cache search --names-only ncurses

Ici, on voit apparaître la liste de tous les paquets incluant dans leur nom le terme ncurses

3. Gérer ses paquets

3.1 Installer: apt-get install <nompaquet>

Rien de plus simple que d'installer un paquet sous Debian GNU/Linux. Le plus dur, c'est justement d'avoir (de savoir) le nom du paquet que l'on veut mettre en place. Ensuite APT s'occupe de tout, il gère les dépendances, vous demande par exemple d'insérer tel ou tel cédé, rapatrie tout les paquets nécessaires au bon fonctionnement de l'ensemble (vérifiez que vous êtes bien connecté, si il y a nécessité de téléchargement par http par exemple), etc. Ensuite, parfois, on vous pose une petite question de configuration, rien de plus. Et tout cela, APT le fait comme un grand. Alors, elle est pas belle la vie?

Bon, un petit exemple pour la forme, avec le paquet lyx, une surcouche graphique à LaTeX (et bien plus encore...). Ce paquet n'est généralement pas distribué sur les cédés Debian, pour un problème de librairie qui doit avoir une licence à jeter par les fenêtres il me semble...

apt-get install lyx

Maintenant, tout doit fonctionner correctement. Mais,

3.2 Retirer: apt-get remove <nompaquet>

Là aussi, pas grand chose à faire (et c'est le but...). Le programme retire le paquet voulu, ainsi que ses dépendances, sauf si celles-ci sont nécessaires à un autre paquet. L'originalité ici c'est de choisir ou non de conserver ses fichiers de configurations. Avec cette simple commande, on conserve alors le ou les fichiers de configurations liés au paquet en voie de désinstallation. Exemple avec lynx, un navigateur ouaibe en mode texte:

apt-get remove lynx

Ici, on retire lynx, mais on conserve le fichier de configuration /etc/lynx.cfg, pratique si l'on a passé des heures à le bidouiller. A la prochaine installation de lynx, on retrouvera sa configuration d'antan. Par contre si l'on souhaite faire le ménage, on nettoie tout et on ne laisse rien, donc plus de fichier de configuration, nada (on a par exemple décidé de naviguer avec un truc moins préhistorique, style mozilla M18...), on transforme comme ceci:

apt-get remove --purge lynx

3.3 Faire le ménage dans /var/cache/apt/archives et /var/cache/apt/archives/partial

Lorsque vous rapatriez des paquets depuis le Net par exemple, APT les places dans /var/cache/apt/archives quand ils sont complets et dans /var/cache/apt/archives/partial quand ils ne le sont pas. Les conserver permet parfois de les réutiliser si besoin est, mais cela prend de la place. Si on les rapatrie avec un modem, cela peut-être négligeable. Mais si l'on dispose d'un liaison avec un débit un peu plus soutenu (ADSL, câble, etc.) et que l'on fait des mises à jour de sa Woody tous les matins, au bout d'un certain temps la place peut éventuellement venir à manquer. Dans se cas, le remède est:

apt-get clean

3.4 Mise à niveau: apt-get upgrade, apt-get dist-upgrade

Il y un moyen simple pour mettre à jour (on dit aussi à niveau) sa distribution. Soit en version stable soit en version expérimentale (instable). On peut aussi également mettre à niveau d'autres paquets que les officiels. Voir pour tout cela son fichier sources.list

Au sujet de le version expérimentale, ne tentez pas le diable, posez vous la question de savoir si cela vraiment le coup de franchir le cap entre stable et instable. Personnellement, je ne vois pas trop de raisons de passer ma Potato en Woody, surtout depuis la troisième sortie de la patate (release 2). Certains jours, ça peut-être limite catastrophique pour certains. Enfin, vous êtes prévenus (La solution c'est peut-être d'installer deux distributions sur deux partitions différentes et de faire joujou avec l'une et de travailler avec l'autre...). N'oubliez pas de faire un apt-get update avant l'une ou l'autre des deux commandes...

Mise à jour "simple": apt-get upgrade

Ici, seront mis à jour tous les paquets déjà installés, uniquement si cela n'entraîne pas la mise à jour d'autres paquets et/ou l'installation de nouveaux.

Mise à niveau "intelligente": apt-get dist-upgrade

Dans ce cas, apt-get cherchera aussi à mettre à jour tous les paquets déjà installés. Mais ici, si il y a nécessité d'ajouter, de supprimer ou encore de mettre à jour certains paquets (qui sont les dépendances d'autres, par exemple), apt-get le fera. Il donne aussi la priorité aux paquets "essentiels", les plus importants, en cas de conflit. Pour reprendre les termes d'un certain Raphael H., on utilise généralement cette commande pour passer d'une version de distribution à une autre (Slink à Potato, etc.). Ensuite on se contente de faire un apt-get upgradeEnfin, voici un petit exemple pour vous éclaircir les esprits ; J'ai installé le paquet A en version 1, qui nécessitait le paquet B dans sa version 3 et que j'ai donc aussi installé. Maintenant, le paquet A est en version 2 mais nécessite à présent le paquet B en version 4 ainsi qu'un nouveau paquet C dans sa version 6. Après un apt-get update, un apt-get upgrade ne mettra donc pas à jour le paquet A. Par contre un apt-get dist-upgrade installera la paquet C, puis mettra à jour le paquet B et enfin le paquet A.

4. Un exemple plus concret d'utilisation

Voila pour finir, un petit exemple très instructif d'utilisation "courante". Je m'intéresse au fichier fn.rc dans le répertoire /etc/ae, pour en savoir plus, je tape:

dpkg -S /etc/ae/fn.rc

Et dpkg me répond: ae: /etc/ae/fn.rc, ce fichier fn.rc appartient donc au paquet ae. Vous noterez que j'ai bien mis le chemin complet du fichier. Sinon, dpkg va indiquer tout les endroits où un fn.rc se trouve. Si ce n'est pas clair pour vous, faites donc un simple dpkg -S changelog.Debian.gz et vous comprendrez. Cette fois, qu'il y a t'il dans ce fameux paquet ae?

dpkg -L ae

Résultat, pas grand chose, une vingtaine de fichiers tout au plus. Tiens, au fait ce ae, qu'est ce qu'il fait?

apt-cache show ae

Donc, c'est un éditeur. Ça à l'air très bien, interface soit style vi soit style emacs, mais je n'ai pas vraiment le temps d'explorer tout cela. Finalement, je crois que je vais le retirer pour le moment. Et donc:

apt-get remove --purge ae

5. Foire Aux Questions

5.1 Différence entre apt-get install <nompaquet> et dpkg-i <nompaquet.deb>?

Pour simplifier, beaucoup même (et désolé pour les cheveux des puristes...), nous allons dire que APT est une surcouche à DPKG. Lorsque vous invoquez un apt-get install <nomdepaquet>, APT cherche si le paquet est disponible, si oui où, après il s'occupe des dépendances du-dit paquet (si elles sont disponibles, etc.) et enfin installe le tout ; en gros, pour finir, il fait pleins de DPKG à la suite, style dpkg -i <nompaquet.debdépendence1>, dpkg i <nompaquet.debdépendenceX>, et en dernier, dpkg -i <nompaquet.deb>.

5.2 Comment mettre à jour sa distribution stable (via Internet)?

A l'heure actuelle, la plupart des utilisateurs installent leur distribution à partir des cédés. Ils ne disposent aussi généralement que d'une liaison par modem pour accéder à Internet, mais ce qui leur permet tout de même d'accéder aux serveurs Debian pour les mises à jour ainsi qu'à la zone non-free (entre autres). Après avoir lu cet article, j'espère que la plupart réussiront à mettre à jour leur distribution par eux mêmes. Mais pour les derniers qui n'auraient pas tout compris, voici la démarche:

deb http://http.us.debian.org/debian stable main contrib non-free

5.3 Ajouter facilement une nouvelle ligne à son sources.list, pour un cédérom

Prenons le cas d'une distribution installée à partir de cédés, en version 2.2r0. Ensuite avec le temps, vous aurez par chance récupéré ceux de la version 2.2r2 (pour faire une mise à jour par exemple). Vous pouvez, toujours par exemple, ajouter facilement à votre sources.list une nouvelle ligne correspondant au premier cédé de votre jeu (le "Binary-1" en général), simplement avec la commande apt-cdrom add. Ceci ajoutera automatiquement dans /etc/apt/sources.list la ligne suivante:

deb cdrom:[Debian GNU/Linux 2.2 r2 _Potato_ - Official i386 Binary-1 (20001207)]/ unstable contrib main non-US/contrib non-US/main

6. Conclusion et remerciements

Voila, j'espère que ce petit aperçu des possibilités offertes par APT et DPKG vous a plu. Si vous apercevez des âneries ou de trop grandes imprécisions, merci de me le signaler.

Merci à tous pour vos contributions, en particulier à Laurent Kestemont et Franck Schneider pour leur judicieuses remarques.