--- categories: debian system title: Howto Debian packages ... * dpkg(1) : * apt-get(1) : * apt-cache(1) : Debian possède le meilleur format de packages : le `.deb` qui se manipule avec l'outil `dpkg`. Debian possède le programme de gestion de packages le plus avancé du monde : APT (Advanced Packaging Tool). ## Format .deb Un package `.deb` est une archive au format **ar** qui contient un fichier `debian-binary` et 2 tarballs : `data.tar` (arborescence de fichiers à installer) et `control.tar` (scripts et meta-informations sur le package). ~~~ $ ar x apt_1.6.4_amd64.deb $ ls -l -rw-r--r-- 1 gcolpart evolix 6896 août 24 23:19 control.tar.xz -rw-r--r-- 1 gcolpart evolix 1305248 août 24 23:19 data.tar.xz -rw-r--r-- 1 gcolpart evolix 4 août 24 23:19 debian-binary $ tar xvf control.tar.xz ./conffiles ./control ./md5sums ./postinst ./postrm ./preinst ./prerm ./shlibs ./triggers $ tar xvf control.tar.xz ./etc/ ./etc/apt/ ./etc/apt/apt.conf.d/ ./etc/apt/apt.conf.d/01autoremove […] ./usr/ ./usr/bin/ ./usr/bin/apt ./usr/bin/apt-cache ./usr/bin/apt-cdrom ./usr/bin/apt-config ./usr/bin/apt-get ./usr/bin/apt-key ./usr/bin/apt-mark […] ~~~ Pour avoir des informations sur un paquet `.deb` : ~~~ $ dpkg-deb -I apt_1.6.4_amd64.deb nouveau paquet Debian, version 2.0. taille 1312336 octets : archive de contrôle=6896 octets. 121 octets, 4 lignes conffiles 1412 octets, 27 lignes control 11573 octets, 166 lignes md5sums 5042 octets, 137 lignes * postinst #!/bin/sh 1370 octets, 45 lignes * postrm #!/bin/sh 254 octets, 6 lignes * preinst #!/bin/sh 485 octets, 11 lignes * prerm #!/bin/sh 23 octets, 1 lignes shlibs 67 octets, 2 lignes triggers Package: apt Version: 1.6.4 Architecture: amd64 […] $ dpkg-deb -c apt_1.6.4_amd64.deb drwxr-xr-x root/root 0 2018-08-20 17:38 ./ drwxr-xr-x root/root 0 2018-08-20 17:38 ./etc/ drwxr-xr-x root/root 0 2018-08-20 17:38 ./etc/apt/ drwxr-xr-x root/root 0 2018-08-20 17:38 ./etc/apt/apt.conf.d/ -rw-r--r-- root/root 861 2018-08-20 17:38 ./etc/apt/apt.conf.d/01autoremove […] ## dpkg `dpkg` est un outil bas niveau pour manipuler des packages Debian : ~~~ Installer un package # dpkg -i foo.deb Dépaqueter un package sans le configurer # dpkg --unpack foo.deb Configurer un package non configuré # dpkg --configure foo Re-configurer un package déjà configuré # dpkg-reconfigure foo Re-configurer un package déjà configuré avec un maximum de questions # dpkg-reconfigure -plow foo Supprimer un package # dpkg -r foo Purger un package supprimé # dpkg -P foo ~~~ `dpkg` permet aussi d'avoir quelques informations de base : ~~~ Lister les packages installés de façon « conviviale » $ dpkg -l Lister les packages installés de façon exhaustive $ dpkg --get-selections Installer une liste de packages générée par "dpkg --get-selections" # dpkg --merge-avail < apt-cache-dumpavail.txt # dpkg --set-selections < dpkg-get-selections.txt # apt dselect-upgrade Lister les fichiers d'un package installé $ dpkg -L foo Lister les packages installé qui contiennent un fichier $ dpkg -S bin/bar ~~~ ## apt Liste des packages pouvant être mis au jour (inclus les package en hold) : ~~~ $ apt list --upgradable ~~~ > *Note* : avec *aptitude* on a un résultat plus précis avec `aptitude upgrade -sV` ### hold / unhold ~~~ # apt-mark hold foo foo passé en figé (« hold »). # apt-mark showhold foo # dpkg -l foo hi foo […] # apt-mark unhold foo Annulation de l'état figé pour foo. ~~~ ## Astuces Lister les packages installés, notamment leur pool pour différencier main/contrib/non-free : ~~~ $ dpkg --get-selections | tr '\t' ' ' | cut -d" " -f1 | cut -d: -f1 | xargs apt-cache show | grep ^Filename ~~~ ### Unattended upgrades / Auto upgrades Sur un serveur non critique (backup, dev, …) on peut vouloir faire les mises à jour automatiquement : ~~~ # apt install unattended-upgrades # dpkg-reconfigure -plow unattended-upgrades ~~~ La configuration se trouve dans le fichier `/etc/apt/apt.conf.d/50unattended-upgrades`. On peut choisir où envoyer le mail de rapport ou encore si on doit redémarrer la machine automatiquement si nécessaire, etc.