Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Apr 2003 14:26:45 -0700
From:      Tim Kientzle <kientzle@acm.org>
To:        Scott Long <scott_long@btc.adaptec.com>
Cc:        John Polstra <jdp@polstra.com>
Subject:   Re: Going Dynamic (Was: HEADS UP: new NSS)
Message-ID:  <3E9F1C15.7080702@acm.org>
References:  <20030417141133.GA4155@madman.celabo.org> <20030417144449.GA4530@madman.celabo.org> <200304171535.h3HFZEFs094589@strings.polstra.com> <20030418014500.B94094@iclub.nsu.ru> <200304171944.h3HJi1jK095151@strings.polstra.com> <3E9F0A28.8030906@btc.adaptec.com>

next in thread | previous in thread | raw e-mail | index | archive | help
John Polstra wrote:
> Moving to a fully dynamically linked system sounds easier to me.
> But in the past there has been strong opposition to the idea every
> time it has been proposed.


So far, the best argument in favor of a
fully dynamic system has been: "Someday,
someone might need dlopen() to implement NSS,
PAM, or locales."

I think there's a much stronger argument now:
"Someone has already implemented a new NSS that
requires dlopen()."

As for the performance argument against dynamic
linking, Luke Mewburn observed that after
NetBSD switched to fully dynamic, suddenly
the dynamic start-up code got a lot of
attention <grin>, with wide-ranging benefits.

Scott Long wrote:
> Right, because everyone is deathly afraid of /usr/lib not being
> available and nothing working, or ld.so getting corrupt and nothing
> working,


Nate Lawson and I had a discussion with Luke Mewburn
of NetBSD about this.  He outlined a strategy for
dealing with exactly these issues.  Two key points:

  1) Move critical libraries from /usr/lib to /lib.
     This ensures that /bin, /sbin, etc, will all
     work during boot, for instance, before /usr is
     mounted.  To date, people who wanted to experiment
     with fully dynamic had to keep /usr on the root
     partition.  Note that static libs don't need to
     move, only a handful of dynamic libs need to
     be relocated (with compatibility symlinks from
     their old locations in /usr/lib, of course).

  2) Build a separate set of statically-linked
     binaries for emergency use.  I've already
     done this, and the patches are currently
     being reviewed.  They add a /rescue directory
     which uses crunchgen to pack most of /bin, /sbin,
     and select other pieces into a nice small package.
     Gauranteed to work even if you hose ld.so.

     Note that the standard /bin and /sbin will continue
     to be used during boot and normal system operation.
     Since they're dynamically linked, dlopen() works
     and NSS, PAM, etc, can be used.  If things
     go awry, then the /rescue directory will have
     fully static versions of standard utils that can
     be used to repair the system.  The /rescue utils
     won't be able to fully use NSS or PAM, of course,
     but if you're booting single user to repair a hosed
     /usr partition, you probably don't really need NSS. ;-)

I have Luke's full outline for transitioning to
a dynamic system around here somewhere....


> If switching to a fully dynamically linked system is desired before
> 6.0 then it needs to happen before 5.2.  I'm not opposed to this.


As I said, I've already done a chunk of work
for this.  If someone would like to help finish...

Tim Kientzle



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3E9F1C15.7080702>