shooting oneself in the foot with "ldconfig -v"
Erik Trulsson
ertr1013 at student.uu.se
Wed Oct 10 22:26:42 PDT 2007
On Thu, Oct 11, 2007 at 12:27:49AM -0400, Jonathan Noack wrote:
> On Wed, October 10, 2007 18:34, Erik Trulsson wrote:
> > On Wed, Oct 10, 2007 at 05:41:29PM -0400, Jonathan Noack wrote:
> >> Hey folks,
> >> I'm running 6.2-p8 and was trying to clean up my "portsclean -L" output
> >> today. It was reporting tons of duplicate libraries in /usr/X11R6 and
> >> /usr/local even though X11R6 is an alias to /usr/local. I tracked the
> >> problem to portclean's use of `ldconfig -elf -r` which was reporting
> >> directories and libraries in /usr/X11R6. I read the ldconfig manpage in
> >> an attempt to understand more and saw this line:
> >> -v Switch on verbose mode.
> >>
> >> I told myself, "Self, the '-v' option may allow you to determine what's
> >> going on. It can't help knowing more!" Alas, the "-v" option doesn't
> >> behave as advertised. Instead it clears the shared library cache
> >> (reference: http://www.parsed.org/tip/231/). An empty shared library
> >> cache means all dynamically-linked programs fail. This has the
> >> wonderful
> >> side-effect of preventing me from logging into the box to fix it (I
> >> logged
> >> off before I figured this out). "Reboot and all will be well," you say?
> >> Yes, on boot /etc/rc.d/ldconfig is run and it builds the shared library
> >> cache. Unfortunately, the box is 1,000 miles away in my apartment. :(
> >>
> >> This brings me to the question:
> >> Is the "-v" option broken or is the documentation out of date?
> >
> > No, the '-v' option behaves as documented and is not broken.
> > It is, however, intended to be used in conjunction with some other option.
> >
> > You see, running ldconfig(8) without any arguments at all will clear the
> > shared library cache. (Actually it will replace the cache with the files
> > found in the specified directories, but since none were specified...)
> > Adding '-v' will not change what ldconfig does, except possibly letting
> > it be a bit more verbose about what happens.
>
> Not according to ldconfig(8); running ldconfig without any arguments
> implies "-R":
> -R Rescan the previously configured directories. This opens the
> previous hints file and fetches the directory list from the
> header. Any additional pathnames on the command line are also
> processed. This is the default action when no parameters are
> given.
Yes, you are right.
>
> The previously configured directory list was fully populated, so
> effectively there should have been no change as the previously configured
> directories were untouched and I specified no additional pathnames.
>
> > ldconfig is behaving as designed and documented, so the bug, such as it
> > is,
> > is in the design of ldconfig that lets you screw up the machine by simply
> > running ldconfig without any option.
>
> Are you saying that by specifying "-v" I no longer satisfied the "no
> parameters are given" clause and ended up in a default place in the logic?
That wasn't actually what I was saying, but after checking the source code it turns
out you are right and that is exactly what happens.
> I could see how an unconditional shared library cache clear coupled with
> no additional action (no matching actions to pursue) could get me the
> results I got. If so that behavior is really confusing. IMHO a verbose
> switch shouldn't change behavior; it should just spam the console a lot.
True.
--
<Insert your favourite quote here.>
Erik Trulsson
ertr1013 at student.uu.se
More information about the freebsd-questions
mailing list