Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug
Bug#: 90186
Alias:
Product:
Component:
Status: RESOLVED
Resolution: FIXED
Assigned To: Gentoo's Team for Core System packages <base-system@gentoo.org>
Hardware:
OS:
Version:
Priority:
Severity:
Reporter: Stuart W. Finlayson <stu@santa-li.com>
Add CC:
CC:
Remove selected CCs
URL:
Summary:
Status Whiteboard:
Keywords:

Filename Description Type Creator Created Size Actions
apropos.txt Patch that removes searching symlinked directories & displays paths where found patch David Payne 2005-06-12 01:28 0000 580 bytes Details | Diff
Create a New Attachment (proposed patch, testcase, etc.) View All

Bug 90186 depends on: Show dependency tree
Bug 90186 blocks:
Votes: 0    Show votes for this bug    Vote for this bug

Additional Comments: (this is where you put emerge --info)


Not eligible to see or edit group visibility for this bug.






View Bug Activity   |   Format For Printing   |   XML   |   Clone This Bug


Description:   Opened: 2005-04-23 17:48 0000
This is a repeat of a previous bug ( Bug #7101 ), which was fixed but seems to
be back two-fold--quadruple results, not just doubles.  For example, running
`man -k gccmakedep` yields:

gccmakedep           (1x)  - create dependencies in makefiles using 'gcc -M'
gccmakedep           (1x)  - create dependencies in makefiles using 'gcc -M'
gccmakedep           (1x)  - create dependencies in makefiles using 'gcc -M'
gccmakedep           (1x)  - create dependencies in makefiles using 'gcc -M'

------- Comment #1 From SpanKY 2005-04-25 13:36:40 0000 -------
chances are you have multiple versions of gcc installed and therefore multiple
versions of gcc manpages in MANPATH

but i dont know, you neglected to provide `emerge info`

------- Comment #2 From SpanKY 2005-04-25 13:38:31 0000 -------
err ... should have been NEEDINFO ... re-open with `emerge info` and
sys-apps/man version info :p

------- Comment #3 From Stuart W. Finlayson 2005-04-25 16:50:11 0000 -------
Here's what you asked for, I included an etcat -v of gcc as well...

wolverine root # emerge info
Portage 2.0.51.19 (default-linux/x86/2005.0, gcc-3.3.5-20050130, glibc-2.3.4.20041102-r1, 2.6.11-gentoo-r6 i686)
=================================================================
System uname: 2.6.11-gentoo-r6 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz
Gentoo Base System version 1.4.16
Python:              dev-lang/python-2.3.4-r1 [2.3.4 (#1, Feb  8 2005, 04:11:18)]
dev-lang/python:     2.3.4-r1
sys-devel/autoconf:  2.59-r6, 2.13
sys-devel/automake:  1.7.9-r1, 1.8.5-r3, 1.5, 1.4_p6, 1.6.3, 1.9.4
sys-devel/binutils:  2.15.92.0.2-r7
sys-devel/libtool:   1.5.14
virtual/os-headers:  2.6.11
ACCEPT_KEYWORDS="x86"
AUTOCLEAN="yes"
CFLAGS="-march=pentium4 -O2 -pipe"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.3/env /usr/kde/3.3/share/config /usr/kde/3.3/shutdown /usr/kde/3/share/config /usr/lib/X11/xkb /usr/share/config /usr/share/texmf/dvipdfm/config/ /usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/ /var/bind /var/qmail/control"
CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d"
CXXFLAGS="-march=pentium4 -O2 -pipe"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoaddcvs autoconfig candy ccache distlocks sfperms strict"
GENTOO_MIRRORS="http://gentoo.seren.com/gentoo ftp://gentoo.mirrors.tds.net/gentoo ftp://gentoo.netnitco.net/pub/mirrors/gentoo/source/"
MAKEOPTS="-j3"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
SYNC="rsync://rsync.namerica.gentoo.org/gentoo-portage"
USE="x86 X aalib alsa apm arts avi bash-completion bitmap-fonts bzlib cdr crypt curl dvd dvdr emboss encode esd fam flac fortran gif gpmimlib ipv6 java jpeg kde libwww mad mikmod mmx mmx2 motif mp3 mpeg ncurses network nptl nptlonly ogg oggvorbis opengl oss pam pdflib perl png python qt quicktime readline rtc sdl slang spell sse sse2 ssl svga tcpd tetex tiff truetype truetype-fonts type1-fonts vorbis xml2 xmms xv xvid zlib"
Unset:  ASFLAGS, CBUILD, CTARGET, LANG, LC_ALL, LDFLAGS, LINGUAS, PORTDIR_OVERLAY

wolverine root # etcat -v sys-apps/man
[ Results for search key           : sys-apps/man ]
[ Candidate applications found : 1 ]

 Only printing found installed programs.

*  sys-apps/man :
        [  I] 1.5p (0)
wolverine root #
wolverine root # etcat -v gcc
[ Results for search key           : gcc ]
[ Candidate applications found : 16 ]

 Only printing found installed programs.

*  sys-devel/gcc :
        [M  ] 2.95.3-r8 (2.95)
        [M  ] 3.1.1-r2 (3.1)
        [M  ] 3.2.3-r4 (3.2)
        [M  ] 3.3.2 (3.3)
        [M  ] 3.3.2-r5 (3.3)
        [M  ] 3.3.2-r7 (3.3)
        [   ] 3.3.5-r1 (3.3)
        [M~ ] 3.3.5.20050130 (3.3)
        [  I] 3.3.5.20050130-r1 (3.3)
        [M~ ] 3.3.5.20050130-r2 (3.3)
        [M~ ] 3.4.1-r3 (3.4)
        [M~ ] 3.4.3-r1 (3.4)
        [M~ ] 3.4.3.20050110-r1 (3.4)
        [M~ ] 3.4.3.20050110-r2 (3.4)
        [M  ] 4.0.0_beta20050416 (4.0)
        [M  ] 4.0.0 (4.0)
wolverine root #             

------- Comment #4 From Stuart W. Finlayson 2005-04-26 00:12:20 0000 -------
Just to add to that, the example I gave was to simply illustrate the behavior. 
I get 4 sets of the same results for just about any keyword.  For instance,
`man -k concatenate` yields:

cat                  (1)  - concatenate files and print on the standard output
pnmcat               (1)  - concatenate portable anymaps
strcat               (3)  - concatenate two strings
strncat [strcat]     (3)  - concatenate two strings
tac                  (1)  - concatenate and print files in reverse
wcscat               (3)  - concatenate two wide-character strings
wcsncat              (3)  - concatenate two wide-character strings
cat                  (1)  - concatenate files and print on the standard output
pnmcat               (1)  - concatenate portable anymaps
strcat               (3)  - concatenate two strings
strncat [strcat]     (3)  - concatenate two strings
tac                  (1)  - concatenate and print files in reverse
wcscat               (3)  - concatenate two wide-character strings
wcsncat              (3)  - concatenate two wide-character strings
cat                  (1)  - concatenate files and print on the standard output
pnmcat               (1)  - concatenate portable anymaps
strcat               (3)  - concatenate two strings
strncat [strcat]     (3)  - concatenate two strings
tac                  (1)  - concatenate and print files in reverse
wcscat               (3)  - concatenate two wide-character strings
wcsncat              (3)  - concatenate two wide-character strings
cat                  (1)  - concatenate files and print on the standard output
pnmcat               (1)  - concatenate portable anymaps
strcat               (3)  - concatenate two strings
strncat [strcat]     (3)  - concatenate two strings
tac                  (1)  - concatenate and print files in reverse
wcscat               (3)  - concatenate two wide-character strings
wcsncat              (3)  - concatenate two wide-character strings

The problem is the symlinks /usr/local/man and /usr/man being in MANPATH along
with the directories they point to (/usr/local/share/man and /usr/share/man
respectively) when makewhatis is run.  If they are not in MANPATH when
makewhatis is run, then `man -k some_keyword` yields the correct results--I
deleted the whatis files and ran `export MANPATH=$(echo $MANPATH | sed -e
's!/usr/local/man!!g; s!/usr/man!!g; s!::!:!g;')` followed by `makewhatis -w`
and then it worked correctly.

------- Comment #5 From SpanKY 2005-04-26 05:54:31 0000 -------
ah i delete those symlinks on my system so i guess that's why i've never
noticed :)

------- Comment #6 From Phil Richards 2005-05-27 09:50:33 0000 -------
I think there might be more to it than that:

~ # man -k lpstat
lpstat               (1)  - print cups status information
lpstat               (1)  - print cups status information
lpstat               (1)  - print cups status information
lpstat               (1)  - print cups status information

~ # echo $MANPATH
/usr/local/share/man:
/usr/share/man:
/usr/share/binutils-data/i686-pc-linux-gnu/2.16/man:
/usr/share/gcc-data/i686-pc-linux-gnu/3.4.3-20050110/man:
:
/opt/blackdown-jdk-1.4.2.01/man:
/usr/qt/3/doc/man

Interestingly:
~ # strace -f man -k lpstat 2>&1 | grep 'open.*whatis'
[pid 22723] open("/var/cache/man/whatis", O_RDONLY|O_LARGEFILE) = 4
[pid 22724] open("/usr/local/share/man/whatis", O_RDONLY|O_LARGEFILE) = 4
[pid 22725] open("/usr/share/man/whatis", O_RDONLY|O_LARGEFILE) = 4
[pid 22726] open("/usr/X11R6/man/whatis", O_RDONLY|O_LARGEFILE) = 4
[pid 22727] open("/usr/local/man/whatis", O_RDONLY|O_LARGEFILE) = 4
[pid 22728] open("/usr/man/whatis", O_RDONLY|O_LARGEFILE) = 4

And:
~ # grep -l lpstat /var/cache/man/whatis /usr/local/share/man/whatis
/usr/share/man/whatis /usr/X11R6/man/whatis /usr/local/man/whatis /usr/man/whatis

/var/cache/man/whatis
/usr/share/man/whatis
/usr/X11R6/man/whatis
/usr/man/whatis

And finally:
~ # ls -li /var/cache/man/whatis /usr/share/man/whatis /usr/X11R6/man/whatis
/usr/man/whatis
  429 -rw-r--r--  1 root root 1325182 May 25 18:34 /usr/X11R6/man/whatis
  429 -rw-r--r--  1 root root 1325182 May 25 18:34 /usr/man/whatis
  429 -rw-r--r--  1 root root 1325182 May 25 18:34 /usr/share/man/whatis
30487 -rw-rw-r--  1 root root 1191609 Jan  5 13:31 /var/cache/man/whatis

Three of them are due to symlinks, one of them is due to /var/cache/man/whatis.

Phil

------- Comment #7 From David Payne 2005-06-12 01:28:48 0000 -------
Created an attachment (id=61097) [details]
Patch that removes searching symlinked directories & displays paths where found

This patch makes an assumption, that the symlinked man directories were done
for an important reason and should not be simply turned into ordinary
directories. So this patch simply ignores any symlinked directory.

I have left in one side affect in this patch, the added echo line displays the
base paths where the man files have been found. In any production use, that
line should be removed or commented out. 

One question, should apropos be searching the /var/cache/man directories at all
since it seems like it would always lead to one extra listing everytime. If
not, then we should probably remove the reference to it you can see in the
begining of the patch.

------- Comment #8 From SpanKY 2005-06-12 02:16:00 0000 -------
we dont want to just trim every symlinked directory w/out any sort of checks

the check should be:
if (dir is a symlink) and (symlink target is in search path) then
  ignore symlink
else
  use symlink
fi

------- Comment #9 From Kevin Bryan 2005-07-01 18:15:38 0000 -------
While comment #8 is probably the most accurate, an easier fix might be to
remove
/usr/X11R6/man and /usr/man from man-1.5p-search-order.patch altogether.

------- Comment #10 From Jeroen Roovers 2005-07-21 03:38:07 0000 -------
Couldn't this simply be solved by removing or commenting out

MANPATH  /usr/local/man
MANPATH  /usr/man

in /etc/man.conf instead of fiddling with the symlinks? man(1) or makewhatis(8) 
need never look in there anyway if they are symlinks pointing to the real 
manpaths.

------- Comment #11 From Kevin Bryan 2005-09-27 07:34:44 0000 -------
Add:

/usr/X11R6/man

to the list to comment out/remove since /usr/X11R6 is a symlink to /usr now. 
With all three commented out I only get one result from apropos.  Since such a
change should be picked up by etc-update, I think it's ok to put this change
into the next release and admins can choose to merge it or not depending on
their system.

------- Comment #12 From Phil Richards 2005-09-27 07:56:46 0000 -------
Commenting out the suggested three entries from man.conf did the job for me.

The only other thing to get a clean "man -k" output was that I had to manually
remove /var/cache/man/whatis (I have no idea what generated this in the first
place - makewhatis doesn't appear to when run "normally".)  Could this be
automatically removed by the installation, or perhaps an einfo message output
suggesting that it is...?

Phil

------- Comment #13 From whereami 2006-02-02 01:57:32 0000 -------
this is a rather annoying and silly bug. Is there any reason not to simply
remove the extraneous MANPATH lines from the installed man.conf? I've been
living with quadruplicate (!) man pages for a while, and on a hunch finally
looked in man.conf and checked for symlinks.

i commented out the following lines:
MANPATH /usr/X11R6/man
MANPATH /usr/local/man
MANPATH /usr/man

------- Comment #14 From SpanKY 2006-02-06 07:41:08 0000 -------
*** Bug 95674 has been marked as a duplicate of this bug. ***

------- Comment #15 From SpanKY 2006-02-06 17:43:54 0000 -------
should be fixed in man-1.6c

Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug