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


13

我只有一个最小的Centos 7 Docker映像,并且试图在其上获得一些手册页,以帮助调试Dockerfile。开箱即用,它没有太多:

# man ls
No manual entry for ls

根据Serverfault的这个答案,我安装了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. 为什么不(成功)安装man-pagesRPM,安装应该在该RPM中的文件?

更新:我尝试了Per Aaron Marasco的回答msuchy的评论yum reinstall shadow-utils。与一样yum install man-pages,此操作似乎已成功完成,但实际上并未将任何文件放入/usr/share/man/


在centos 6 docker imge
maxschlepzig

在CentOS 7上的Vagrant设置中发生了我的事-我发现在 安装软件包之前安装的某些软件包man-pages没有手册页。解决方案是重新安装此类软件包,例如yum reinstall yum rpm覆盖这两个软件包。
RichVel

Answers:


12

您的映像可能nodocs在yum配置中设置了事务标记(参见参考资料/etc/yum.conf)。

您可以在全局(或在yum命令行)将其删除,然后再(重新)安装您要为其使用手册的软件包。

例如:

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

是否应该--setopt=tsflags=''南峰答案中所建议的那样?(=for -
David Moles

1
@DavidMoles,是的,这是一个错字-在引用的projectatomic文档中还使用了正确的开关语法。
maxschlepzig

谢谢。我已经解决了这个问题,但限制为6个字符。:)
David Moles

为什么要重新安装shadow-utils?
Tiina

@Tina,因为这是提供命令的软件包useradd(在问题中已引用)。
maxschlepzig

5

这里没有任何作用,最重要的是,答案包含错字。我没有足够的代表在这里发表评论,所以我在这里添加它作为答案,以防万一。

要安装带有手册页的软件包,请使用:

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正常。

资源


+1,只是注释掉nodocs线,sed -i 's/tsflags=nodocs/# &/' /etc/yum.conf
迈克尔

2

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

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

# rpm --showrc | grep docs

如果在其中,则必须找到指定该文件的文件(在我的情况下)/etc/rpm/macros.imgcreate并将其删除

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


1

泊坞窗图像非常剥离下来。我相信它们会安装RPM 之后删除手册页。您可以使用进行验证rpm -V shadow-utils。我知道我在尝试使用增量RPM升级软件包时遇到了问题,因为手册页丢失了。

可悲的是,我认为获取某件手册页的唯一方法是强制重新安装RPM或从RPM中手动提取它们并将它们放到适当的位置。

我也看这个网站


2
是。yum reinstall shadow-utils将修复它。
msuchy

@msuchy我只是尝试了,不,不是。大概与阻止man-pages正确安装的原因有关?
David Moles

@ aaron-d-marasco这说明了为什么没有一开始就安装它们,但是没有说明我尝试安装时发生了什么man-pages
David Moles

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.