[Slackbuilds-users] always run `mandb -c` after installing/removing manpages?
Arkadiusz Drabczyk
arkadiusz at drabczyk.org
Mon Aug 12 08:15:36 UTC 2024
On Sun, Aug 11, 2024 at 05:52:29PM -0400, B. Watson wrote:
>
>
> On Sun, 11 Aug 2024, Arkadiusz Drabczyk wrote:
>
> > In most packages manual page index caches are not updated which leads
> > to the following situation:
> >
> > $ man -k zathura
> > zathura: nothing appropriate.
> >
> > man -k can find the manpages only when caches are updated:
> >
> > $ sudo mandb -c
> > $ man -k zathura
> > zathura (1) - a document viewer
> > zathurarc (5) - zathura configuration file
> >
> > Unfortunately it takes some time, for example 10 seconds on my system.
>
> It takes a lot longer than 10 seconds on my system... long enough that
> users would be highly annoyed if they had to wait for it to finish
> every time they install or remove a package (and wait for it *twice*
> when doing upgradepkg, since it does both installpkg and removepkg).
>
> I just ran your command (sudo mandb -c) and it took 9 minutes and 25
> seconds. And that's on a machine that uses a pretty fast SSD. Hate to
> think how long it would take with a spinning-platter hard disk.
>
> Actually... are you sure your "10 seconds" figure is based on running
> with the -c option? Try "time mandb -c", as root.
I ran it as root of course, it wouldn't work on /usr/man/man1 if I
didn't since it is writable only by root. How many manpages do you
have? Is this system under heavy load?
> > sbopkglint already has 60-usr_info.t.sh, should a similar error
> > regarding manpages also be addded?
>
> I think the overhead of constantly regenerating the man database is
> just too high. Users who never even use "man -k" would be forced to
> pay the penalty for it.
Well the same can be said about the info database.
> > I know there is /etc/cron.daily/man-db but the command specified there
> > does not traverse /usr/man/man1/ where zathura manpages are located
> > for some reason:
> >
> > $ man -w zathura
> > /usr/man/man1/zathura.1.gz
>
> Looking at it... the main difference is that your command has "-c",
> and the cron job doesn't. -c means "create database from scratch"
> instead of updating it if it already exists. Leaving off the -c makes
> it run much faster.
>
> However, it appears that leaving off the -c also prevents mandb from
> adding the zathura man page to its database. I wonder if this is the
> intended behaviour, or if it might be considered a bug in mandb.
I was going to read the code to find out if it's a bug or a feature.
> The flip side of the coin: After "removepkg zathura", it still shows
> up in the man database. Doing "mandb" without the -c does remove it,
> and takes about 8 seconds. Behold:
>
> ---------------
> <root at xiphos:~># man -k zathura
> zathura (1) - a document viewer
> zathurarc (5) - zathura configuration file
> <root at xiphos:~># removepkg zathura &> /dev/null
> <root at xiphos:~># man -k zathura
> zathura (1) - a document viewer
> zathurarc (5) - zathura configuration file
> <root at xiphos:~># time mandb &>/dev/null
>
> real 0m7.254s
> user 0m5.198s
> sys 0m5.093s
> <root at xiphos:~># man -k zathura
> zathura: nothing appropriate.
> ---------------
>
> So it might be considered OK to run mandb (without -c) in a
> douninst.sh script. I hate to make it a hard requirement though.
>
> For the doinst.sh, here's a thing: The mandb command has a -f option
> that makes it add a single man page to the database. It runs quickly
> (less than 1 second), and seems to work fine. Right after installing
> the zathura package:
>
> ---------------
> <root at xiphos:~># man -k zathura
> zathura: nothing appropriate.
> <root at xiphos:~># mandb -f /usr/man/man1/zathura.1.gz mandb: warning:
> $MANPATH set, inserting /etc/man_db.conf
> Processing manual pages under /usr/man...
> 1 man subdirectory contained newer manual pages.
> 1 manual page was added.
> <root at xiphos:~># mandb -f /usr/man/man5/zathurarc.5.gz mandb: warning:
> $MANPATH set, inserting /etc/man_db.conf
> Processing manual pages under /usr/man...
> 1 man subdirectory contained newer manual pages.
> 1 manual page was added.
> <root at xiphos:~># man -k zathura
> zathura (1) - a document viewer
> zathurarc (5) - zathura configuration file
> ---------------
>
> So... for doinst.sh, it would make sense to have a "mandb -f" command
> for each man page in the package.
>
> Unfortunately the -f option doesn't help with removing entries from
> the database. "mandb -c" is the only way I've found to do that, and it
> takes forever.
hmm didn't you just say a few lines above that mandb without -c
removes the manpage?
--
Arkadiusz Drabczyk <arkadiusz at drabczyk.org>
More information about the SlackBuilds-users
mailing list