Não é possível instalar as páginas de manual no contêiner mínimo do Centos Docker

13

Eu tenho uma imagem mínima do Centos 7 Docker e estou tentando obter algumas páginas de manual para ajudar na depuração do meu Dockerfile. Fora da caixa, não tem muito:

# man ls
No manual entry for ls

Por esta resposta Serverfault , instalei o man-pagesRPM, e isso pareceu funcionar bem:

# 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!

Contudo:

# man ls
No manual entry for ls

Eu costumava rpmverificar man-pagesse deveria incluir a lspágina de manual e parece que sim:

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

Mas não parece que ele foi realmente instalado:

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

E também não parece estar em nenhum outro lugar do sistema de arquivos.

# find / -name ls.1\*
#

Eu posso criar arquivos /usr/share/man/man1p/, então provavelmente não é uma esquisitice do sistema de arquivos virtual do Docker.

A melhor parte disso é que o que eu realmente queria neste minuto foi a página de manual do useraddcomando, que nem está nesse RPM. Está dentro 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

O qual já 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

E, de fato, os binários (por exemplo /usr/sbin/useradd) estão lá. Mas não as páginas de 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

Então, minhas perguntas são:

  1. Por que não consigo encontrar nenhuma das páginas de manual que deveriam estar no shadow-utilsRPM, quando encontro os binários?
  2. Por que a instalação do man-pagesRPM (com sucesso) não instala os arquivos que deveriam estar nesse RPM?

Atualização: Por resposta de Aaron Marasco e comentário de msuchy , tentei yum reinstall shadow-utils. Assim como yum install man-pages, isso parece ser concluído com êxito, mas na verdade não coloca nenhum arquivo /usr/share/man/.

David Moles
fonte
pergunta semelhante em um centos 6 estivador imge: unix.stackexchange.com/questions/182500/no-manual-entry-for-man
maxschlepzig
Aconteceu comigo em uma configuração do Vagrant com o CentOS 7 - descobri que alguns pacotes instalados antes da instalação do man-pagespacote não tinham páginas de manual. A solução foi reinstalar esses pacotes, por exemplo, yum reinstall yum rpmpara cobrir esses dois.
RichVel

Respostas:

12

Sua imagem provavelmente tem o nodocssinalizador de transação definido na configuração yum (cf. /etc/yum.conf).

Você pode removê-lo globalmente (ou na linha de comando do yum) antes de (re) instalar os pacotes para os quais deseja as páginas de manual.

Por exemplo:

yum --setopt=tsflags='' reinstall shadow-utils
maxschlepzig
fonte
Isso deveria ser --setopt=tsflags=''o sugerido na resposta da cúpula sul ? ( =for -)
David Moles
1
@DavidMoles, sim, isso foi um erro de digitação - a sintaxe correta do comutador também foi usada no documento projetatômico referenciado.
maxschlepzig
Obrigado. Eu teria acabado de consertar, mas o limite de 6 caracteres. :)
David Moles
por que reinstalar shadow-utils?
Tiina
@ Tina, porque este é o pacote que fornece o comando useradd(que foi referenciado na pergunta).
maxschlepzig
5

Nada aqui funcionou e, além disso, a resposta aceita contém um erro de digitação. Eu não tenho representante suficiente para comentar lá, por isso estou adicionando aqui como resposta, caso ajude alguém.

Para instalar um pacote com páginas de manual, use:

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

Então:

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

Ou você pode remover permanentemente a linha do yum.conf, o que impede a instalação das páginas de manual. Para fazer isso, use:

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

Então você pode usar yum installou yum reinstallnormalmente.

Fonte

Mark Thomson
fonte
+1 também, apenas para comentar a linha nodocs,sed -i 's/tsflags=nodocs/# &/' /etc/yum.conf
michael
2

Sei que essa é uma pergunta antiga, mas, dado o tempo que passei acompanhando isso, será útil para outra pessoa eventualmente.

O problema está relacionado à maneira como o RPM é configurado na imagem do docker, verifique primeiro se a excludedocsdiretiva está listada na configuração do RPM da seguinte maneira:

# rpm --showrc | grep docs

Se estiver lá, você deve encontrar o arquivo que o especifica no meu caso, estava abaixo /etc/rpm/macros.imgcreatee removê-lo

O Yum deve executar toda a instalação da página de manual conforme o esperado (já que você também não possui o nodocs tsflagmencionado acima.

imoschak
fonte
1

A imagem do Docker é extremamente reduzida. Eu acredito que eles removem as páginas de manual após a instalação dos RPMs. Você pode verificar isso com rpm -V shadow-utils. Sei que tive problemas ao tentar usar RPMs delta para atualizar pacotes porque as páginas de manual estão ausentes.

Infelizmente, acho que a única maneira de obter uma página de manual para algo seria forçar a reinstalação do RPM ou extraí-los manualmente do RPM e soltá-los no lugar.

Veja também este site, eu acho.

Aaron D. Marasco
fonte
2
Sim. yum reinstall shadow-utilsvai consertar isso.
msuchy
@msuchy Acabei de tentar isso, e não, não. Presumivelmente relacionado ao que impede a man-pagesinstalação correta?
David Moles
@ aaron-d-marasco Isso explica por que eles não estão instalados, mas não explica o que está acontecendo quando tento instalar man-pages.
David Moles
-4
export MANPATH=/usr/share/man/fr
user268477
fonte
5
Você deve explicar por que você recomenda este comando.
Centimane 02/01/19