Không thể cài đặt các trang man trên thùng chứa Centos Docker tối thiểu


13

Tôi có một hình ảnh Docker Centos 7 tối thiểu và tôi đang cố gắng lấy một số trang người dùng trên đó để giúp gỡ lỗi Dockerfile của tôi. Ra khỏi hộp, nó không có nhiều:

# man ls
No manual entry for ls

Mỗi câu trả lời Serverfault này , tôi đã cài đặt man-pagesRPM, và đó dường như đi tốt:

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

Tuy nhiên:

# man ls
No manual entry for ls

Tôi đã từng rpmkiểm tra xem có man-pagesphải bao gồm lstrang man không, và có vẻ như nó có:

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

Nhưng có vẻ như nó không thực sự được cài đặt:

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

Và nó dường như không phải là bất cứ nơi nào khác trên hệ thống tập tin.

# find / -name ls.1\*
#

Tôi có thể tạo các tệp trong /usr/share/man/man1p/, vì vậy có lẽ nó không phải là một sự kỳ lạ của hệ thống tệp ảo Docker.

Phần tốt nhất của điều này là điều tôi thực sự muốn ngay lúc này là trang man cho useraddlệnh, thậm chí không có trong RPM đó. Nó ở trong 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

Mà đã được cài đặt.

# 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

Và, trên thực tế, các nhị phân (ví dụ /usr/sbin/useradd) đang ở đó. Nhưng không phải trang đàn ông.

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

Vì vậy, câu hỏi của tôi là:

  1. Tại sao tôi không thể tìm thấy bất kỳ trang nào được cho là trong shadow-utilsRPM, khi tôi có thể tìm thấy các tệp nhị phân?
  2. Tại sao không (thành công) cài đặt man-pagesRPM cài đặt các tệp được cho là trong RPM đó?

Cập nhật: mỗi câu trả lời Aaron Marasco củabình luận msuchy của , tôi đã cố gắng yum reinstall shadow-utils. Như với yum install man-pages, điều này dường như hoàn thành thành công, nhưng thực tế không đặt bất kỳ tệp nào vào /usr/share/man/.


câu hỏi tương tự trên một docker centos 6 imge: unix.stackexchange.com/questions/182500/no-manual-entry-for-man
maxschlepzig 18/03/2016

Đã xảy ra với tôi khi cài đặt Vagrant với CentOS 7 - Tôi thấy rằng một số gói được cài đặt trước khi man-pagesgói được cài đặt không có trang man. Giải pháp là cài đặt lại các gói như vậy, ví dụ yum reinstall yum rpmđể bao gồm cả hai.
RichVel

Câu trả lời:


12

Hình ảnh của bạn có thể có những nodocslá cờ giao dịch thiết lập trong cấu hình yum (x /etc/yum.conf).

Bạn có thể xóa nó trên toàn cầu (hoặc tại dòng lệnh yum) trước khi (cài đặt lại) các gói bạn muốn các trang man cho.

Ví dụ:

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

Điều đó có nên được --setopt=tsflags=''đề xuất trong câu trả lời của hội nghị thượng đỉnh phía nam không? ( =cho -)
David Moles

1
@DavidMoles, vâng, đây là một lỗi đánh máy - cú pháp chuyển đổi chính xác cũng được sử dụng trong tài liệu dự án tham chiếu.
maxschlepzig

Cảm ơn. Tôi vừa sửa nó, nhưng giới hạn 6 ký tự. :)
David Moles

Tại sao phải cài đặt lại bóng tối?
Tiina

@Tina vì đây là gói cung cấp lệnh useradd(được tham chiếu trong câu hỏi).
maxschlepzig

5

Không có gì ở đây làm việc và trên hết câu trả lời được chấp nhận có một lỗi đánh máy. Tôi không có đủ Rep để bình luận ở đó vì vậy tôi thêm nó vào đây như một câu trả lời trong trường hợp nó giúp được bất cứ ai.

Để cài đặt một gói với các trang man, hãy sử dụng:

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

Sau đó:

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

Hoặc, bạn có thể xóa vĩnh viễn dòng khỏi yum.conf, điều này ngăn các trang man cài đặt. Để làm điều này, sử dụng:

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

Sau đó, bạn có thể sử dụng yum installhoặc yum reinstallbình thường.

Nguồn


+1 cũng vậy, để chỉ nhận xét về dòng gật đầu,sed -i 's/tsflags=nodocs/# &/' /etc/yum.conf
michael

2

Tôi biết đây là một câu hỏi cũ nhưng với thời gian mà tôi đã dành để theo dõi nó, cuối cùng nó sẽ có ích cho người khác.

Vấn đề liên quan đến cách RPM được cấu hình trong hình ảnh docker, trước tiên hãy kiểm tra xem lệnh excludedocscó được liệt kê trong cấu hình của RPM như vậy không:

# rpm --showrc | grep docs

Nếu nó ở trong đó thì bạn phải tìm tập tin chỉ định nó trong trường hợp của tôi và nó đã bị /etc/rpm/macros.imgcreatexóa

Sau đó, Yum sẽ thực hiện tất cả cài đặt trang con người như mong đợi (với điều kiện là bạn cũng không có các nodocs tsflagđề cập ở trên.


1

Hình ảnh Docker cực kỳ bị tước bỏ. Tôi tin rằng họ xóa các trang man sau khi RPM được cài đặt. Bạn có thể xác minh điều này với rpm -V shadow-utils. Tôi biết tôi đã gặp vấn đề khi cố gắng sử dụng RPM delta để nâng cấp các gói vì các trang man bị thiếu.

Đáng buồn thay, tôi nghĩ cách duy nhất để có được một trang man cho một cái gì đó là buộc cài đặt lại RPM hoặc trích xuất chúng từ RPM theo cách thủ công và thả chúng vào vị trí.

Xem thêm trang web này tôi đoán.


2
Đúng. yum reinstall shadow-utilssẽ sửa nó
msuchy

@msuchy Tôi vừa thử nó, và không, nó không. Có lẽ liên quan đến bất cứ điều gì ngăn chặn man-pagescài đặt đúng cách?
David Moles

@ aaron-d-marasco Điều đó giải thích tại sao chúng không được cài đặt để bắt đầu, nhưng nó không giải thích điều gì đang xảy ra khi tôi cố gắng cài đặt man-pages.
David Moles

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.