最小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から手動で抽出して適切な場所に配置することです。

また、見ることができますこのウェブサイトおそらく。

関連情報