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>