Bug 31779 - Неверный вывод /usr/bin/manpath
Summary: Неверный вывод /usr/bin/manpath
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: man-db (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on: 33842
Blocks:
  Show dependency tree
 
Reported: 2016-02-10 15:06 MSK by Andrey Cherepanov
Modified: 2017-09-04 07:31 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Cherepanov 2016-02-10 15:06:52 MSK
[root@c253 ~]# /usr/bin/manpath
/usr/share/man/ru:/usr/share/man:/usr/local/share/man:/usr/local/man
[root@c253 ~]# LC_ALL=C /usr/bin/manpath
/usr/share/man/ru:/usr/share/man:/usr/local/share/man:/usr/local/man

/usr/share/man/ru на первом месте. После этого при установленном man-pages-ru всегда показывается русская версия. Безотносительно от локали, указанной в LC_ALL.

Если же поменять местами:
export MANPATH=/usr/share/man:/usr/share/man/ru:/usr/local/share/man:/usr/local/man

То man начинает работать как положено:
в русской локали показывать русскую страницу, в LC_ALL=C man apt-cache - англоязычную.

Более того! man прекрасно переключает локализованные страницы сам, без добавления /usr/share/man/ru в MANPATH.

Вывод: /usr/bin/manpath не должен возвращать список с /usr/share/man/ru
Comment 1 ruslandh 2017-02-17 07:54:52 MSK
Что-то никакого движения ...
Comment 2 Sergey Y. Afonin 2017-05-04 10:22:33 MSK
А у меня, вроде бы, правильно работает (p8).

$ /usr/bin/manpath
/usr/share/man:/usr/local/share/man:/usr/local/man

$ rpm -qf /usr/bin/manpath
man-1.6g-alt3

$ rpm -qa|grep man-pages
man-pages-ru-4.08-alt3
man-pages-4.10-alt2
man-pages-ru-extra-0.1-alt5

Но, в любом случае, в Сизифе man поменялся на man-db, теперь надо проверять с ним. И, опять же, у меня и с man-db работает:

$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME=C
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES=C
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

$ rpm -qa|grep man-pages
man-pages-4.10-alt2
man-pages-ru-4.08-alt3
man-pages-ru-extra-0.1-alt5

man iconv открывает английский man, LC_MESSAGES=ru_RU.UTF-8 man iconv - русский.
Comment 3 Andrey Cherepanov 2017-05-04 13:28:43 MSK
На man-db-2.7.6.1 то же самое: в локали C, POSIX, en_US показывается русский man.
Comment 4 Sergey Y. Afonin 2017-05-04 14:02:55 MSK
(In reply to comment #3) and (In reply to comment #0)

> На man-db-2.7.6.1 то же самое: в локали C, POSIX, en_US показывается русский
> man.

> Вывод: /usr/bin/manpath не должен возвращать список с /usr/share/man/ru

Ну так надо понять, откуда вылез /usr/share/man/ru. У меня-то этого ни с man, ни с man-db нет. Для man (в p8 правда) вывод приведён в Comment #2, для man-db вот:

$ LC_MESSAGES=ru_RU.UTF-8 /usr/bin/manpath
/usr/bin/manpath: предупреждение: найдена переменная среды $MANPATH, игнорируется /etc/man_db.conf
/usr/local/share/man:/usr/share/man:/usr/local/man

У и если переоткрывать, то с перевешиванием на man-db надо было.
Comment 5 ruslandh 2017-05-05 00:20:59 MSK

$ /usr/share/man/ru:/usr/share/man:/usr/local/share/man:/usr/local/man
bash: /usr/share/man/ru:/usr/share/man:/usr/local/share/man:/usr/local/man: Нет такого файла или каталога
$ LC_ALL=C /usr/bin/manpath
/usr/bin/manpath: warning: $MANPATH set, ignoring /etc/man_db.conf
/usr/local/share/man:/usr/share/man/ru:/usr/share/man:/usr/local/man
$ /usr/bin/manpath
/usr/bin/manpath: предупреждение: найдена переменная среды $MANPATH, игнорируется /etc/man_db.conf
/usr/local/share/man:/usr/share/man/ru:/usr/share/man:/usr/local/man
$ echo $MANPATH
/usr/local/share/man:/usr/share/man/ru:/usr/share/man:/usr/local/man


rpm -qf /etc/bash_completion.d/man-sh
man-sh
Comment 6 ruslandh 2017-05-05 00:21:50 MSK
В смысле, если стоит, попробовать удалить man-sh
Comment 7 Sergey Y. Afonin 2017-08-28 16:30:31 MSK
Исходя из Comment #3 перевешиваю на man-db, но проблему локализовать может только тот, у кого это проявляется. Я вот у себя воспроизвести не могу, так что, вероятно, это проблема какого-то другого пакета, который /usr/share/man/ru.
Comment 8 Sergey Y. Afonin 2017-08-31 16:09:47 MSK
(In reply to comment #7)

>  который /usr/share/man/ru.

слово "добавляет" не дописал.
Comment 9 Andrey Cherepanov 2017-08-31 17:35:26 MSK
(В ответ на комментарий №7)
> Исходя из Comment #3 перевешиваю на man-db, но проблему локализовать может
> только тот, у кого это проявляется. Я вот у себя воспроизвести не могу, так
> что, вероятно, это проблема какого-то другого пакета, который
> /usr/share/man/ru.
man-pages-ru такое имеет. Но проблему это не решает. MANPATH работает криво.
Comment 10 Alexey Gladkov 2017-09-01 00:18:55 MSK
manpath(1):
Если установлена переменная окружения $MANPATH, то manpath просто покажет её значение и выдаст предупреждение.

Если установлена переменная окружения $MANPATH, то её значение используется в качестве пути поиска справочных страниц. Если её нет, то man покажет страницу согласно локали т.е. дополнительно указывать /usr/share/man/ru нигде не нужно.
Comment 11 Andrey Cherepanov 2017-09-01 05:54:32 MSK
(В ответ на комментарий №10)
> manpath(1):
> Если установлена переменная окружения $MANPATH, то manpath просто покажет её
> значение и выдаст предупреждение.
> 
> Если установлена переменная окружения $MANPATH, то её значение используется в
> качестве пути поиска справочных страниц. Если её нет, то man покажет страницу
> согласно локали т.е. дополнительно указывать /usr/share/man/ru нигде не нужно.
Показывает всегда только русскую. Даже в английской и POSIX-локали.
Comment 12 Alexey Gladkov 2017-09-01 11:59:02 MSK
(В ответ на комментарий №11)
> (В ответ на комментарий №10)
> > manpath(1):
> > Если установлена переменная окружения $MANPATH, то manpath просто покажет её
> > значение и выдаст предупреждение.
> > 
> > Если установлена переменная окружения $MANPATH, то её значение используется в
> > качестве пути поиска справочных страниц. Если её нет, то man покажет страницу
> > согласно локали т.е. дополнительно указывать /usr/share/man/ru нигде не нужно.
> Показывает всегда только русскую. Даже в английской и POSIX-локали.

$ printf '{%s}\n' "$MANPATH"
{}

$ manpath
/usr/share/man:/usr/local/man:/usr/local/share/man

$ LANG=C man -w manpath
/usr/share/man/man1/manpath.1.xz

$ LANG=ru_RU.UTF-8 man -w manpath
/usr/share/man/ru/man1/manpath.1.xz

$ LANG=de_DE.UTF-8 man -w manpath
/usr/share/man/de/man1/manpath.1.xz

У меня всё работает согласно документации. Файл /etc/man_db.conf не модифицирован.
Comment 13 Sergey Y. Afonin 2017-09-01 12:22:44 MSK
(In reply to comment #7)

> так что, вероятно, это проблема какого-то другого пакета, который
> /usr/share/man/ru добавляет.

Кстати, косвенно это подтверждается тем, что поведение manpath и из старого man, и из нового man-db одинаково. Если только man и man-db какой-то общий код не используют. Но, вроде бы, оба пакета старые и, кажется, развивались сами по себе.
Comment 14 Andrey Cherepanov 2017-09-01 14:56:04 MSK
(В ответ на комментарий №12)
> (В ответ на комментарий №11)
> > (В ответ на комментарий №10)
> > > manpath(1):
> > > Если установлена переменная окружения $MANPATH, то manpath просто покажет её
> > > значение и выдаст предупреждение.
> > > 
> > > Если установлена переменная окружения $MANPATH, то её значение используется в
> > > качестве пути поиска справочных страниц. Если её нет, то man покажет страницу
> > > согласно локали т.е. дополнительно указывать /usr/share/man/ru нигде не нужно.
> > Показывает всегда только русскую. Даже в английской и POSIX-локали.
> 
> $ printf '{%s}\n' "$MANPATH"
> {}
> 
> $ manpath
> /usr/share/man:/usr/local/man:/usr/local/share/man
> 
> $ LANG=C man -w manpath
> /usr/share/man/man1/manpath.1.xz
> 
> $ LANG=ru_RU.UTF-8 man -w manpath
> /usr/share/man/ru/man1/manpath.1.xz
> 
> $ LANG=de_DE.UTF-8 man -w manpath
> /usr/share/man/de/man1/manpath.1.xz
> 
> У меня всё работает согласно документации. Файл /etc/man_db.conf не
> модифицирован.
Вот. А у меня:

cas@cas git $ printf '{%s}\n' "$MANPATH"
{/usr/local/share/man:/usr/share/man/ru:/usr/share/man:/usr/local/man}

и /etc/profile.d/mpi-selector-manpath.sh тоже самодеятельность проявляет. Осталось найти того, кто MANPATH переиначивает.
Comment 15 Alexey Gladkov 2017-09-01 17:04:55 MSK
(В ответ на комментарий №14)
> Вот. А у меня:
> 
> cas@cas git $ printf '{%s}\n' "$MANPATH"
> {/usr/local/share/man:/usr/share/man/ru:/usr/share/man:/usr/local/man}
> 
> и /etc/profile.d/mpi-selector-manpath.sh тоже самодеятельность проявляет.
> Осталось найти того, кто MANPATH переиначивает.

А! вот оно что! У меня всё работает как раз из-за того что:

$ rpm -V mpi-selector
S.5....T.    /etc/profile.d/mpi-selector-manpath.sh

$ egrep -c -v -e '^#' -e '^$' /etc/profile.d/mpi-selector-manpath.sh
0

Если выкинуть этот скрипт, то всё должно начать работать. По крайней мере мне этого хватило.
Comment 16 Andrey Cherepanov 2017-09-04 07:31:46 MSK
(В ответ на комментарий №15)
> Если выкинуть этот скрипт, то всё должно начать работать. По крайней мере мне
> этого хватило.
Да, это и было причиной. Закрываю баг.