최소 Centos Docker 컨테이너에 매뉴얼 페이지를 설치할 수 없습니다.

최소 Centos Docker 컨테이너에 매뉴얼 페이지를 설치할 수 없습니다.

최소한의 Centos 7 Docker 이미지가 있고 Dockerfile을 디버깅하는 데 도움이 되는 몇 가지 매뉴얼 페이지를 가져오려고 합니다. 기본적으로는 다음과 같은 내용이 많지 않습니다.

# man ls
No manual entry for ls

모든이 서버에 잘못된 답변이 있습니다man-pages, RPM을 설치했는데 모든 것이 잘 진행되는 것 같습니다.

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

하지만:

# man ls
No manual entry for ls

맨페이지가 포함되어야 하는지 rpm확인했는데 다음 과 같습니다.man-pagesls

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

하지만 실제로 설치된 것처럼 보이지는 않습니다.

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

그리고 파일 시스템의 다른 곳에도 없는 것 같습니다.

# find / -name ls.1\*
#

에서 파일을 생성할 수 있으므로 /usr/share/man/man1p/이는 아마도 Docker 가상 파일 시스템에 있어서 이상한 일이 아닐 것입니다.

가장 좋은 점은 내가 지금 정말로 원하는 것은 useradd이 명령에 대한 매뉴얼 페이지인데, 이는 이 RPM에도 없다는 것입니다. 내부에 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

이미 설치되어있다.

# 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

실제로 바이너리(예 /usr/sbin/useradd: )가 있습니다. 그러나 매뉴얼 페이지는 아닙니다.

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

그래서 내 질문은 다음과 같습니다

  1. shadow-utils바이너리를 찾을 수 있는데 왜 RPM에 포함되어야 하는 매뉴얼 페이지를 찾을 수 없습니까?
  2. RPM을 (성공적으로) 설치해도 man-pagesRPM에 있어야 하는 파일이 설치되지 않는 이유는 무엇입니까?

고쳐 쓰다:모든Aaron Marasco의 답변그리고무스키의 코멘트, 나는 노력했다 yum reinstall shadow-utils. 와 마찬가지로 yum install man-pages성공적으로 완료된 것처럼 보이지만 실제로는 에 파일이 저장되지 않습니다 /usr/share/man/.

답변1

당신의 이미지이있을 수 있습니다nodocsyum 구성에 설정된 트랜잭션 플래그( 참조 /etc/yum.conf)

원하는 매뉴얼 페이지가 있는 패키지를 (재)설치하기 전에 전체적으로(또는 yum 명령줄에서) 제거할 수 있습니다.

예를 들어:

yum --setopt=tsflags='' reinstall shadow-utils

답변2

여기에는 아무 효과가 없었으므로 누군가에게 도움이 될 수 있도록 다른 답변을 추가했습니다.

매뉴얼 페이지가 포함된 패키지를 설치하려면 다음을 사용하십시오.

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

그 다음에:

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

또는 매뉴얼 페이지 설치를 방해하는 행을 yum.conf에서 영구적으로 제거할 수 있습니다. 이렇게 하려면 다음을 사용하세요.

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

yum install그러면 정상적으로 사용할 수 있습니다 yum reinstall.

원천

답변3

이것이 오래된 질문이라는 것을 알고 있지만 이 문제를 추적하는 데 소요된 시간을 고려하면 결국 다른 사람에게 도움이 될 수도 있습니다.

이 문제는 Docker 이미지에서 RPM이 구성되는 방식과 관련이 있습니다. 먼저 excludedocs아래와 같이 명령이 RPM 구성에 나열되어 있는지 확인하십시오.

# rpm --showrc | grep docs

거기에 있으면 그것을 지정하는 파일을 찾아서(내 경우에는 아래에 있음) /etc/rpm/macros.imgcreate삭제해야 합니다.

그런 다음 Yum은 예상대로 모든 매뉴얼 페이지 설치를 수행해야 합니다(위의 내용이 없다고 가정 nodocs tsflag).

답변4

도커 이미지는극도로그것을 벗겨내십시오. 나는 그들이 매뉴얼 페이지를 제거했다고 믿습니다뒤쪽에RPM이 설치되었습니다. 를 사용하여 이를 확인할 수 있습니다 rpm -V shadow-utils. 매뉴얼 페이지 누락으로 인해 증분 RPM을 사용하여 패키지를 업그레이드하는 데 문제가 있다는 것을 알고 있습니다.

안타깝게도 맨페이지를 얻는 유일한 방법은 RPM을 강제로 다시 설치하거나 RPM에서 수동으로 추출하여 적절한 위치에 넣는 것입니다.

당신은 또한 볼 수 있습니다이 웹사이트아마도.

관련 정보