, , , , , ,

Docker : Pages manuel absentes des images debian slim

Docker propose des images Debian taguée *-slim. Dans ces images malgré l'installation du manuel et des paquets intégrant de la documentation, l'appel du manuel ne retourne pas de résultat:

man man
No manual entry for man
See 'man 7 undocumented' for help when manual pages are not available.

La commande apt-file permet d'identifier le paquet contenant un fichier voulu. Ici on recherche la documentation du manuel:

apt-file search man/man1/man.1.gz
man-db: /usr/share/man/man1/man.1.gz

La commande apt-file nous indique que la documentation du manuel est fournie par le paquet man-db. Le paquet est cependant déjà installé comme le montre le retour de la commande dpkg ci-dessous:

dpkg -l | grep man-db
ii  man-db         2.8.5-2      amd64        on-line manual pager

Malgré l'installation correcte du paquet man-db le fichier /usr/share/man/man1/man.1.gz est absent du système:

ls /usr/share/man/man1/man.1.gz
ls: cannot access '/usr/share/man/man1/man.1.gz': No such file or directory

Si on télécharge le paquet et qu'on le décompresse avec les commandes suivantes, les pages de documentation du manuel sont bien installées:

# Téléchargement du paquet dans le répertoire courant
apt-get download man-db
 
# Liste le contenu de l'archive pour vérifier la présence du fichier dans l'archive
dpkg-deb --contents man-db_2.8.5-2_amd64.deb | grep man/man1/man.1.gz
-rw-r--r-- root/root     12634 2019-02-10 12:14 ./usr/share/man/man1/man.1.gz
 
# Décompresse l'archive
dpkg-deb -x man-db_2.8.5-2_amd64.deb /
 
# Vérifie la présence du fichier sur le système
ls /usr/share/man/man1/man.1.gz
/usr/share/man/man1/man.1.gz

On peut voir que la décompression à l'aide de l'utilitaire dpkg-deb se comporte comme attendu et que le fichier est bien présent sur le système.

C'est donc une option de configuration du gestionnaire de paquet qui conduit à ignorer certains fichiers.

Le choix a été fait d'exclure certains fichiers (dont ceux de la documentation) afin de réduire la taille des images Debian étiquetées *-slim. Ceci peut être fait en paramétrant dpkg via les fichiers présents dans /etc/dpkg/dpkg.cfg.d/ et plus particulièrement via le fichier /etc/dpkg/dpkg.cfg.d/docker.

Depuis la ligne de commande, lors de l'installation d'un paquet on peut exclure un ensemble de fichiers via les options --path-exclude et --path-include

# Installe le paquet man-db en excluant tous les fichiers de documentation sauf /usr/share/man/man1/man.1.gz
dpkg --path-exclude='/usr/share/man/*' --path-include='/usr/share/man/man1/man.1.gz' -i man-db_2.8.5-2_amd64.deb