无法在最小的 Centos Docker 容器上安装手册页

无法在最小的 Centos Docker 容器上安装手册页

我有一个最小的 Centos 7 Docker 映像,我正在尝试获取一些手册页来帮助调试我的 Dockerfile。开箱即用,它没有太多:

# man ls
No manual entry for ls

这个服务器错误答案,我安装了man-pagesRPM,看起来一切顺利:

# 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-pages应该包含ls手册页,看起来确实如此:

# 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-pages安装应位于该 RPM 中的文件?

更新:亚伦·马拉斯科的回答穆苏奇的评论, 我试过yum reinstall shadow-utils。与 一样yum install man-pages,这似乎成功完成,但实际上并未将任何文件放入/usr/share/man/.

答案1

你的形象可能有nodocs在 yum 配置中设置的事务标志(参见)/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 installyum reinstall

来源

答案3

我知道这是一个老问题,但考虑到我花在跟踪这个问题上的时间,它最终会对其他人派上用场。

该问题与 docker 镜像中 RPM 的配置方式有关,首先检查该excludedocs指令是否在 RPM 的配置中列出,如下所示:

# rpm --showrc | grep docs

如果它在那里,那么您必须找到指定它的文件(在我的情况下它位于下面)/etc/rpm/macros.imgcreate并将其删除

然后,Yum 应按预期执行所有手册页安装(假设您还没有nodocs tsflag上述内容)。

答案4

Docker 镜像是极其剥离下来。我相信他们删除了手册页RPM 已安装。您可以使用 来验证这一点rpm -V shadow-utils。我知道我在尝试使用增量 RPM 升级软件包时遇到了问题,因为缺少手册页。

遗憾的是,我认为获取某些内容的手册页的唯一方法是强制重新安装 RPM 或手动从 RPM 中提取它们并将它们放在适当的位置。

也可以看看这个网站我猜。

相关内容