Le système de paquets utilise sa propre base de données pour garder une trace
des paquets qui sont installés, de ceux qui ne sont pas installés et de ceux
qui peuvent être installés. Le programme apt-get
utilise cette
base de données pour retrouver comment installer les paquets demandés par
l'utilisateur ainsi que pour retrouver les paquets supplémentaires nécessaires
afin qu'un paquet sélectionné fonctionne correctement.
Pour mettre à jour cette liste, vous pouvez utiliser la commande apt-get
update
. Cette commande vérifie la liste des paquets trouvés dans les
archives dans /etc/apt/sources.list
: voir Le fichier /etc/apt/sources.list,
Section 2.1 pour plus d'informations sur ce fichier.
C'est une bonne idée d'exécuter cette commande de temps en temps pour vous garder, vous et votre système, informés des possibilités de mise à jour des paquets, particulièrement les mises à jour de sécurité.
Finalement, la procédure que vous attendiez tous ! Avec votre
sources.list prêt et votre liste de paquets disponibles à jour, tout ce que
vous avez à faire est de lancer apt-get
pour obtenir
le paquet que vous désirez installer. Par exemple, vous pouvez lancer :
apt-get install xchat
apt
cherchera dans sa base de données la version la plus récente
de ce paquet et le récupérera à partir de l'archive correspondante indiquée
dans sources.list. Dans le cas où ce paquet dépend d'autres
— comme c'est le cas ici — apt
vérifiera les
dépendances et installera les paquets nécessaires. Par exemple :
# apt-get install nautilus Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 17.2MB will be used. Do you want to continue? [Y/n]
Le paquet nautilus
dépend des bibliothèques partagées citées, et
apt
les mettra dans l'archive. Si vous aviez donné les noms de
ces bibliothèques sur la ligne de commande apt-get
,
apt
ne vous aurait pas demandé si vous vouliez continuer : il
aurait supposé que vous vouliez installer tous ces paquets.
Cela signifie que apt
demande confirmation seulement quand il est
nécessaire d'installer des paquets qui n'étaient pas spécifiés sur la ligne de
commande.
Les options suivantes d'apt-get
peuvent être utiles :
-h Ce texte d'aide -d télécharge seulement - N'installe PAS, ni ne décompresse les paquets -f Essaie de continuer si la vérification de l'intégrité échoue -s Pas d'action. Effectue seulement une simulation -y Suppose une réponse affirmative à toutes les requêtes et n'interroge pas -u Affiche une liste des paquets à mettre à jour
Plusieurs paquets peuvent être sélectionnés pour installation sur une seule ligne. Les fichiers téléchargés sur le réseau sont placés dans le répertoire /var/cache/apt/archives pour une installation ultérieure.
Vous pouvez indiquer les paquets à retirer sur la même ligne de commande. Mettez seulement un « - » juste après le nom du paquet à enlever, comme ceci :
# apt-get install nautilus gnome-panel- Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Voyez la section Suppression de paquets, Section 3.3 pour plus de détails sur la suppression de paquets.
Si vous endommagez d'une manière ou d'une autre un paquet installé, ou si vous voulez simplement que les fichiers d'un paquet soient réinstallés avec la nouvelle version disponible, vous pouvez utiliser l'option --reinstall comme ça :
# apt-get --reinstall install gdm Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded. Need to get 0B/182kB of archives. After unpacking 0B will be used. Do you want to continue? [Y/n]
Si vous ne voulez plus utiliser un paquet, vous pouvez le supprimer de votre
système en utilisant apt
. Pour ce faire, tapez seulement
apt-get remove paquet. Par exemple :
# apt-get remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Comme vous pouvez le voir dans l'exemple ci-dessus, apt
prend soin
de supprimer les paquets qui dépendent du paquet dont vous avez demandé la
suppression. Avec apt
, il n'est pas possible de supprimer un
paquet sans supprimer aussi les paquets dépendant de celui-ci.
Exécuter apt-get
comme ci-dessus, cela entrainera la suppression
des paquets mais leurs fichiers de configuration, s'il y en a, resteront
intacts sur le système. Pour une suppression complète du paquet, lancez :
# apt-get --purge remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Remarquez après les noms le signe « * ». Cela indique que les fichiers de configuration vont aussi être supprimés.
Comme avec la méthode install, vous pouvez utiliser un symbole avec remove pour inverser le sens d'un paquet en particulier. Dans le cas de la suppression, si vous ajoutez un « + » juste après le nom du paquet, le paquet sera installé au lieu d'être supprimé.
# apt-get --purge remove gnome-panel nautilus+ Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 nautilus The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Notez que apt-get
liste les paquets supplémentaires qui seront
installés (c'est-à-dire, les paquets dont l'installation est nécessaire au bon
fonctionnement du paquet dont l'installation a été demandée), ceux qui seront
supprimés, et ceux qui seront installés (toujours dans les paquets
supplémentaires).
La mise à niveau de paquets est une vraie réussite du système apt
.
Une simple commande suffit : apt-get upgrade
. Vous pouvez
utilisez cette commande pour mettre à niveau les paquets d'une même
distribution, et aussi pour mettre à niveau vers une nouvelle distribution,
bien que la commande apt-get dist-upgrade
soit préférée à cette
dernière ; voir Mettre à niveau vers une
nouvelle distribution, Section 3.5 pour plus de détails.
Il est utile d'exécuter cette commande avec l'option -u. Cette
option oblige apt
à afficher la liste complète des paquets qui
seront mis à niveau. Sans elle, vous ferez vos mises à niveau en aveugle.
apt
téléchargera les dernières version de chaque paquet et les
installera dans le bon ordre. C'est important de toujours lancer apt-get
update
avant de l'essayer. Voir la section Mise à
jour de la liste des paquets disponibles., Section 3.1. Observez cet
exemple :
# apt-get -u upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages have been kept back cpp gcc lilo The following packages will be upgraded adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded. Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used. Do you want to continue? [Y/n]
Le processus est très simple. Notez que dans les premières lignes,
apt-get
dit que certains paquets ont été laissés de
côté (NdT : « kept back »). Cela signifie qu'il y a de
nouvelles versions de ces paquets qui ne seront pas installées pour plusieurs
raisons. Les raisons possibles sont des dépendances cassées (un paquet dont il
dépend n'a pas de version disponible en téléchargement) ou de nouvelles
dépendances (le paquet dépend de nouveaux paquets depuis la dernière version).
Pour le premier cas, il n'y a pas de solution propre. Pour le second, il
suffit d'exécuter apt-get install
sur le paquet en question
il téléchargera ainsi les dépendances. Une meilleure solution est d'utiliser
dist-upgrade. Voir la section Mettre à
niveau vers une nouvelle distribution, Section 3.5.
Cette caractéristique d'apt
permet de mettre à niveau tout un
système Debian en seule fois, soit par Internet ou soit par un nouveau cédérom
(commandé ou téléchargé en image ISO).
Elle est aussi utilisée quand des changements dans les dépendances des paquets
installés sont faits. Avec apt-get upgrade
, ces paquets seraient
laissés de côté (NdT :kept back).
Par exemple, supposons que vous utilisiez la révision 0 de la version stable de
Debian et que vous achetiez un cédérom de la révision 3. Vous pouvez utiliser
apt
pour mettre à niveau votre système avec ce nouveau cédérom.
Pour le faire, utilisez apt-cdrom
(voir la section Ajouter un cédérom dans le fichier
sources.list, Section 2.4) pour ajouter le cédérom à votre
/etc/apt/sources.list
et lancez apt-get
dist-upgrade.
Il est important de noter que apt
cherche toujours la version du
paquet la plus récente. Ainsi, si votre /etc/apt/sources.list
listait une archive qui a une version plus récente que la version sur le
cédérom, apt
téléchargerait le paquet à partir de là.
Dans l'exemple de la section Mise à niveau des paquets, Section 3.4, nous avons vu que quelques paquets avaient été laissés de côté (NdT « kept back »). Nous allons maintenant résoudre ce problème par la méthode dist-upgrade :
# apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following NEW packages will be installed: cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages have been kept back lilo The following packages will be upgraded adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded. Need to get 0B/7098kB of archives. After unpacking 3118kB will be used. Do you want to continue? [Y/n]
Notez maintenant que le paquet va être mis à niveau et des nouveaux paquets vont aussi être installés (les dépendances des paquets). Notez également que lilo est toujours laissé de côté. Il a probablement un problème plus important qu'une nouvelle dépendance. Nous pouvons le découvrir en lançant :
# apt-get -u install lilo Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be REMOVED: debconf-tiny The following NEW packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be upgraded lilo 1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded. Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used. Do you want to continue? [Y/n]
Comme affiché ci-dessus, lilo a un nouveau conflit avec le paquet
debconf-tiny
, ce qui signifie qu'il ne peut pas être installé (ou
mis à niveau) sans suppression de debconf-tiny.
Pour savoir ce qu'un paquet ajoute ou supprime, vous pouvez utiliser ceci :
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Starting Starting 2 Investigating python1.5 Package python1.5 has broken dep on python1.5-base Considering python1.5-base 0 as a solution to python1.5 0 Holding Back python1.5 rather than change python1.5-base Investigating python1.5-dev Package python1.5-dev has broken dep on python1.5 Considering python1.5 0 as a solution to python1.5-dev 0 Holding Back python1.5-dev rather than change python1.5 Try to Re-Instate python1.5-dev Done Done The following packages have been kept back gs python1.5-dev 0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Cette fois, il est facile de remarquer que le paquet python1.5-dev ne peut pas être installé à cause de dépendances non satisfaites : python1.5.
Lorsque vous installez un paquet APT récupère les fichiers nécessaires depuis
les hôtes listés dans /etc/apt/sources.list, les stocke dans un référentiel
local (/var/cache/apt/archives/
), et ensuite procède à
l'installation, voir Installation de paquets, Section
3.2.
Le référentiel local peut grandir dans le temps et utiliser beaucoup d'espace
disque. Heureusement, APT fournis des outils pour gérer son référentiel
local : les méthodes apt-get
clean et
autoclean.
apt-get clean
supprime tout à part les fichiers verrou dans
/var/cache/apt/archives/
et
/var/cache/apt/archives/partial/
. Ainsi, si vous avez besoin de
réinstaller un paquet APT devra le retélécharger.
apt-get autoclean
supprime seulement les paquets qui ne peuvent
plus être téléchargés.
L'exemple suivant montre comment apt-get autoclean fonctionne :
# ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm* logrotate_3.5.9-7_i386.deb logrotate_3.5.9-8_i386.deb gpm_1.19.6-11_i386.deb
Il y a deux fichiers pour le paquet logrotate
et un pour le paquet
gpm
dans /var/cache/apt/archives.
# apt-show-versions -p logrotate logrotate/stable uptodate 3.5.9-8 # apt-show-versions -p gpm gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12
apt-show-versions
montre que
logrotate_3.5.9-8_i386.deb
fournis la version à jour de
logrotate
, donc logrotate_3.5.9-7_i386.deb
est
inutile car une version plus récente du paquet peut être rapatriée.
# apt-get autoclean Reading Package Lists... Done Building Dependency Tree... Done Del gpm 1.19.6-11 [145kB] Del logrotate 3.5.9-7 [26.5kB]
Finalement, apt-get autoclean ne supprime que les anciens fichiers. Pour plus d'informations sur apt-show-versions, voyez Comment mettre à niveau un paquet d'une distribution Debian spécifique ?, Section 3.9.
apt
avec dselect
dselect
est un programme qui aide les utilisateurs à sélectionner
des paquets Debian pour les installer. Il est considéré comme un peu difficile
et plutôt rébarbatif mais avec de la pratique vous pouvez maîtriser son
interface console basée sur ncurse.
Un avantage de dselect est qu'il sait comment utiliser le fait que les paquets
Debian « recommandent » et « suggèrent » d'autres paquets à
installer. Pour utiliser ce programme, exécutez
« dselect » en tant que root. Choisissez
« apt » comme méthode d'accès. Ce n'est pas vraiment nécessaire,
mais si vous n'utilisez pas de cédérom et que vous voulez télécharger des
paquets à partir d'Internet, c'est la meilleure façon d'utiliser
dselect
.
Pour acquérir une meilleure compréhension de l'usage de dselect
,
lisez la documentation de dselect
sur la page Debian http://www.debian.org/doc/ddp
.
Après avoir fait votre sélection avec dselect
, utilisez :
# apt-get -u dselect-upgrade
comme dans l'exemple ci-dessous :
# apt-get -u dselect-upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: lbxproxy The following NEW packages will be installed: bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0 gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy util-linux-locales vacation xbill xplanet-images The following packages will be upgraded debian-policy 1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded. Need to get 7140kB of archives. After unpacking 16.3MB will be used. Do you want to continue? [Y/n]
Comparez avec ce que nous avons vu lorsque nous avons lancé apt-get
dist-upgrade
sur le même système :
# apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following packages will be upgraded debian-policy 1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 421kB of archives. After unpacking 25.6kB will be freed. Do you want to continue? [Y/n]
Notez que beaucoup de paquets ci-dessus vont être installés parce que les
autres paquets les « suggèrent » ou les « recommandent ».
D'autres seront installés ou supprimés (dans le cas de lbxproxy, par exemple)
grâce aux choix que nous avons faits lorsque nous naviguions dans la liste de
paquets de dselect
. dselect
peut être un outil très
puissant lorsqu'il est utilisé conjointement avec apt
.
Les gens sont parfois intéressés par l'utilisation d'une version de Debian comme distribution principale et plusieurs paquets d'une autre branche.
Pour configurer votre version principale de Debian, vous devriez modifier le
fichier /etc/apt/apt.conf
afin qu'il contienne la ligne
suivante :
APT::Default-Release "version";
où version est la version de Debian que vous voulez utiliser en tant que distribution principale. Les versions que vous pouvez utiliser sont : stable, testing et unstable. Pour installer des paquets d'une autre distribution, vous devrez utiliser APT de la façon suivante :
# apt-get -t distribution install nom_du_paquet
Pour que cela fonctionne, vous avez besoin d'au moins une ligne dans votre
/etc/apt/sources.list
de la distribution d'où provient le paquet
et que ce paquet existe dans cette source.
Vous pouvez aussi demander une version spécifique d'un paquet en utilisant la syntaxe suivante :
# apt-get install paquet=version
Par exemple, la ligne ci-dessous installera la version 2.2.4-1 du
paquet nautilus
:
# apt-get install nautilus=2.2.4-1
IMPORTANT : la distribution « unstable » de Debian est la version où les nouvelles versions des paquets Debian sont d'abord déposées. Cette distribution voit tous les changements des paquets, petits et plus importants qui affectent beaucoup de paquets ou tout le système. Pour cette raison, cette version ne devrait pas être utilisée par des utilisateurs non expérimentés ou par ceux qui ont besoin de stabilité.
La distribution « testing » n'est pas nécessairement meilleure que « unstable » parce que les mises à jour de sécurité ne sont pas rapides. Pour des serveurs ou d'autres systèmes en production, le distribution « stable » devrait toujours être utilisée.
Pour les utilisateurs de distribution mixte, apt-show-versions
est
un moyen sûr pour mettre à niveau leur système, en contrôlant la part de la
distribution la moins stable qu'ils veulent. Pour l'instant, il est possible
de mettre à niveau seulement vos paquets unstable en exécutant, après avoir
installé le paquet apt-show-versions
:
# apt-get install `apt-show-versions -u -b | grep unstable`
Vous avez sûrement eu l'occasion de modifier quelque chose dans un paquet et vous n'avez pas eu le temps ou l'envie de les transférer dans une nouvelle version du programme. Ou, par exemple, vous venez juste de passer à la distribution 3.0 de Debian, mais vous voulez continuer avec la version 2.2 pour certains paquets. Vous pouvez « étiqueter » la version que vous avez installée de manière à ce qu'elle ne soit pas mise à niveau.
Utiliser cette fonctionnalité est simple. Vous avez seulement besoin de
modifier le fichier /etc/apt/preferences
.
Le format est simple :
Package: <package> Pin: <pin definition> Pin-Priority: <pin's priority>
Par exemple, pour garder le paquet sylpheed
que j'ai modifié pour
utiliser « reply-to-list » dans la version 0.4.99, j'ai ajouté :
Package: sylpheed Pin: version 0.4.99*
Notez que j'utilise un * (astérisque). C'est un « joker » ; cela signifie que je veux que cette « étiquette » soit valable pour toutes les versions commençant par 0.4.99. C'est parce que Debian donne un numéro de révision à ses paquets et je ne veux pas éviter l'installation de ces révisions. Et, par exemple, les versions 0.4.99-1 et 0.4.99-10 seront installées dès qu'elles seront disponibles. Notez que si vous avez modifié le paquet, vous ne voudrez pas procéder ainsi.
Le champ Pin-Priority est optionnel ; s'il n'est pas spécifié, la valeur par défaut est 989.
Regardons maintenant comment les priorités des étiquettes fonctionnent. Une priorité inférieure à 0 indique que le paquet ne devrait jamais être installé. Les priorités de 0 à 100 indiquent les paquets qui ne sont pas installés et qui n'ont pas de version disponible. Ils ne viendront pas dans le processus de choix de la version. La priorité 100 est la priorité assignée à un paquet installé - pour remplacer la version installée d'un paquet, la version de remplacement doit avoir une priorité supérieure à 100.
Les priorités au-dessus de 100 indiquent qu'un paquet devrait être installé. La version des paquets installés est changée seulement pour le mettre à niveau vers une nouvelle version. Toutes les priorités entre 100 et 1000 (inclus) indiquent ce comportement typique. Quand un paquet possède une telle priorité, on ne peut installer une version avec un numéro inférieur. Par exemple, si j'ai sylpheed 0.5.3 et si j'ai défini une étiquette pour sylpheed 0.4.99 avec une priorité de 999, le paquet 0.4.99 ne pourra pas être installé. Pour pouvoir revenir à une version inférieure et suivre l'étiquette, un paquet doit avoir une priorité supérieure à 1000.
Une étiquette peut être spécifiée sur la version, la distribution ou l'origine d'un paquet.
Pour étiqueter une version, nous avons vu qu'on pouvait utiliser les numéros de version de manière littérale aussi bien que les jokers pour spécifier plusieurs versions en une fois.
L'option release dépend du fichier Release d'un référentiel
d'apt
ou d'un cédérom. Cette option peut être sans intérêt si
vous utilisez des référentiels de paquets qui ne contiennent pas ce fichier.
Vous pouvez voir le contenu de ce fichier Release dans
/var/lib/apt/lists. Les paramètres de la distribution sont :
a (archive), c (composants), v
(version), o (origine) et l (label).
Un exemple :
Package: * Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian Pin-Priority: 1001
Dans cet exemple, nous avons choisi les versions Debian 2.2* (qui peuvent être 2.2r2, 2.2r3 — cela satisfait les distributions qui incluent les correctifs de sécurité et d'autres mises à jour très importantes), le référentiel stable, la section main (opposée à contrib ou non-free) et l'origine et le label Debian. L'origine (o=) définit qui a produit ce fichier Release, le label (l=) définit le nom de la distribution : Debian pour Debian elle-même et Progeny pour Progeny, par exemple. Un simple fichier Release :
$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release Archive: stable Version: 2.2r3 Component: main Origin: Debian Label: Debian Architecture: i386
APT HOWTO
1.8.5 - juin 2002kov@debian.org
leonptitlouis@ifrance.com