179 lines
4.5 KiB
Markdown
179 lines
4.5 KiB
Markdown
---
|
||
categories: debian system
|
||
title: Howto Debian packages
|
||
...
|
||
|
||
* 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>
|
||
|
||
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.
|
||
|
||
|
||
|