Une erreur à corriger, une suggestion à faire, une contribution à apporter ?
N'hésitez-plus ! Just write it!
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 :
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
-
<programme> --help,
- man<programme>
- et autre info<programme>.
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 :
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
| mv |
/etc/apt/sources.list /etc/apt/sources.list.org |
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 :
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.
-
Remettre la base à jour :
- Installer le 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 :
-
Les installations/retraits de paquets par apt doivent
systématiquement être simulées au préalable :
- 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.
- 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é
-
- Le paquet installé fournissant un fichier
-
-
La liste des paquets répertoriés
-
- Installer un fichier .deb
-
- Purger un paquet
-
Nous supposons ici que le fichier des sources est correct.
-
Mise à jour des index apt
-
- Mise à jour de tous les paquets
-
- Installer des paquets
-
- Retrait de paquets
- Le paquet est retiré mais les fichiers de
configuration sont conservés
- 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 :
- Nettoyage du cache apt
-
- 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...-
En général, ce conflit est signalé lorsque une réorganisation de
paquets (et donc des fichiers) est mise en place. Il convient donc
de chercher à installer l'ensemble des paquets nécessaires, ce qui
devrait conduire au remplacement du paquet en place YYYYYY
et donc à l'élimination naturelle du conflit.
- Terminer l'installation de XXXXXX
par
utilisation de l'option --overwrite de dpkg
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)
-
retirer des sources temporairement inutiles du fichier
/etc/apt/sources.list
- modifier la taille autorisée pour la table interne de apt :
voir 5.2 page ??.
3.5 Outillage
-
Julien Reveret (Juillet 2003)
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.
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 :
-
permet de rechercher une chaîne de caractères dans la liste des
paquets, ainsi que dans leur description. Voir les exemples
ci-dessous.
-
affiche divers champs du paquet, numero de version, dépendances, le
nom du mainteneur, la description.
-
aide au debuggage si vous avez des préférences, ou plusieurs
sources de paquets et que vous voulez savoir comment sont fait les choix d'apt.
-
affiche toutes les dépendances d'un paquet, ainsi que les
paquets suggérés par le mainteneur.
Passons à la pratique :
-
Cherchons tous les paquets qui ont un lien avec le projet gnome :
On obtient une liste longue, de tous les paquets qui ont un lien (pas
forcément visible) avec gnome. Si on cherche un logiciel de mail pour gnome,
on peut alors affiner la recherche :
On a alors 3-4 réponses, parmis lesquelles on peut choisir.
- Toujours pour nos logiciels de mail, maintenant qu'on a leur nom, on veut en
savoir un peu plus sur eux, on tape donc :
et on a les renseignements qu'on voulait. C'est simple et efficace.
- On va avoir des informations sur les versions disponibles, et sur quel
serveur on peut le prendre :
cronosii:
Installed: (none)
Candidate: 0.2.2.23-2
Version Table:
0.2.2.23-2 0
500 ftp://ftp2.de.debian.org sid/main Packages
On voit que le paquet n'est pas installé, que la version
disponible est la 0.2.2.23-2, et que le serveur sur lequel apt téléchargerait
le paquet ftp2.de.debian.org .
- On va obtenir les informations qui nous manque, les paquets dont dépends
celui qu'on veut installer, ceux suggérés par le mainteneur. Dans le cas de
notre logiciel :
cronosii
Depends: gdk-imlib1
Depends: libart2
Depends: libaudiofile0
Depends: libc6
Depends: libdb3
|Depends: libesd0
Depends: libesd-alsa0
Depends: libfreetype6
Depends: libgdk-pixbuf2
Depends: libglib1.2
Depends: libgnome32
Depends: libgnomeprint15
Depends: libgnomesupport0
Depends: libgnomeui32
Depends: libgtk1.2
Depends: libxml1
Depends: xlibs
Depends: zlib1g
Le | devant la ligne libsed0 signale que la dépendance est sur libesd ou sur
la suivante, ie, libesd-alsa0.
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.
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:
-
pour faire une base de données des paquets installés
sur votre machine
-
pour faire une base de données de tous les paquets debian de votre distribution
Une fois cette étape effectuée, on peut commencer à utiliser auto-apt, voici
quelques exemples simples :
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.
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 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.
Voir 3.2.1
3.6 Méthodes de recherche de paquets
3.6.1 Un paquet déjà installé?
-
Utiliser dpkg
Pour chercher un paquet installé contenant le fichier toto :
Pour chercher le paquet toto :
Il est bien souvent préférable de généraliser, et chercher tous les
paquets ayant toto dans leur nom :
ou encore
- 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) ?
- 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.
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 :
fournira une description plus complète du paquet nommé.
- 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
- 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 :
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 :
-
par date absolue (YYYY/MM/DD)
- par date relative (format date)
- par nom de paquet
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».
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.
- Faire un grep brutal sur les fichiers de apt-get. Cela
fonctionne pour tous les paquets qu'on pourrait installer d'un
(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
- 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