Manpages können nicht auf einem minimalen Centos Docker-Container installiert werden

13

Ich habe ein minimales Centos 7 Docker-Image und versuche, Manpages darauf zu finden, die beim Debuggen meiner Docker-Datei helfen. Nach dem Auspacken hat es nicht viel:

# man ls
No manual entry for ls

Nach dieser Serverfault-Antwort habe ich das man-pagesRPM installiert , und das schien in Ordnung zu sein:

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

Jedoch:

# man ls
No manual entry for ls

Früher habe ich rpmüberprüft, ob man-pagesdie lsManpage enthalten sein sollte, und es sieht so aus:

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

Es sieht aber nicht so aus, als wäre es tatsächlich installiert:

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

Und es scheint auch nirgendwo anders im Dateisystem zu sein.

# find / -name ls.1\*
#

Ich kann Dateien in erstellen /usr/share/man/man1p/, daher ist es wahrscheinlich keine Verrücktheit des virtuellen Docker-Dateisystems.

Das Beste daran ist, dass ich in dieser Minute wirklich die Manpage für den useraddBefehl haben wollte, die nicht einmal in diesem RPM enthalten ist. Es ist in 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

Welches ist bereits installiert.

# 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

Und tatsächlich sind die Binaries (zB /usr/sbin/useradd) da. Aber nicht die Manpages.

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

Meine Fragen sind also:

  1. Warum kann ich keine der Manpages finden, die sich im shadow-utilsRPM befinden sollen , wenn ich die Binärdateien finde?
  2. Warum werden man-pagesdie Dateien, die in diesem RPM enthalten sein sollen, nicht (erfolgreich) installiert ?

Update: Per Aaron Marascos Antwort und msuchys Kommentar habe ich es versucht yum reinstall shadow-utils. Wie bei yum install man-pagesscheint dies erfolgreich abgeschlossen zu werden, es werden jedoch keine Dateien gespeichert /usr/share/man/.

David Moles
quelle
ähnliche frage zu einem centos 6 docker imge: unix.stackexchange.com/questions/182500/no-manual-entry-for-man
maxschlepzig
Passiert mir bei einem Vagrant-Setup mit CentOS 7 - Ich habe festgestellt, dass einige Pakete, die vor der Installation des man-pagesPakets installiert wurden, keine Manpages hatten. Die Lösung bestand darin, solche Pakete neu zu installieren, z. B. yum reinstall yum rpmum diese beiden abzudecken.
RichVel

Antworten:

12

In Ihrer Grafik ist wahrscheinlich das nodocsTransaktionsflag in der yum-Konfiguration gesetzt (vgl./etc/yum.conf ).

Sie können es global (oder über die YUM-Befehlszeile) entfernen, bevor Sie die Pakete, für die Sie die Manpages benötigen, (erneut) installieren.

Beispielsweise:

yum --setopt=tsflags='' reinstall shadow-utils
maxschlepzig
quelle
Sollte das so sein, --setopt=tsflags=''wie in der Antwort des Südgipfels vorgeschlagen ? ( =für -)
David Moles
1
@DavidMoles, ja, das war ein Tippfehler - die korrekte Switch-Syntax wurde auch im referenzierten projektatomaren Dokument verwendet.
Maxschlepzig
Vielen Dank. Ich hätte es gerade behoben, aber 6-Zeichen-Limit. :)
David Moles
warum installieren sie shadow-utils neu?
Tiina
@Tina, weil dies das Paket ist, das den Befehl bereitstellt useradd(auf den in der Frage verwiesen wurde).
Maxschlepzig
5

Hier hat nichts funktioniert und außerdem enthält die akzeptierte Antwort einen Tippfehler. Ich habe nicht genug Repräsentanten, um dort zu kommentieren, also füge ich es hier als Antwort hinzu, falls es jemandem hilft.

So installieren Sie ein Paket mit Manpages:

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

Dann:

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

Oder Sie können die Zeile dauerhaft aus yum.conf entfernen, wodurch die Installation von Manpages verhindert wird. Verwenden Sie dazu:

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

Dann kannst du yum installoder yum reinstallnormal benutzen .

Quelle

Mark Thomson
quelle
+1, um nur die nodocs-Zeile zu kommentieren,sed -i 's/tsflags=nodocs/# &/' /etc/yum.conf
michael
2

Ich weiß, dass dies eine alte Frage ist, aber angesichts der Zeit, die ich damit verbracht habe, sie aufzuspüren, wird sie irgendwann jemand anderem nützlich sein.

Das Problem hängt mit der Art und Weise zusammen, wie RPM im Docker-Image konfiguriert ist. Überprüfen Sie zunächst, ob die excludedocsDirektive in der RPM-Konfiguration wie folgt aufgeführt ist:

# rpm --showrc | grep docs

Wenn es dort ist, müssen Sie die Datei finden, die es in meinem Fall angibt, unter der es war, /etc/rpm/macros.imgcreateund es entfernen

Yum sollte dann alle Manpage-Installationen wie erwartet durchführen (vorausgesetzt, Sie haben nicht auch die nodocs tsflagoben genannten.

imoschak
quelle
1

Das Docker-Image ist extrem reduziert. Ich glaube, sie entfernen die Manpages, nachdem die RPMs installiert wurden. Sie können dies mit bestätigenrpm -V shadow-utils . Ich weiß, ich hatte Probleme beim Versuch, Delta-RPMs zum Aktualisieren von Paketen zu verwenden, da die Manpages fehlen.

Leider denke ich, dass die einzige Möglichkeit, eine Manpage für etwas zu erhalten, darin besteht, die RPM neu zu installieren oder sie manuell aus der RPM zu extrahieren und an Ort und Stelle abzulegen.

Siehe auch diese Seite, denke ich.

Aaron D. Marasco
quelle
2
Ja. yum reinstall shadow-utilswerde es reparieren.
Msuchy
@msuchy Ich habe das gerade ausprobiert und nein, das tut es nicht. Vermutlich im Zusammenhang mit dem, was die man-pagesordnungsgemäße Installation verhindert ?
David Moles
@ aaron-d-marasco Das erklärt, warum sie nicht installiert werden, aber es erklärt nicht, was passiert, wenn ich versuche, sie zu installieren man-pages.
David Moles
-4
export MANPATH=/usr/share/man/fr
user268477
quelle
5
Sie sollten erklären, warum Sie diesen Befehl empfehlen.
Centimane