Précédent Remonter Suivant
Une erreur à corriger, une suggestion à faire, une contribution à apporter ? N'hésitez-plus ! Just write it!

Chapitre 3  Gestion de base





3.1  Notion de paquet

Dans toutes les distributions modernes, il y a un système de paquets. Mais d'abord, qu'est ce que c'est? En gros, un paquet, c'est un programme prêt à s'installer et surtout à se désinstaller proprement sur votre système. La définition de « proprement » est régie par des règles très strictes sous Debian : la « Debian policy ». Ne pas respecter ces règles est une bonne façon de se faire éliminer de l'archive officielle. Pour les simples utilisateurs, c'est la garantie que tout devrait bien se passer.

Notons d'emblée que son système de paquets est l'un des points les plus forts de Debian, et qu'il constitue à lui seul une bonne raison de prendre Debian au lieu d'une autre distribution.

Dans les faits, il existe plusieurs types de paquets Debian.

3.1.1  Les paquets binaires

Ils contiennent des exécutables, des fichiers de configuration, de la documentation sous diverses formes, les informations de copyright, de licence... Ces fichiers ont une extension .deb et sont essentiellement manipulés par l'utilitaire dpkg. Ces fichiers sont obtenus par compilation du « paquet source » correspondant.

Un paquet binaire s'installe.

3.1.2  Les paquets sources

Ils contiennent des informations d'auto-description, les sources des applications ou librairies qui seront installés par le(s) paquet(s) binaire(s) générés par compilation du paquet source. Les paquets sources sont essentiellement manipulés par l'utilitaire dpkg-source.

Un paquet source se recompile. Voir 5.5

Les paquets virtuels
Il existe même des paquets ne contenant rien du tout. On les appelle des méta-paquets. Ils sont là pour grouper les paquets par sujet. Ainsi, il existe un paquet task-games , qui dépend d'une sélection de jeux. Comme ça, pour les installer, pas besoin de se souvenir du nom de chacun, il suffit d'installer le méta-paquet pour voir s'installer tous les jeux dont il dépend.

Maintenant, étudions ce qu'il y a dans un paquet. En gros, il contient deux types d'informations : le programme à installer, et toutes les informations qui vont permettre de l'installer.

Si vous êtes du genre à ne pas me croire sur parole, l'extension classique des paquets Debian est bien sûr .deb, et si vous utilisez le programme mc , vous pouvez voir le contenu de l'un d'entre eux en appuyant sur entrée après l'avoir sélectionné. Le répertoire CONTENTS contient le programme lui même, et tout le reste est constitué des informations sur le paquet. Faites F3 sur les différents fichiers pour voir ce qu'il y a dedans (et F10 pour sortir du visualiseur après). Bonne lecture.

Architecture
Debian est disponible pour différents processeurs (Intel et compatible, Sparc, PowerPC...) La liste s'agrandit d'année en année, et un programme compilé pour un processeur ne peut pas fonctionner sur un autre. Il est donc important de savoir pour quelle famille de processeur le paquet est prévu. C'est ce que l'on appelle l'« architecture »

Dépendances
D'autres informations très importantes sont les dépendances. On a vu que certains programmes ont besoin de certaines bibliothèques pour tourner. C'est une dépendance.

Mais il arrive aussi que deux paquets ne puissent pas fonctionner tous les deux s'ils sont tous les deux installés. C'est un cas particulier de dépendance, un conflit (dépendance Conflicts).

Par exemple, il y a différentes façons de discuter avec l'imprimante. Il y a donc différents programmes qui font ce boulot (lpr et lprng, par exemple). Mais il est clair qu'on va pouvoir utiliser un seul de ces programmes à un instant donné, sinon, ils parleraient tous les deux en même temps à l'imprimante qui serait sans doute un peu déboussolée.

Il y a encore d'autres types de dépendance, mais il n'est pas nécessaire de les connaître pour l'instant. Pour en savoir plus :


Debian Policy Declaring relationships between packages
http://www.debian.org/doc/debian-policy/

Bien, maintenant que nous savons un peu mieux ce que c'est qu'un paquet, voyons le minimum à savoir pour les utiliser. Tout d'abord, seul l'utilisateur root a le droit de changer les paquets installés sur le système. Ensuite, il nous faut un programme pour installer et désinstaller les paquets. Debian, dans sa grande mansuétude, nous fournit trois outils (au moins) pour le faire.

dpkg : C'est en fait le seul habilité à faire le boulot effectif de (dés)installation. Les autres ne sont que des sur-couches pour rendre son usage plus agréable. Un dpkg ---help est indispensable pour savoir s'en servir. Sachez juste qu'à moins de préciser une option du type ---force-*, il ne vous laissera pas faire de bêtise trop grave. Mais prudence quand même, c'est un outil puissant.

dselect : C'est une interface graphique (en mode caractère) très pratique quand on sait s'en servir. Dans le cas contraire, certains vont jusqu'à dire que c'est un programme pour vénusien halluciné. De plus, il tend à se faire de plus en plus rare, car il est remplacé par l'autre solution :

apt-get (dans le paquet apt) : il est magique. Il sait aller chercher sur le web ou les CD les paquets dont vous avez besoin, et les installer (en demandant à dpkg, bien sûr). Il a un seul défaut, pour l'instant, il n'a pas d'interface graphique fonctionnelle.

Ok. Nous avons fini ce tour d'horizon à la fois suffisamment long pour avoir fait fuir certains lecteurs et trop court pour vous apprendre à gérer les paquets. Mais vous apprendrez cela dans la documentation adéquate : les éternels Place aux questions classiques, maintenant.

3.2  Le fichier sources.list

Il s'agit du fichier où l'on précise à apt où il doit aller chercher les paquets ou, en terminologie Debian, quelles « sources » (de paquets) il faut utiliser.

Il est donc très important de bien configurer ce fichier, pour que les mises à jour soient assez rapides (ie, choix du bon serveur), et que les paquets installés soient ceux que vous voulez (ie, choix de la bonne distribution).

Créer ce fichier est l'une des première tâches des nouveaux venus sous Debian. Pour ce faire, il est bon de lire la page du manuel en donnant la syntaxe : sources.list.

On peut aussi s'inspirer de /usr/share/doc/apt/examples/sources.list , exemple de fichier fourni avec apt.

Ou encore utiliser l'utilitaire apt-setup qui vous aidera à construire un fichier valide.

Autre exemple, pour avoir la distribution unstable depuis des serveurs situés en France :

deb http://serveur/debian unstable main 
deb http://serveur/debian unstable contrib 
deb http://serveur/debian-non-US unstable/non-US  main non-free
Les sources de la forme deb-src permettent de télécharger les sources de paquets (qui, évidemment, contiennent également les sources de l'application «empaquetée»)

deb-src ftp://serveur/debian unstable main contrib non-free
Si vous disposez d'une source apt pour les paquets sources, la récupération d'un paquet source (et non binaire) s'obtient par :
apt-get source <paquet>

Le plus souvent, quand on essaye de mettre un fichier des sources au point,
apt râle qu'il n'arrive pas à télécharger les fichiers promis. C'est en général que l'on s'est trompé dans le chemin. Le plus simple est alors de prendre un client ftp, et d'aller voir quel est le bon chemin directement sur le site. Je veux dire que si j'ai mis dans mon fichier quelque chose comme :

[FAUX] deb ftp://serveur/debain unstable main contrib non-free
dans mon fichier de configuration, apt va se plaindre. Le plus simple est alors de pointer mon netscape sur server pour me rendre compte que le bon chemin est /debian et non /debain.

Voila, avec ces quelques exemples et pointeurs, je pense que vous devriez être capable de vous faire vous-même un fichier de sources aux petits oignons.


3.2.1  Améliorer son sources.list

Sécurité

Les utilisateurs de la version stable ne devraient se passer sous aucun prétexte des mises à jours de sécurité et des améliorations proposées :

deb http://security.debian.org stable/updates main contrib 
deb http://security.debian.org stable/updates main non-free 
deb ftp://serveur/debian dists/proposed-updates/ 
deb ftp://serveur/debian-non-US dists/proposed-updates/
(Il est conseillé de piocher les mises à jour de sécurité directement sur le serveur américain donné ici pour réduire encore le temps entre la découverte du trou de sécurité et l'installation du contre sur votre machine.)

Optimisation

En général, on considère que le meilleur serveur est le plus rapide. Pour mesurer la vitesse des différents serveurs, on peut utiliser le programme netselect.

Améliorer le fichier sources.list en testant chaque site sur son temps de latence et sa bande passante. Installation de
apt-spy
apt-get install apt-spy

mv /etc/apt/sources.list /etc/apt/sources.list.org

apt-spy -d testing -l sources.apt

netselect est similaire à apt-spy. Il crée un fichier sources.list plus complet, mais utilise une méthode moins bonne pour choisir le meilleur miroir (comparaison des temps de ping).

apt-setup est la méthode manuelle pour sélectionner les miroirs de sources.list, mais c'est toujours le meilleur moyen de choisir des miroirs tant que apt-spy n'a pas été amélioré.

Mais il faut aussi choisir un miroir à qui l'on puisse faire confiance (ie, exempt de paquets vérolés). Pour cela, le plus sage est sans doute de se limiter à des miroirs officiels. En cas de problème, on peut récupérer le md5sum du paquet sur un miroir officiel pour en vérifier l'authenticité.


Source sur un CDROM

Pour modifier le fichier des sources apt afin qu'il prenne en compte («pointe sur») les paquets fournis dans un CD, il suffit d'appeler la commande suivante et de suivre les instructions :
apt-cdrom add

3.3  Manipulations de base

3.3.1  Mettre à jour un paquet (et un seul).

Très simple, il suffit de demander à apt d'installer ce paquet. Si apt détecte une nouvelle version pour ce paquet, l'utilisateur en sera averti.
  1. Remettre la base à jour :
    apt-get update
  2. Installer le paquet :
    apt-get install nom-du-paquet

3.3.2  Bloquer la mise à jour d'un paquet

Dans le cas d'un paquet personnalisé ou particulièrement important, il est possible de vouloir empécher une mise à jour (plus ou moins volontaire...).

Il sufffit alors «de le passer en hold» :

echo "nom-du-paquet hold" | dpkg --set-selections

3.3.3  Installation d'un .deb

La commande usuelle pour installer «directement» un paquet (fichier .deb) est évidemment :
dpkg --install nom_pack_arch.deb

Toutefois, il est nécessaire de préciser que la vérification des dépendances effectuée par dpkg est moins complète que celle de apt. En conséquence, et notamment dans le cas d'un paquet recompilé « à la main », il est possible d'effectuer une installation par dpkg et de déstabiliser le système des dépendances, conduisant ainsi à des problèmes ultérieurs d'installation de paquets, de complexité variable.

Il est donc recommandé, autant que possible, de passer par une installation par apt.


3.3.4  Règles de survie

Quelques règles à respecter le plus scrupuleusement possible afin d'éviter de mauvaises surprises :
  1. Les installations/retraits de paquets par apt doivent systématiquement être simulées au préalable :
    apt-get action paramètres -s
  2. Toute installation de paquet devra être réalisée par apt, au risque, dans le cas contraire, de rendre incohérentes les dépendances de l'installation.
  3. Dans tous les cas (surtout face à un problème), prendre le temps de lire attentivement les messages des commandes apt et dpkg.

3.3.5  Fichiers et paquets

La liste des fichiers d'un paquet installé
dpkg -L nom-du-paquet
Le paquet installé fournissant un fichier
dpkg -S nom-du-fichier

3.3.6  Dpkg

La liste des paquets répertoriés
dpkg -l
Installer un fichier .deb
dpkg -i fichier.deb
Purger un paquet
dpkg --purge nom-paquet

3.3.7  Apt

Nous supposons ici que le fichier des sources est correct.
Mise à jour des index apt
apt-get update
Mise à jour de tous les paquets
apt-get upgrade
Installer des paquets
apt-get install paquet1 ...paquet2
Retrait de paquets
Le paquet est retiré mais les fichiers de configuration sont conservés
apt-get remove paquet1 ...paquet2
Purge de paquets
Le paquet est retiré de même que les fichiers de configuration au niveau système.
apt-get remove --purge paquet1 ...paquet2

Les configurations au niveau utilisateur pour une application
sont bien souvent stockées dans un répertoire utilisateur .application . Il convient donc de renommer ce répertoire (e.g. application.old ) (plutôt que de l'éliminer radicalement).
Vérification de l'état actuel
À effectuer systématiquement en fin de manipulation importante ou pendant la résolution d'un problème :
apt-get -f install
Nettoyage du cache apt
apt-get clean
Utilisation d'un proxy pour apt
(Julien Combes ) Dans le fichier /etc/apt/apt.conf , ajouter :

# pour un proxy http
Acquire::http://[[user][:pass]@]host[:port]/
# ou pour un proxy ftp.
Acquire::ftp://[[user][:pass]@]host[:port]/ 

3.4  Problèmes usuels

3.4.1  Conflit sur un fichier

Message caractéristique de apt-get

...
Dépaquetage de XXXXXX (à partir de
.../<XXXXXX*-*_i386.deb) ...
dpkg : erreur de traitement de
/var/cache/apt/archives/XXXXXX*-*.deb
(--unpack) :
 tentative de remplacement de «fichier», qui appartient aussi
au paquet YYYYYY
dpkg-deb: sous-processus paste tué par le signal (Relais brisé (pipe))
Description du problème :
Le paquet en cours d'installation XXXXXX contient le fichier fichier alors que celui-ci est également contenu dans le paquet déjà installé YYYYYY . Le fichier ne pouvant appartenir à deux paquets distincts, un conflit est signalé.

Solution(s) :
Deux solutions sont proposée, la première est plus naturelle mais non-systématique, la seconde est radicale mais à éviter autant que possible...

3.4.2  Saturation apt

Message caractéristique de apt-get

Reading Package Lists... Error!
E: Dynamic MMap ran out of room
E: Error occured while processing <XXXXXX> (NewVersion1)
E: Problem with MergeList 
/var/lib/apt/lists/..._Packages
E: The package lists or status file could not be parsed or opened.
Description du problème
Une table de taille fixe est allouée en mémoire pour stocker les informations relatives aux paquets fournis par les sources Debian. Ce message indique la saturation de cette table et donc l'incapacité de poursuivre l'analyse des sources Debian.

Solution(s)

3.5  Outillage

Il existe d'autres outils debian pour simplifier la vie sous debian, et en particulier avoir une information complète sur les paquets installés ou non. En voici quelques exemples bien pratiques.

3.5.1  apt-cache

Cette commande est à la fois très connue, et aussi sous exploitée. Elle est fournie par le paquet apt. Parmis les fonctions qu'elle propose, les plus utiles sont sûrement : Passons à la pratique :

3.5.2  apt-listchanges

Voici un utilitaire bien sympathique. À chaque fois que vous upgradez votre système, vous voulez savoir quels sont les changements apportés, alors apt-listchanges est le programme que vous cherchez. Il va vous prévenir, par pager, mail, page web dans votre navigateur, des changements qui se sont passés sur chaque paquet upgradé.

Pour le configurer, il suffit d'éditer le fichier 20listchanges présent dans /etc/apt/apt.conf.d/

DPkg::Pre-Install-Pkgs { "/usr/bin/apt-listchanges --apt -f mail
--email-address root@localhost || test $? -ne 10"; };
DPkg::Tools::Options::/usr/bin/apt-listchanges::Version "2";
remplacez -f par le frontend désiré, et si vous voulez recevoir un mail comme moi, donnez l'adresse email qui vous convient.

3.5.3  auto-apt

Certaines personnes sont parfois confrontées au problème suivant:

«J'ai besoin du fichier /usr/lib/foobar.h, mais il n'est pas installé, dans quel paquet se trouve ce fichier ?».

La réponse peut être donné par ce petit outil. Une fois installé, la première chose à faire est de construire le fichier de base de données dont se servira auto-apt. Deux solutions s'offrent à vous, les voici:
Une fois cette étape effectuée, on peut commencer à utiliser auto-apt, voici quelques exemples simples :
auto-apt check /usr/lib/foobar.h

On aura la réponse à la question qu'on se posait, et si foobar.h n'existe pas, c'est soit qu'il n'est pas dans un paquet debian, soit que vous avez fait update-local.
auto-apt list

La liste renvoyée est celle de tous les fichiers contenus dans les paquets, classée par répertoires. On peut lui donner l'option -v pour plus de détails, et -f pour choisir le fichier.

Une dernière fonctionnalité est la possibilité d'utiliser auto-apt comme un wrapper, pour qu'il aille chercher les fichiers manquantà l'exécution d'un programme, par exemple (avec les droits convenables) :
auto-apt run ./configure

auto-apt ira chercher les librairies manquante pour que le script configure se passe normalement. C'est donc un utilitaire qui peut rendre l'utilisation de la debian beaucoup plus confortable.


3.5.4  apt-spy

Voir 3.2.1

3.6  Méthodes de recherche de paquets

3.6.1  Un paquet déjà installé?

  1. Utiliser dpkg

    Pour chercher un paquet installé contenant le fichier toto :
    dpkg -S toto

    Pour chercher le paquet toto :
    dpkg -l toto

    Il est bien souvent préférable de généraliser, et chercher tous les paquets ayant toto dans leur nom :
    dpkg -l *toto*

    ou encore
    dpkg -l | grep toto


  2. Utiliser le programme dlocate, dans le paquet du même nom.

    En fait, ce programme fait plus ou moins la même chose que
    dpkg , mais il le fait bien plus vite. Pour plus d'information, voir : man dlocate ou dlocate ---help

3.6.2  Un paquet officiel (installé ou non) ?

  1. Utiliser apt-cache (existe depuis Debian 2.2)

    apt-cache permet de rechercher rapidement parmi la liste des paquets disponibles. Son utilisation la plus courante est avec l'option search qui prend une expression rationnelle en paramètre.
    apt-cache search emacs

    affichera tous les noms des paquets, avec une description courte, dont le nom ou la description contient le mot
    emacs. Pour faire une recherche uniquement sur les noms des paquets, ajouter l'option ---names-only :
    apt-cache search --names-only emacs

    apt-cache show nom-paquet

    fournira une description plus complète du paquet nommé.


  2. Demander aux robots irc

    Se connecter en irc au serveur irc.debian.org, canal #debian, puis : (avec toto le nom du paquet ou du fichier)
    %
      
      <mt> /msg dpkg !find toto <dpkg> toto is in package:
      bla...bla
    
    Si tu ne veux pas chercher dans la distribution instable, mais dans, par exemple slink, c'est pas plus dur :
    %
      
      <mt> /msg dpkg !find toto slink
    


  3. Chercher sur les pages faites pour ça

    Les dites pages: http://www.fr.debian.org/distrib/packages.

3.6.3  Un paquet retiré de Debian

Pour diverses raisons un paquet peut être rétiré de Debian et ne plus être facilement accessible. Une piste de recherche :
http://snapshot.debian.net

Ce site recense tous les paquets debian, y compris ceux qui ont été éliminés de debian pour cause de bugs trop nombreux, de failles de sécurités... Toutefois le site ne conserve pas les paquets qui posent des problèmes de licence.

Le site propose un mécanisme classique de récupération de paquet (sources Debian) mais paramétrable :

3.6.4  Un paquet non-officiel

Pour de multiples raisons, il peut être utile (ou nécessaire) d'installer des paquets Debian «non officiels» i.e. non-fournis par une source Debian officielle. Il existe une multitude de sources non-officielles, chacune répondant à un besoin particulier (applications spécifiquement paramétrées ou recompilées ...).

Un site est mis en place pour recenser et évaluer la qualité de ces sources «sauvages».


Site de recensemenet des sources non-officielles
http://www.apt-get.org

3.6.5  Un paquet quelconque?

Dans ce qui suit, il y a deux méthodes on ne peut plus générales. La première est utiisée pou chercher un paquet (quoiqu'on puisse l'adapter pour chercher un fichier de configuration sans problème), et la deuxième est utilisée pour chercher un fichier.
  1. Faire un grep brutal sur les fichiers de apt-get. Cela fonctionne pour tous les paquets qu'on pourrait installer d'un
    apt-get install
    (c'est à dire disponibles sur l'un des sites listés dans /etc/apt/sources.list )

    Ces fichiers sont accessibles dans le répertoire
    /var/lib/apt/lists .

    Exemple : Chercher le paquet
    cddb


    grep -h -15 "Package: cddb" /var/lib/apt/lists/* | pager

    • Le '-h' est pour se passer du nom du fichier dans lequel on a trouvé l'occurrence.
    • Le -15 pour grep est pour voir 15 lignes avant et 15 lignes après chaque occurrence de la recherche.
    • Je précise « Package: » pour n'avoir que le paquet cddb, et pas les paquets qui dépendent ou qui sont en conflit avec lui.

    Chez moi, ça donne (entre autres déchets) :
    
    Package: cddb 
    Priority: optional 
    Section: sound 
    Installed-Size: 86
    Maintainer: Adrian Bridgett <bridgett@debian.org> 
    Architecture: i386
    Source: xmcd 
    Version: 2.6-10 
    Replaces: xmcd (<=2.3-1) 
    Depends: libc6  (>= 2.2.3-7) 
    Conflicts: suidmanager (<<0.50) 
    Filename:  pool/main/x/xmcd/cddb_2.6-10_i386.deb
    


  2. Faire un grep sur un fichier Contents-<arch>.gz (Ce fichier est fait pour ça). Ça marche pour chercher un fichier dans un paquet même non installé de la distribution officielle (et peut être pour des non officiels, si les sources sont assez bien conçues pour mettre un tel fichier à disposition). On peut trouver ce fichier à divers endroits :
    • Sur CD (il faut évidemment un CD pour cela. Donc, a priori, c'est réservé aux utilisateurs de la version stable). Ce fichier se cache à :
      %
         
      <point de
      montage>/dists/<distribution>/Contents-<arch>.gz
      
      Par exemple, chez moi c'est:
      %
        
        /mnt/cdrom/dists/stable/Contents-i386.gz
      
    • Sur les sites ftp officiels, à peu près au même endroit :
      %
        
      <archive  ftp>/dists/<distribution>/Contents-<arch>.gz
      


    • Sur les sites non-officiels qui ont pensé à mettre ce fichier en place. J'ai fouiné un peu sur la liste des sources non officielles pour apt (http://www.internatif.org/bortzmeyer/debian/apt-sources/), et je n'ai trouvé aucune source mettant ce fichier à disposition. Mais ce n'est pas une preuve...

3.6.6  En savoir plus


Précédent Remonter Suivant