Change install-order? (upgrade from static to dynamic root)

Garance A Drosihn drosih at
Sun Nov 30 20:22:42 PST 2003

At 9:39 PM -0500 11/26/03, Garance A Drosihn wrote:
>I just installed 5.1-release on a sparc64, and then cvsup'ed
>to the latest snapshot of -current.  Since that update is such
>a large jump in time, I was going from a system which had no
>/rescue or /libexec to one which builds everything dynamically.
>This gets one into a mess in the middle of installworld, where
>suddenly almost everything dies with messages like:
>     "ELF interpreter /libexec/ not found"
>I know others have run into this problem, but there seems to be
>nothing in UPDATING to warn people about it.  Or at least, I
>didn't see anything in /usr/src/UPDATING under sparc64.

I did some more tests today, and it looks like it is still
true that updating from a non-/libexec system to a system
with both /libexec and dynamic-root will not work right.

There is a check in /usr/src/Makefile.inc1 which tries to
help out, but when I try a test-run of make (with the right
environment and parameters), that section does not seem to
do anything.  That section says:

# When upgrading to a dynamically linked root, install the runtime
# linker early into its new location before make(1) has a chance  
# to run the dynamically linked /bin/sh.
.if !defined(NO_DYNAMICROOT) && !defined(NOPIC) && \    
     (!defined(TARGET_ARCH) || ${TARGET_ARCH} == ${MACHINE_ARCH}) && \
     !defined(DISTDIR) && \
     (!defined(DESTDIR) || empty(DESTDIR) || ${DESTDIR} == "/") && \
SUBDIR+= libexec/rtld-elf

However, libexec/rtld-elf does not get added to the list of
subdirectories.  I am not completely sure what all those
lines in the .if are checking for, but if I change "DISTDIR"
to "DESTDIR" on the third line, I do get libexec/rtld-elf
added to the the SUBDIR variable.

But even if that fixes the check, I don't understand why we
would not just move up the:

.if exists(${.CURDIR}/libexec)
SUBDIR+= libexec

so that it will be installed before /bin is.  We already
install /include and /lib before we install /bin, and I would
think that we would *always* want a "new" /libexec installed
before installing /bin files which may depend on some change
to libraries in that directory.

Disclaimer: I realize there could be many subtleties here that
I am not aware off, so consider this more of a question than a
statement that something is definitely wrong.  Why *wouldn't*
we want /libexec installed before /bin?  I do know that the
current setup still does not work (going from 5.1-secure to
5.1-rightNow), but I may be pushing for the wrong solution.

[also, I intended to do more checking of this, but I've run
out of "weekend" and I doubt I'll work on this much until
next weekend....]

Garance Alistair Drosehn            =   gad at
Senior Systems Programmer           or  gad at
Rensselaer Polytechnic Institute    or  drosih at

More information about the freebsd-current mailing list