I. Présentation

J'ai trouvé la définition parfaite sur le wiki d'Ubuntu-fr, j'ai donc décidé de la recopier telle quelle :

dpkg (qui signifie Debian PacKaGe) est un outil logiciel en ligne de commande chargé de l'installation, la création, la suppression et la gestion des paquets Debian (.deb), le type de paquets traités par Ubuntu. Il permet aussi la gestion de paquets Debian en provenance de sources extérieures aux dépôts APT.

Tout est dit, dpkg est l'outil "de base" qu'utilise apt. Concrètement, quand vous faites un apt-get install, derrière, c'est dpkg qui travaille.

Ben alors, si apt utilise dpkg, pourquoi ne pas nous présenter uniquement apt ?

Les applications ne sont pas les mêmes. En effet, vous pourrez faire certaines opérations avec apt que vous ne pourrez pas faire avec dpkg. Chacun fait certaines choses mieux que l'autre. Par exemple, dpkg n'a pas de sources distantes où il va interroger des dépôts de paquets (ce que fait apt, aller chercher les paquets directement sur Internet), par contre, dpkg gère très bien les paquets installés sur votre machine (ce que ne fait pas apt).
Pour simplifier grossièrement, apt se charge d'installer des paquets disponibles sur Internet (via les sources) et dpkg gère les paquets installés sur votre machine.

Mais revenons à nos moutons, j'ai décidé de vous présenter dpkg car je trouve que ses options sont, une fois qu'on les connaît, réellement indispensables !


II. Les options

Voici donc les principales options de dpkg :

dpkg -i nom_du_package.deb : La commande la plus classique, elle installe un paquet qui se trouve sur votre ordinateur.

dpkg -S fichier : Affiche à quel paquet correspond fichier.
Exemple : dpkg -S /etc/icecast2/icecast.xml
icecast2: /etc/icecast2/icecast.xml

dpkg -l (L minuscule) [nom_paquet] : Liste tous les paquets installés ou ayant été installés sur votre machine. [nom_paquet] est facultatif, il faut lui renseigner le nom du paquet exact.
Exemple : Je veux afficher uniquement le paquet de mon émulateur NES FCEU, je tape dpkg -l | grep fceu

||/ Nom               Version                   Description
+++-======-===========-==============================
ii  fceu                0.98.12-3              FCE Ultra - a nintendo (8-bit) emulator
ii  fceu-server     0.0.5-0ubuntu2     Server for the FCE Ultra NES emulator
ii  gfceu              0.6.0-0ubuntu2     Graphical front-end using GTK2 for the FCE U

Coup de bol, le paquet s'appelle également fceu, j'aurais donc directement pu taper dpkg -l fceu (vous suivez ?) :)
Vous pouvez remarque les "ii" en début de chaque paquet, ils signifient que ce paquet est actuellement installé sur votre machine (un paquet pour aussi bien avoir été désinstallé en ayant laissé son fichier de conf, "rc")
Astuce : Si vous souhaitez connaître le nombre de paquets installés sur votre machine, voici la commande :
dpkg -l | grep "^ii" | wc -l

Explications : dpkg -l : liste les paquets, grep "^ii" : qui commencent pas "ii" (donc qui sont installés), wc -l : compte le nombre de lignes.

dpkg -s nom_paquet : Affiche le statut du paquet.
Exemple : dpkg -s fceu :
Package: fceu
Status: install ok installed
Priority: optional
Section: games
Installed-Size: 976
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Architecture: i386
Version: 0.98.12-3
Replaces: fceu-sdl, fceu-svga, fceu-doc
Provides: nes-emulator
Depends: libc6 (>= 2.6-1), libsdl1.2debian (>= 1.2.10-1), zlib1g (>= 1:1.2.3.3.dfsg-1)
Suggests: efp
Description: FCE Ultra - a nintendo (8-bit) emulator
 FCE Ultra is an emulator of the original (8-bit) Nintendo Entertainment
 System (NES) released under the GNU General Public License (GPL).  It
 includes the following features (and many more):
       * fully customizable color palette rendering engine
       * complete sound emulation (all five channels)
       * support for up to four joystick controllers
       * zapper emulation for the mouse
       * GameGenie emulation
       * accepts compressed (PKZIP, gzip) ROM images
       * TCP/IP network play
 
 The project's homepage is at: http://fceultra.sourceforge.net/
Original-Maintainer: Joe Nahmias <jello@debian.org>

dpkg -L nom_paquet : Affiche tous les fichiers installés lors de l'installation du paquet.
Exemple : dpkg -L fceu
/.
/usr
/usr/games
/usr/games/fceu
/usr/share
/usr/share/applications
/usr/share/applications/fceu.desktop
/usr/share/doc
/usr/share/doc/fceu
/usr/share/doc/fceu/AUTHORS
[...]
/usr/share/doc-base/fceu
/usr/share/man
/usr/share/man/man6
/usr/share/man/man6/fceu.6.gz

dpkg -r nom_paquet : Supprime le paquet (sans supprimer son fichier de configuration).

dpkg -P nom_paquet : Supprime le paquet et ses fichiers de configuration.

Je vous invite à aller voir dans le dossier /var/lib/dpkg/info/ qui contient toutes les métadonnées des packets installés avec apt. Voici les significations des extensions :
  • .list : liste des fichiers installés par le packet (dpkg -L)
  • .conffile : liste des fichiers de conf
  • .md5sum : md5sum de tous les fichiers du packet
  • .preinst : script lancé avant installation packet
  • .prerm : lancé avant effacement packet
  • .config : fichier installé lors de l'installation du packet
  • .shlibs : liste des bibliothèques du packet


Mise à jour (merci à mx3208)

dpkg --get-selections > fichier.texte : Insère, dans un fichier texte, la liste de l'ensemble des paquets présents sur votre système.

dpkg --set-selections < fichier.texte : Réinstalle, sur un nouveau système, l'ensemble des paquets présents dans la liste fichier.texte.
Vous l'aurez compris, c'est un outil très pratique pour dupliquer entièrement un système.


Enfin, une petite astuce très utile pour sauvegarder, dans un fichier tar, l'ensemble des fichiers de configuration de vos paquets installés :

sudo tar cf conffiles.tar $(cat /var/lib/dpkg/info/*.conffiles)


Ainsi s'achève cette petite présentation de quelques options de dpkg, j'espère qu'elle aura été utile à quelques uns :)