Не удается установить справочные страницы в минимальный контейнер 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-utilsRPM, когда я могу найти двоичные файлы?
  2. Почему (успешно) установка man-pagesRPM не устанавливает файлы, которые должны быть в этом RPM?

Обновление: за ответ Аарона Мараско и комментарий Мсучи я попытался yum reinstall shadow-utils. Как и в случае yum install man-pages, это, кажется, завершается успешно, но фактически не помещает никаких файлов /usr/share/man/.

Дэвид Моулз
источник
аналогичный вопрос на докере Centos 6 imge: unix.stackexchange.com/questions/182500/no-manual-entry-for-man
maxschlepzig
Со мной произошла установка Vagrant с CentOS 7 - я обнаружил, что некоторые пакеты, установленные до man-pagesустановки, не имеют man-страниц. Решением было переустановить такие пакеты, например, yum reinstall yum rpmчтобы покрыть эти два.
RichVel

Ответы:

12

Возможно, в вашем изображении установленnodocs флаг транзакции в конфигурации yum (ср. /etc/yum.conf).

Вы можете удалить его глобально (или в командной строке yum) перед (пере) установкой пакетов, для которых вы хотите man-страницы.

Например:

yum --setopt=tsflags='' reinstall shadow-utils
maxschlepzig
источник
Должно ли это быть так, --setopt=tsflags=''как предложено в ответе саммита на юг ? ( =для -)
Дэвид
1
@DavidMoles, да, это была опечатка - правильный синтаксис переключателя также использовался в указанном проектном документе.
maxschlepzig
Благодарю. Я бы только исправил это, но ограничение в 6 символов. :)
Дэвид
зачем переустанавливать shadow-utils?
Тийна
@Tina, потому что это пакет, который предоставляет команду useradd(на которую ссылались в вопросе).
maxschlepzig
5

Ничто здесь не сработало, и, кроме того, принятый ответ содержит опечатку. Мне не хватает Rep, чтобы комментировать там, поэтому я добавляю его сюда в качестве ответа на случай, если это кому-нибудь поможет.

Для установки пакета с man-страницами используйте:

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

Потом:

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

Или вы можете навсегда удалить строку из yum.conf, которая запрещает установку man-страниц. Для этого используйте:

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

Тогда вы можете использовать yum installили yum reinstallнормально.

Источник

Марк Томсон
источник
+1 также, чтобы просто закомментировать строку nodocs,sed -i 's/tsflags=nodocs/# &/' /etc/yum.conf
майкл
2

Я знаю, что это старый вопрос, но, учитывая время, которое я потратил на его отслеживание, в конечном итоге он пригодится кому-то еще.

Проблема связана с тем, как RPM настроен в образе докера, сначала проверьте, excludedocsуказана ли директива в конфигурации RPM следующим образом:

# rpm --showrc | grep docs

Если он там, то вы должны найти файл, в котором он указан, в моем случае он был /etc/rpm/macros.imgcreateи удалить его

Затем Yum должен выполнить всю установку man-страницы, как и ожидалось (учитывая, что у вас также нет nodocs tsflagвышеупомянутого.

imoschak
источник
1

Изображение Docker очень урезано. Я считаю, что они удаляют страницы руководства после установки RPM. Вы можете проверить это с rpm -V shadow-utils. Я знаю, что у меня были проблемы при попытке использовать дельта-RPM для обновления пакетов, потому что man-страницы отсутствуют.

К сожалению, я думаю, что единственный способ получить справочную страницу для чего-то - принудительно переустановить RPM или вручную извлечь их из RPM и поместить их на место.

Смотрите также этот сайт, я думаю.

Аарон Д. Мараско
источник
2
Да. yum reinstall shadow-utilsэто исправлю.
августа
@msuchy Я только что попробовал, и нет, это не так. Предположительно связано с тем, что мешает man-pagesправильно установить?
Дэвид Моулз
@ aaron-d-marasco Это объясняет, почему они не установлены с самого начала, но не объясняет, что происходит, когда я пытаюсь установить man-pages.
Дэвид Моулз
-4
export MANPATH=/usr/share/man/fr
user268477
источник
5
Вы должны объяснить, почему вы рекомендуете эту команду.
Сентимане