Gestion des Paquets .deb sous Debian avec dpkg, apt-get et aptitude
But de ce document
Ce document me sert de mémo sur les différentes commandes de gestion des paquets sous Debian. Je le diffuse en espérant qu’il puisse servir à d’autres personnes.
Si vous préférez utiliser une interface graphique pour gérer vos paquets, vous pouvez suivre ce mémo :
Activer la completion intelligente pour faciliter l’utilisation de la ligne de commande
Sous Linux, tout le monde connaît la complétion automatique avec la touche TAB, mais la complétion intelligente, permet en plus d’avoir la liste des options d’une commande (ex : apt-get) ou de connaître la liste des paquets commençants par certains caractères (ex : apt-get install vi +TAB). Je trouve qu’utiliser les commandes « apt » avec la complétion intelligente est pour moi plus simple que d’utiliser synaptique.
Pour activer la complétion intelligente, il faut saisir la commande suivante à la fin du fichier « /.bashrc » ou à la fin du fichier « /etc/profile » :
. /etc/bash_completion
Remarque : Pour une utilisation en console sous KDE de la completion intelligente, il est possible aussi de dé-commenter les 3 lignes correspondantes du fichier « /etc/bash.bashrc »
Bash avec completion dès la première tabulation
Sous Debian, pour avoir la liste des choix possibles de la completion il est nécessaire d’appuyer deux fois sur la touche TAB.
En ajoutant la ligne suivante à la fin du fichier « /etc/inputrc » ou du fichier « /.inputrc », la liste des choix sera affichée dés la première tabulation (après reconnexion) :
set show-all-if-ambiguous on
dpkg : Utilitaire de base pour gérer les paquets Debian .deb
dpkg est l’utilitaire de base sous Debian, pour installer, supprimer, configurer ou obtenir des informations sur des paquets (.deb). Contrairement à apt-get, il ne s’occupe pas du téléchargement et ne gère pas les dépendances.
| Opération | Commande |
|---|---|
| Installer un paquet présent en local | dpkg -i Nom_Exact_Du_Paquet |
| Supprimer un paquet | dpkg -r Nom_Exact_Du_Paquet |
| Supprimer un paquet même défectueux et marqué comme demandant une réinstallation | dpkg -r —force-remove-reinstreq Nom_Exacte_Du_Paquet |
| Liste complète des paquets installés | dpkg -l |
| Liste partielle des paquets installés | dpkg -l Nom_Du_Paquetdpkg -l Début_Du_Nom_Du_Paquet* dpkg -l *Nom_Partiel_Du_Paquet* |
| Rechercher l’emplacement du fichier contenu dans un paquet et le nom de ce paquet | dpkg -S Nom_Partiel_Du_Fichier |
| Connaître la liste des fichiers d’un paquet | dpkg -L Nom_Exacte_Du_Paquet |
| Informations complètes sur un paquet | dpkg -p Nom_Du_Paquet |
| Re-configurer un paquet | dpkg-reconfigure Nom_Exacte_Du_Paquet |
| Pour avoir l’historique des actions effectuées par dpkg | cat /var/log/dpkg.log |
Les scripts de pré-installation et post-installation des paquets sont disponibles dans :
/var/lib/dpkg/info.
Dans ce répertoire, les fichiers terminés par .list donnent la liste des fichiers installés par le paquet.
apt : Utilitaire avancé pour gérer les paquets Debian .deb
apt-get est un utilitaire plus évolué que dpkg qui permet d’installer des paquets en les téléchargeant depuis internet (ou depuis une autre source) à partir d’une liste de sites indiqués dans le fichier « /etc/apt/sources.list ».
/etc/apt/sources.list
Ce fichier contient la liste des sources des paquets.
Voici la syntaxe générale d’une ligne :
{deb | deb-src} URL {stable | testing | unstable} {main | contrib | non-free}
La ligne suivante permet de récupérer tous les paquets binaires de la Debian testing
deb http://ftp.fr.debian.org/debian/ testing main contrib non-free
La même ligne avec un accès ftp:
deb ftp://ftp.fr.debian.org/debian/ testing main contrib non-free
Il est possible d’écrire la ligne précédente sur 3 lignes
deb http://ftp.fr.debian.org/debian/ testing main
deb http://ftp.fr.debian.org/debian/ testing contrib
deb http://ftp.fr.debian.org/debian/ testing non-freeCette ligne est nécessaire uniquement pour pouvoir compiler des sources :
deb-src http://ftp.fr.debian.org/debian/ testing main
Cette ligne (facultative) permet de récupérer des paquets non autorisés aux US (ex : Algorithmes d’encryptage) :
deb http://non-us.debian.org/debian-non-US/ testing/non-US main
Cette ligne permet de récupérer les mises à jour de sécurité de la section principale (main)
deb http://security.debian.org/ testing/updates main
Voici un exemple complet pour suivre une Debian testing :
deb ftp://ftp.fr.debian.org/debian/ testing main non-free
deb-src ftp://ftp.fr.debian.org/debian/ testing main
deb http://security.debian.org/ testing/updates mainLa commande « apt-setup » permet d’utiliser une interface texte pour ajouter des sources à la fin du fichier.
La commande « netselect-apt » (apt-get install netselect-apt) permet de rechercher le miroir officiel Debian qui donne les meilleures performances de téléchargement. Il faut juste lui donner en argument la distribution utilisée :
netselect-apt testing
dpkg-reconfigure debconf : Configurer apt
Cette commande, permet de modifier le paramétrage d’apt et d’indiquer le niveau de priorité à partir duquel il doit poser des questions :
dpkg-reconfigure debconf
apt-get update : Mettre à jour la base de données des paquets
| Opération | Commande |
|---|---|
| Mettre à jour la liste des paquets disponibles sur les sites FTP | apt-get update |
| Mettre à jour la liste des paquets en utilisant un autre fichier que « /etc/apt/sources.list » | apt-get update -o Dir ::Etc ::SourceList=/etc/apt/monfichier |
apt-get install / remove : Installer ou supprimer des paquets
| Opération | Commande |
|---|---|
| Installer un nouveau paquet | apt-get install Expression_Régulière_Du_Paquetex : apt-get install ^kde* -> Installe tout ce qui commence par kde |
| Réinstaller un paquet | apt-get —reinstall install paquet |
| Supprimer un paquet | apt-get remove Expression_Régulière_Du_Paquet |
| Supprimer un paquet avec ces fichiers de configuration | apt-get —purge remove Expression_Régulière_Du_Paquet |
apt-get upgrade / dist-upgrade : Mettre à jour la distribution
| Opération | Commande |
|---|---|
| Mettre à jour tout le système Débian | apt-get upgrade |
| Mettre à jour tout le système Débian en téléchargeant les nouvelles versions des paquets et pas seulement les mises à jour. Attention : Cette commande peut également supprimer des paquets si c’est nécessaire au fonctionnement de l’ensemble du système. Cette commande s’utilise normalement que pour passer d’une version de Debian à une autre (ex : Pour passer de Testing à Unstable) | apt-get dist-upgrade |
| Télécharger toutes les mises à jour sans les installer | apt-get -dy upgrade |
| Mettre à jour le système en utilisant un autre fichier que « /etc/apt/sources.list » | apt-get upgrade -o Dir ::Etc ::SourceList=/etc/apt/monfichier |
| Mettre à jour tout le système Débian jusqu’au bout, malgré les erreurs rencontrées | apt-get upgrade -f |
apt-get clean : Vider le cache des paquets téléchargés
| Opération | Commande |
|---|---|
| Supprimer les paquets téléchargés dans « /var/cache/apt/archives » et installés (pour libérer de l’espace disque) | apt-get clean |
apt-cache : Recherches sur les paquets
| Opération | Commande |
|---|---|
| Affiche la description d’un paquet, même si celui-ci n’est pas installé. | apt-cache show paquet |
| Cherche « text » dans la description des paquets, même si celui-ci n’est pas installé. | apt-cache search text |
| Pour affiner la recherche, il est possible d’indiquer plusieurs textes à rechercher. | apt-cache search text1 text2 |
| L’option -f, permet d’avoir une description complète des paquets trouvés | apt-cache search -f text |
apt-file : Rechercher à quel paquet appartient un fichier.
Comme « dpkg -S » ou « dpkg -L », cette commande, permet de retrouver à quel paquet appartient un fichier ou permet de connaître le détail des fichiers d’un paquet. Mais contrairement à « dpkg », « apt-file », fonctionne également avec les paquets non installés à condition de mettre à jour la base de données avant de l’utiliser.
Par défaut, cette commande n’est pas installée. Pour pouvoir l’utiliser, il faut donc installer un paquet supplémentaire :
# apt-get install apt-file
| Opération | Commande |
|---|---|
| Mise à jour de la base de données. Attention : Étant donné le nombre importent de paquets du système Debian, la mise à jour du cache peut-être relativement longue. | apt-file updateRemarque : Pour pouvoir lancer cette commande et corriger un problème de dépendance, j’ai dû installer le paquet « curl » (apt-get install curl) |
| Liste des fichiers d’un paquet | apt-file list Nom_Partiel_Du_Paquet |
| Liste des paquets contenants un fichier | apt-file search Nom_Partiel_Du_Fichier |
Remarque : Étant donné le temps important nécessaire pour mettre à jour le cache, il est souvent plus rapide de faire la recherche directement sur Internet :
aptitude : Utilitaire avancé pour gérer les paquets Debian .deb
aptitude est utilisable en ligne de commandes comme apt. aptitude est désormais le frontal en mode texte pour APT à utiliser de préférence à la place d’apt-get car il est plus performant.
| Opération | Commande |
|---|---|
| Mise à jour de la liste des paquets | aptitude update |
| Mise à jour des paquets (installation des nouvelles version de tous les paquets) | aptitude upgrade |
| Télécharger les nouveaux paquets sans les installer (Opération pouvant être effectuée en batch dans un cron) | aptitude —download-only upgrade |
| Migrer vers une autre version de Debian (ex : Passage de testing à unstable) | aptitude dist-upgrade |
| Installer un paquet | aptitude install LePaquet |
| Supprimer un paquet | aptitude remove LePaquet |
| Purger un paquet (le supprimer sans laisser aucune trace) | aptitude purge LePaquet |
| Rechercher dans la description de tous les paquets le mot indiqué | aptitude search LeMot |
| Effacer les paquets du cache (/var/cache/apt/archives) | aptitude clean |
| Effacer les paquets du cache en conservant uniquement la dernière version de chaque paquet | aptitude autoclean |
Astuce : Personnellement, je place dans la crontab de root (crontab -e), la ligne suivante pour télécharger tous les jours les derniers paquets mais sans les installer :
00 18 * * * /usr/bin/aptitude update &&
/usr/bin/aptitude --download-only --assume-yes dist-upgrade &&
/usr/bin/aptitude autocleanapt-listchanges : connaître le détail des modifications des paquets
Le paquet « apt-listchanges », permet d’être informé à l’écran ou par mail des modifications effectuées sur les paquets avant de mettre à jour votre système à l’aide des commandes « apt-get upgrade » ou « apt-get dist-upgrade »
Pour cela, il faut commencer par installer ce nouveau paquet :
apt-get install apt-listchanges
Ensuite, il faut le configurer :
dpkg-reconfigure apt-listchanges
Pour informations, voici le paramétrage que j’utilise :
| Question | Réponse |
|---|---|
| Mode d’affichage des changements par apt | Pageur |
| Ignorer les changements déjà affichés | Non |
| Adresse où envoyer les changements | mon adresse mail |
| Type de changements affichés par apt | Les deux |
| Demande de confirmation après affichage des changement | Oui |
Avec cette configuration et avant chaque mise à jour du système, les modifications seront affichées à l’écran et envoyées par mail et une demande de confirmation sera affichée.
apt-listbugs : Éviter d’installer des paquets buggès
Le paquet « apt-listbugs », télécharge avant chaque installation de paquets les rapports de bugs émis sur ce paquet. Si un rapport de bug est émis, un message d’avertissement apparaît et demande une confirmation avant d’installer ce paquet. Cela permet d’éviter d’installer des paquets buggés ou d’être informé de problèmes éventuels.
Pour cela, il suffit d’installer ce paquet :
apt-get install apt-listbugs
netselect-apt : Trouver le miroir Debian le plus rapide
Certains miroirs Debian étant très sollicité (ex : ftp.fr.debian.org surtout lors de la sortie d’une nouvelle version) il existe un outil scannant tous les miroirs disponibles à la recherche du plus efficace. Installation du paquet :
# aptitude install netselect-apt
Lancement de la détection pour la version stable :
# netselect-apt stable
Pour plus d’infos, ne pas hésiter à lire la page de man
Utiliser apt-get derrière un proxy
Pour faire fonctionner apt-get derrière un proxy il faut ajouter la ligne suivante dans le fichier « /etc/apt/apt.conf » (Si ce fichier n’existe pas, il faut le créer) :
Acquire::http::Proxy "http://ServeurProxy:Port";
Il faut remplacer ServeurProxy par l’adresse IP ou le nom du serveur Proxy et Port par le numéro du port utilisé par le Proxy (ex : 3128 pour Squid).
Le gros avantage de passer derrière un Proxy est d’éviter de télécharger plusieurs fois les mêmes paquets pour plusieurs postes. Le programme « apt-proxy » permet également de mettre en cache des paquets pour plusieurs postes, mais celui-ci n’est disponible que sur Debian Stable et Instable (Pas sur Testing).
Copier la configuration d’un système sur un autre
Sur le premier système, faire :
dpkg --get-selections "*" >MaSelection.txt
Le paramètre "*", permet de prendre en compte les paquets à purger.
Le fichier MaSelection.txt contiendra tous les paquets installés sur le système.
Sur l’autre ordinateur récupérer le fichier MaSelection.txt et lancer les commandes suivantes :
dselect update
dpkg --set-selections
apt-get dselect-upgradeAutomatiser le téléchargement des mises à jour
Pour télécharger automatiquement à 12H5 du lundi au vendredi les mises à jour et envoyer un message d’avertissement à root, il faut écrire la ligne suivante dans le crontab de root (crontab -e) :
5 12 * * 1-5 (/usr/bin/apt-get update && /usr/bin/apt-get
-dy dist-upgrade) | mail -s "Mise à jour `hostname`" root Automatiser l’installation des mises à jour de sécurité
ATTENTION : Il peut être dangereux de faire des installations automatiquement sans aucun contrôle de l’administrateur. Donc la procédure ci-dessous est donnée à titre expérimentale et sans aucune garantie (D’ailleurs, je ne l’utilise pas :-) )
Pour automatiser l’installation des mises à jour de sécurité sans mettre à jour tout le système, il faut commencer par créer un nouveau fichier (ex : /etc/apt/sources.list.security) contenant la ligne suivante pour une Debian testing :
deb http://security.debian.org/ testing/updates main
Ensuite pour lancer l’installation automatiquement à 12H5 du lundi au vendredi et envoyer un message d’avertissement à root, il faut écrire la ligne suivante dans le crontab de root (crontab -e) :
5 12 * * 1-5 (/usr/bin/apt-get -o
Dir::Etc::SourceList=/etc/apt/sources.list.security
update && /usr/bin/apt-get -o
Dir::Etc::SourceList=/etc/apt/sources.list.security
dist-upgrade) | mail -s "Mise à jour Sécurité `hostname`" root Purger les paquets orphelins avec « deborphan »
Après avoir installé et supprimé de nombreux paquets, il arrive que des paquets contenant des librairies deviennent inutiles car celles-ci ne sont plus utilisées par aucun programme.
Le paquet « deborphan » donne la liste de ces libraires inutiles (orphelines).
Installation du paquet :
# apt-get install deborphan
Une fois la paquet installé, la commande suivante donne la liste des paquets inutiles :
# deborphan
Et la commande suivante permet de supprimer ces paquets :
# apt-get --purge remove `deborphan`
Remarque : Il faut lancer la commande précédente plusieurs fois jusqu’à la suppression de tous les paquets orphelins. Dans mon cas, je l’ai lancé 3 fois et j’ai supprimé 32 paquets et 17Mo.
Reconstituer un paquet à partir des fichiers installés
Si vous avez installé un paquet sur un poste et souhaitez l’installer sur un autre poste mais que celui-ci n’est plus disponible sur Internet, il est possible de le reconstruire.
Pour cela, il faut commencer par installer les paquets suivants :
# apt-get install fakeroot dpkg-repack
Ensuite, la commande suivante permet de reconstruire le paquet :
# fakeroot dpkg-repack MonPaquet
Ensuite, il suffit de copier le paquet régénéré sur l’autre poste et de l’installer :
# dpkg -i MonPaquet
Remarque : Cette méthode permet également de créer des paquets personnalisés avec vos propres fichiers de configuration.
Passer de Debian Testing à Debian Stable
Si à force de jouer avec votre fichier « /etc/apt/sources.list », vous avez installer par erreur des paquets d’une version plus récente (ex : Des paquets de Testing alors que vous êtes sous Stable), voici comment revenir en arrière et repasser tous vos paquets dans une version plus ancienne (ex : Stable)
Pour information, la commande suivante, permet de connaître les paquets plus récent que la version utilisée :
# apt-show-versions | grep newer
Créer le fichier « /etc/apt/preferences » et ajouter les lignes suivantes :
Package: *
Pin: release a=stable
Pin-Priority: 1001Ces lignes indiques que vous souhaitez utiliser la version stable. En mettant une « Pin-Priority » supérieur à 1000 cela autorise une mise jour vers des paquets plus anciens.
Ensuite, une simple mise à jour avec la simple commande suivante devrait réinstaller tous les paquets dans leur version « Stable » :
# aptitude upgrade
Autrement, ne pas hésiter à faire « man apt_preferences » ou man « apt-show-versions » pour avoir plus d’informations.
Attention : Une mise à jour vers une version plus ancienne n’est pas garanti mais fonctionne bien dans la plupart des cas.
Documentation officielle
Pour en savoir plus sur « apt », un paquet contenant une documentation très complète et en français existe :
aptitude install apt-howto-fr aptitude-doc-fr
Après l’installation de ces paquets, la documentation est disponible dans les dossiers « /usr/share/doc/Debian/apt-howto » et « /usr/share/doc/aptitude »
Cette documentation est fournie au format html, pdf et postscript. Pour ces deux dernières, il faut installer le paquet « gunzip » pour pouvoir les décompresser et les lire.
Liens Internet
La documentation officielle en français et très bien faite :
Pour voir la liste des paquets ou rechercher dans les répertoires de paquets ou rechercher dans le contenu des paquets :
Rechercher des informations sur des bugs :
Installer l’ancienne version d’un paquet :
Historique des modifications
| Version | Date | Commentaire |
|---|---|---|
| 0.1 | 10/09/04 | Création par Tony GALMICHE |
| 0.3 | 16/12/04 | Ajout Chapitre « Copier la configuration d’un système sur un autre » |
| 0.4 | 04/02/05 | Ajout « Automatiser le téléchargement » et « Automatiser l’installation » |
| 0.5 | 06/04/05 | Ajout chapitre « apt-file » |
| 0.6 | 12/04/05 | Ajout chapitre « apt-listchanges » |
| 0.7 | 28/06/05 | Ajout chapitre « apt-listbugs : Éviter d’installer des paquets buggès » |
| 0.8 | 27/07/05 | Ajout chapitre « Purger les paquets orphelins » (Merci Jibux) |
| 0.9 | 02/09/05 | Ajout chapitre « Reconstituer un paquet à partir des fichiers installés » |
| 1.0 | 20/08/06 | Ajout chapitre « aptitude » et « Activer la completion intelligente » |
| 1.1 | 08/05/07 | Ajout chapitre « netselect-apt : Trouver le miroir Debian le plus rapide » |
| 1.2 | 15/08/07 | Ajout chapitre « Passer de Debian Testing à Debian Stable » |

Commentaires
Gestion des Paquets .deb sous Debian avec dpkg, apt-get et apti
Merci pour l’info. Comme je suis sous Debian ETCH sur tous mes postes maintenant, je n’ai pas encore rencontré ce changement.
Gestion des Paquets .deb sous Debian avec dpkg, apt-get et apti
En suivant ce lien,
je me suis aperçu qu’aptitude avait changé ses commandes. D’ailleurs dans testing, si je fais un "aptitude upgrade", il me dit :" W : The "upgrade" command is deprecated ; use "safe-upgrade" instead.." En gros, upgrade est déprécié, utilise safe-upgrade à la place. De même, aptitude "dist-upgrade" est devenu aptitude "full-upgrade"
C’est un détail... mais l’article est intéressant dans l’utilisation d’aptitude en terminal.
Purger des fichiers de config d’un paquet deja enlevé
Si vous avez deja enlevé un paquet debian et que vous voulez purger ses fichiers de config, la solution consiste à utiliser aptitude.
Lancer aptitude et rechercher le paquet en question et puis utiliser la touche "_" pour purger puis valider par "g" !
Maintenant les fichiers de config ont été éffacés :)
Gestion des Paquets .deb sous Debian avec dpkg et apt-get
Salut Tony
Une autre commande bien pratique trouvée sur le forum debian :
# cat /var/log/dpkg.log | less
pour l’historique de toutes les actions.