Impossible d'installer les pages de manuel sur un conteneur Centos Docker minimal

13

J'ai une image Docker Centos 7 minimale et j'essaie d'obtenir des pages de manuel dessus pour aider au débogage de mon Dockerfile. Hors de la boîte, il n'a pas grand-chose:

# man ls
No manual entry for ls

Par cette réponse Serverfault , j'ai installé le man-pagesRPM, et cela a semblé aller bien:

# yum install -y man-pages
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirror.vtti.vt.edu
 * extras: centos.mbni.med.umich.edu
 * updates: centos.netnitco.net
Resolving Dependencies
--> Running transaction check
---> Package man-pages.noarch 0:3.53-5.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================
 Package                  Arch                  Version                     Repository           Size
======================================================================================================
Installing:
 man-pages                noarch                3.53-5.el7                  base                5.0 M

Transaction Summary
======================================================================================================
Install  1 Package

Total download size: 5.0 M
Installed size: 4.6 M
Downloading packages:
man-pages-3.53-5.el7.noarch.rpm                                                | 5.0 MB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : man-pages-3.53-5.el7.noarch                                                        1/1 
  Verifying  : man-pages-3.53-5.el7.noarch                                                        1/1 

Installed:
  man-pages.noarch 0:3.53-5.el7                                                                       

Complete!

Pourtant:

# man ls
No manual entry for ls

J'avais l'habitude rpmde vérifier que man-pagesc'était censé inclure la lspage de manuel, et il semble que ce soit le cas:

# rpm -ql man-pages | grep -w ls
/usr/share/man/man1p/ls.1p.gz

Mais il ne semble pas avoir été installé:

# man 1p ls
No manual entry for ls in section 1p
# ls -l /usr/share/man/man1p/
total 0

Et il ne semble pas non plus se trouver ailleurs sur le système de fichiers.

# find / -name ls.1\*
#

Je peux créer des fichiers dans /usr/share/man/man1p/, donc ce n'est probablement pas une bizarrerie du système de fichiers virtuel Docker.

La meilleure partie de cela est que ce que je voulais vraiment cette minute était la page de manuel de la useraddcommande, qui n'est même pas dans ce RPM. C'est dedans shadow-utils.

# yum whatprovides /usr/share/man/man8/useradd.8.gz
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirror.vtti.vt.edu
 * extras: mirror.tzulo.com
 * updates: centos.netnitco.net
2:shadow-utils-4.1.5.1-18.el7.x86_64 : Utilities for managing accounts and shadow password files
Repo        : base
Matched from:
Filename    : /usr/share/man/man8/useradd.8.gz

Qui est déjà installé.

# yum install shadow-utils
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirror.vtti.vt.edu
 * extras: centos.mbni.med.umich.edu
 * updates: centos.netnitco.net
Package 2:shadow-utils-4.1.5.1-18.el7.x86_64 already installed and latest version
Nothing to do

Et, en fait, les binaires (par exemple /usr/sbin/useradd) sont là. Mais pas les pages de manuel.

# ls -l /usr/share/man/man8/useradd.8.gz
ls: cannot access /usr/share/man/man8/useradd.8.gz: No such file or directory

Mes questions sont donc:

  1. Pourquoi ne puis-je trouver aucune des pages de manuel censées se trouver dans le shadow-utilsRPM, lorsque je peux trouver les fichiers binaires?
  2. Pourquoi l'installation (réussie) du man-pagesRPM n'installe- t-elle pas les fichiers censés se trouver dans ce RPM?

Mise à jour: Selon la réponse d'Aaron Marasco et le commentaire de msuchy , j'ai essayé yum reinstall shadow-utils. Comme avec yum install man-pages, cela semble se terminer avec succès, mais ne place aucun fichier /usr/share/man/.

David Moles
la source
question similaire sur une image de docker centos 6: unix.stackexchange.com/questions/182500/no-manual-entry-for-man
maxschlepzig
Cela m'est arrivé sur une configuration Vagrant avec CentOS 7 - J'ai trouvé que certains packages installés avant l'installation du man-pagespackage n'avaient pas de pages de manuel. La solution consistait à réinstaller de tels packages, par exemple yum reinstall yum rpmpour couvrir ces deux.
RichVel

Réponses:

12

Votre image a probablement l' nodocsindicateur de transaction défini dans la configuration yum (cf. /etc/yum.conf).

Vous pouvez le supprimer globalement (ou sur la ligne de commande yum) avant de (ré) installer les packages pour lesquels vous voulez les pages de manuel.

Par exemple:

yum --setopt=tsflags='' reinstall shadow-utils
maxschlepzig
la source
Cela devrait-il être --setopt=tsflags=''comme suggéré dans la réponse du sommet sud ? ( =pour -)
David Moles
1
@DavidMoles, oui, c'était une faute de frappe - la syntaxe de commutateur correcte a également été utilisée dans le document projectatomic référencé.
maxschlepzig
Merci. Je viens de le corriger, mais la limite de 6 caractères. :)
David Moles
pourquoi réinstaller shadow-utils?
Tiina
@Tina car c'est le package qui fournit la commande useradd(qui a été référencé dans la question).
maxschlepzig
5

Rien n'a fonctionné ici et en plus de cela, la réponse acceptée contient une faute de frappe. Je n'ai pas assez de représentant pour commenter là-bas, donc je l'ajoute ici comme réponse au cas où cela aiderait quelqu'un.

Pour installer un package avec des pages de manuel, utilisez:

yum --setopt=tsflags='' install man-db

Alors:

yum --setopt=tsflags='' install {your-package-name}

Ou, vous pouvez supprimer définitivement la ligne de yum.conf, ce qui empêche l'installation des pages de manuel. Pour ce faire, utilisez:

sed -i '/tsflags=nodocs/d' /etc/yum.conf

Ensuite, vous pouvez utiliser yum installou yum reinstallnormalement.

La source

Mark Thomson
la source
+1 aussi, pour commenter la ligne nodocs,sed -i 's/tsflags=nodocs/# &/' /etc/yum.conf
michael
2

Je sais que c'est une vieille question, mais étant donné le temps que j'ai passé à suivre cela, cela finira par être utile à quelqu'un d'autre.

Le problème est lié à la façon dont RPM est configuré dans l'image de docker, vérifiez d'abord si la excludedocsdirective est répertoriée dans la configuration de RPM comme suit:

# rpm --showrc | grep docs

S'il est là, vous devez trouver le fichier qui le spécifie dans mon cas, il était sous /etc/rpm/macros.imgcreateet le supprimer

Yum devrait ensuite effectuer toute l'installation de la page de manuel comme prévu (étant donné que vous n'avez pas non plus les éléments nodocs tsflagmentionnés ci-dessus.

imoschak
la source
1

L'image Docker est extrêmement dépouillée. Je pense qu'ils suppriment les pages de manuel après l'installation des RPM. Vous pouvez le vérifier avec rpm -V shadow-utils. Je sais que j'ai eu des problèmes à essayer d'utiliser les RPM delta pour mettre à niveau les packages car les pages de manuel sont manquantes.

Malheureusement, je pense que la seule façon d'obtenir une page de manuel pour quelque chose serait de forcer la réinstallation du RPM ou de les extraire manuellement du RPM et de les déposer en place.

Voir aussi ce site je suppose.

Aaron D. Marasco
la source
2
Oui. yum reinstall shadow-utilsva le réparer.
msuchy
@msuchy Je viens d'essayer ça, et non, ça ne marche pas. Vraisemblablement lié à ce qui empêche l' man-pagesinstallation correctement?
David Moles
@ aaron-d-marasco Cela explique pourquoi ils ne sont pas installés pour commencer, mais cela n'explique pas ce qui se passe lorsque j'essaie d'installer man-pages.
David Moles
-4
export MANPATH=/usr/share/man/fr
user268477
la source
5
Vous devez expliquer pourquoi vous recommandez cette commande.
Centimane