No se pueden instalar páginas de manual en un contenedor mínimo de Centos Docker

13

Tengo una imagen mínima de Docker de Centos 7, y estoy tratando de obtener algunas páginas de manual para ayudar a depurar mi Dockerfile. Fuera de la caja, no tiene mucho:

# man ls
No manual entry for ls

Según esta respuesta de Serverfault , instalé el man-pagesRPM, y eso pareció funcionar 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!

Sin embargo:

# man ls
No manual entry for ls

Solía rpmcomprobar que man-pagesse suponía que debía incluir la lspágina de manual, y parece que sí:

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

Pero no parece que se haya instalado realmente:

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

Y tampoco parece estar en ningún otro lugar del sistema de archivos.

# find / -name ls.1\*
#

Puedo crear archivos /usr/share/man/man1p/, por lo que probablemente no sea una rareza del sistema de archivos virtual de Docker.

La mejor parte de esto es que lo que realmente quería en este momento era la página del useraddcomando man , que ni siquiera está en ese RPM. Está en 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

Que ya está instalado.

# 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

Y, de hecho, los binarios (por ejemplo /usr/sbin/useradd) están ahí. Pero no las páginas del manual.

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

Entonces mis preguntas son:

  1. ¿Por qué no puedo encontrar ninguna de las páginas de manual que se supone que están en el shadow-utilsRPM, cuando puedo encontrar los binarios?
  2. ¿Por qué la instalación (exitosa) del man-pagesRPM no instala los archivos que se supone que están en ese RPM?

Actualización: Por la respuesta de Aaron Marasco y comentario de msuchy , he intentado yum reinstall shadow-utils. Al igual que con yum install man-pages, esto parece completarse con éxito, pero en realidad no coloca ningún archivo /usr/share/man/.

David Moles
fuente
pregunta similar en un centos 6 docker imge: unix.stackexchange.com/questions/182500/no-manual-entry-for-man
maxschlepzig
Me sucedió en una configuración de Vagrant con CentOS 7: descubrí que algunos paquetes instalados antes de instalar el man-pagespaquete no tenían páginas de manual. La solución fue reinstalar dichos paquetes, por ejemplo, yum reinstall yum rpmpara cubrir esos dos.
RichVel

Respuestas:

12

Su imagen probablemente tenga el nodocsindicador de transacción establecido en la configuración de yum (cf. /etc/yum.conf).

Puede eliminarlo globalmente (o en la línea de comando yum) antes de (re) instalar los paquetes para los que desea las páginas de manual.

Por ejemplo:

yum --setopt=tsflags='' reinstall shadow-utils
maxschlepzig
fuente
¿Debería ser --setopt=tsflags=''como se sugiere en la respuesta de South-Summit ? ( =para -)
David Moles
1
@DavidMoles, sí, esto fue un error tipográfico: la sintaxis correcta del interruptor también se usó en el documento proyectomático referenciado.
maxschlepzig
Gracias. Lo habría solucionado, pero con un límite de 6 caracteres. :)
David Moles
¿Por qué reinstalar shadow-utils?
Tiina
@Tina porque este es el paquete que proporciona el comando useradd(al que se hizo referencia en la pregunta).
maxschlepzig
5

Nada aquí funcionó y, además, la respuesta aceptada contiene un error tipográfico. No tengo suficiente representante para comentar allí, así que lo agrego aquí como respuesta en caso de que ayude a alguien.

Para instalar un paquete con páginas man use:

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

Luego:

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

O bien, puede eliminar permanentemente la línea de yum.conf que impide la instalación de páginas de manual. Para hacer esto, use:

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

Entonces puedes usar yum installo yum reinstallnormalmente.

Fuente

Mark Thomson
fuente
+1 también, para comentar la línea de nodocs,sed -i 's/tsflags=nodocs/# &/' /etc/yum.conf
michael
2

Sé que esta es una vieja pregunta, pero dado el tiempo que he pasado rastreando esto, eventualmente será útil para otra persona.

El problema está relacionado con la forma en que RPM está configurado en la imagen acoplable, primero verifique si la excludedocsdirectiva aparece en la configuración de RPM de la siguiente manera:

# rpm --showrc | grep docs

Si está allí, debe encontrar el archivo que lo especifica en mi caso, /etc/rpm/macros.imgcreatey eliminarlo

A continuación, Yum debe realizar toda la instalación de la página de manual como se esperaba (dado que tampoco tiene lo nodocs tsflagmencionado anteriormente.

imoschak
fuente
1

La imagen de Docker está extremadamente despojada. Creo que eliminan las páginas de manual después de instalar los RPM. Puedes verificar esto con rpm -V shadow-utils. Sé que he tenido problemas al tratar de usar RPM delta para actualizar paquetes porque faltan las páginas de manual.

Lamentablemente, creo que la única forma de obtener una página de manual para algo sería forzar la reinstalación del RPM o extraerlos manualmente del RPM y colocarlos en su lugar.

Ver también este sitio , supongo.

Aaron D. Marasco
fuente
2
Si. yum reinstall shadow-utilslo arreglará
msuchy
@msuchy Acabo de intentar eso, y no, no lo hace. ¿Presumiblemente relacionado con lo que impide que se man-pagesinstale correctamente?
David Moles
@ aaron-d-marasco Eso explica por qué no están instalados para empezar, pero no explica qué sucede cuando intento instalarlo man-pages.
David Moles
-4
export MANPATH=/usr/share/man/fr
usuario268477
fuente
55
Debe explicar por qué recomienda este comando.
Centimane