Association Générale des Utilisateurs de logiciels libres en Côte-d'Or

logo_coagul

Gestion des Paquets .deb sous Debian avec dpkg, apt-get et aptitude

Rubrique : Debian
Le : mercredi 15 août 2007
Par : Tony  
Visites : 64816
Tags : apt-get, aptitude, Débian, dpkg

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 :
- http://www.coagul.org/article.php3 ?id_article=617

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érationCommande
Installer un paquet présent en localdpkg -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éinstallationdpkg -r —force-remove-reinstreq Nom_Exacte_Du_Paquet
Liste complète des paquets installésdpkg -l
Liste partielle des paquets installésdpkg -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 dpkgcat /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}

- deb : Adresse de paquets binaires (compilés)
- deb-src : Adresse de paquets sources
- main : Les paquets principaux
- contrib : Les paquets plus vraiment supportés
- non-free : Les paquets de logiciels non libres (propriétaires)

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-free

Cette 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 main

La 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érationCommande
Mettre à jour la liste des paquets disponibles sur les sites FTPapt-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érationCommande
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 paquetapt-get —reinstall install paquet
Supprimer un paquet apt-get remove Expression_Régulière_Du_Paquet
Supprimer un paquet avec ces fichiers de configurationapt-get —purge remove Expression_Régulière_Du_Paquet

apt-get upgrade / dist-upgrade : Mettre à jour la distribution

OpérationCommande
Mettre à jour tout le système Débianapt-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 installerapt-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éesapt-get upgrade -f

apt-get clean : Vider le cache des paquets téléchargés

OpérationCommande
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érationCommande
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ésapt-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érationCommande
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 paquetapt-file list Nom_Partiel_Du_Paquet
Liste des paquets contenants un fichierapt-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 :
- http://www.debian.org/distrib/packages#search_contents

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érationCommande
Mise à jour de la liste des paquetsaptitude 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 paquetaptitude install LePaquet
Supprimer un paquetaptitude 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 paquetaptitude 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 autoclean

apt-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 aptPageur
Ignorer les changements déjà affichésNon
Adresse où envoyer les changementsmon adresse mail
Type de changements affichés par aptLes deux
Demande de confirmation après affichage des changementOui

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 <MaSelection.txt
apt-get dselect-upgrade

Automatiser 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: 1001

Ces 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 :
- http://www.debian.org/doc/manuals/quick-reference/ch-package.fr.html

Pour voir la liste des paquets ou rechercher dans les répertoires de paquets ou rechercher dans le contenu des paquets :
- http://www.debian.org/distrib/packages

Rechercher des informations sur des bugs :
- http://bugs.debian.org/package-name si vous connaissez le nom du paquet
- http://bugs.debian.org/bugnumber si vous connaissez le numéro du bogue

Installer l’ancienne version d’un paquet :
- http://snapshot.debian.net/

Historique des modifications

VersionDateCommentaire
0.110/09/04Création par Tony GALMICHE
0.316/12/04Ajout Chapitre « Copier la configuration d’un système sur un autre »
0.404/02/05Ajout « Automatiser le téléchargement » et « Automatiser l’installation »
0.506/04/05Ajout chapitre « apt-file »
0.612/04/05Ajout chapitre « apt-listchanges »
0.728/06/05Ajout chapitre « apt-listbugs : Éviter d’installer des paquets buggès »
0.827/07/05Ajout chapitre « Purger les paquets orphelins » (Merci Jibux)
0.902/09/05Ajout chapitre « Reconstituer un paquet à partir des fichiers installés »
1.020/08/06Ajout chapitre « aptitude » et « Activer la completion intelligente »
1.108/05/07Ajout chapitre « netselect-apt : Trouver le miroir Debian le plus rapide »
1.215/08/07Ajout chapitre « Passer de Debian Testing à Debian Stable »
Version imprimable de l'article

Forum


  • Gestion des Paquets .deb sous Debian avec dpkg, apt-get et aptitude
    15 août 2007, par Claude
    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.
    • Gestion des Paquets .deb sous Debian avec dpkg, apt-get et aptitude
      19 août 2007, par Tony
      Merci pour l’info. Comme je suis sous Debian ETCH sur tous mes postes maintenant, je n’ai pas encore rencontré ce changement.
  • Purger des fichiers de config d’un paquet deja enlevé
    16 mai 2007, par Frédéric STEMMELIN

    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
    27 mai 2006, par jibux

    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.

Site réalisé sous Spip. Merci à NFrance pour son hébergement gracieusement offert. Tous les articles de ce site sont sous licence Creative Commons by-nc-sa (CC).