wiki/HowtoDebian/Packages.md

179 lines
4.5 KiB
Markdown
Raw Normal View History

2018-08-25 00:13:14 +02:00
---
categories: debian system
title: Howto Debian packages
...
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
* dpkg(1) : <https://manpages.debian.org/stable/dpkg/dpkg.1.en.html>
* apt-get(1) : <https://manpages.debian.org/stable/apt/apt-get.8.en.html>
* apt-cache(1) : <https://manpages.debian.org/stable/apt/apt-cache.8.en.html>
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
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).
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
## Format .deb
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
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).
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
$ 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
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
$ tar xvf control.tar.xz
./conffiles
./control
./md5sums
./postinst
./postrm
./preinst
./prerm
./shlibs
./triggers
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
$ 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
[…]
~~~
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Pour avoir des informations sur un paquet `.deb` :
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
~~~
$ 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
[…]
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
$ 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
[…]
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
## dpkg
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
`dpkg` est un outil bas niveau pour manipuler des packages Debian :
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
Installer un package
# dpkg -i foo.deb
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Dépaqueter un package sans le configurer
# dpkg --unpack foo.deb
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Configurer un package non configuré
# dpkg --configure foo
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Re-configurer un package déjà configuré
# dpkg-reconfigure foo
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Re-configurer un package déjà configuré avec un maximum de questions
# dpkg-reconfigure -plow foo
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Supprimer un package
# dpkg -r foo
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Purger un package supprimé
# dpkg -P foo
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
`dpkg` permet aussi d'avoir quelques informations de base :
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
Lister les packages installés de façon « conviviale »
$ dpkg -l
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Lister les packages installés de façon exhaustive
$ dpkg --get-selections
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
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
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Lister les fichiers d'un package installé
$ dpkg -L foo
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Lister les packages installé qui contiennent un fichier
$ dpkg -S bin/bar
~~~
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
## apt
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Liste des packages pouvant être mis au jour (inclus les package en hold) :
2017-01-14 00:06:38 +01:00
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
$ apt list --upgradable
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
> *Note* : avec *aptitude* on a un résultat plus précis avec `aptitude upgrade -sV`
2018-08-25 00:13:14 +02:00
### hold / unhold
~~~
2018-08-25 00:13:14 +02:00
# apt-mark hold foo
foo passé en figé (« hold »).
2018-08-25 00:13:14 +02:00
# apt-mark showhold
foo
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
# dpkg -l foo
hi foo […]
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
# apt-mark unhold foo
Annulation de l'état figé pour foo.
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
## Astuces
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Lister les packages installés, notamment leur pool pour différencier main/contrib/non-free :
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
$ dpkg --get-selections | tr '\t' ' ' | cut -d" " -f1 | cut -d: -f1 | xargs apt-cache show | grep ^Filename
2016-12-29 11:25:39 +01:00
~~~
2018-08-25 00:13:14 +02:00
### Unattended upgrades / Auto upgrades
2016-12-29 11:25:39 +01:00
2018-08-25 00:13:14 +02:00
Sur un serveur non critique (backup, dev, …) on peut vouloir faire les mises à jour automatiquement :
2017-03-15 16:29:37 +01:00
~~~
2018-08-25 00:13:14 +02:00
# apt install unattended-upgrades
# dpkg-reconfigure -plow unattended-upgrades
2017-03-15 16:29:37 +01:00
~~~
2018-08-25 00:13:14 +02:00
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.
2017-06-01 16:10:47 +02:00