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

2003-11-30 Thread Garance A Drosihn
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/ld-elf.so.1 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} == "/") && \
!exists(/libexec/ld-elf.so.1)
SUBDIR+= libexec/rtld-elf
.endif

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
.endif
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=   [EMAIL PROTECTED]
Senior Systems Programmer   or  [EMAIL PROTECTED]
Rensselaer Polytechnic Instituteor  [EMAIL PROTECTED]
___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


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

2003-11-26 Thread Garance A Drosihn
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/ld-elf.so.1 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.
Instead of warning people, I was wondering if there would be
any downside to having installworld always install /rescue
first (since that should not depend on anything else), and
install /libexec before installing executables.
  - - - -
I did recover from that mess by taking advantage of tips given
in previous threads on this situation.  I used the rescue
binary in to give me a few key commands, doing something like:
cd /usr/obj/usr/src/rescue/rescue
./rescue mkdir /usr/tempbin
./rescue ln rescue /usr/tempbin/cp
./rescue ln rescue /usr/tempbin/cat
./rescue ln rescue /usr/tempbin/ldconfig
./rescue ln rescue /usr/tempbin/ln
  ...etc...
PATH=/usr/tempbin
cd /usr/obj/usr/src/libexec/rtld-elf
cp -p * /libexec
ldconfig -m /lib
cd /usr/obj/usr/src/usr.bin/xinstall
cp -p xinstall /usr/bin/install
I may have missed a few steps there, but I think that got me
far enough along that I could 'make install's in /usr/src/lib
and /usr/src/libexec.  Once I was confident that I had enough
working parts installed, I went back and repeated the
'make installworld'.  Seems to have worked out OK.
--
Garance Alistair Drosehn=   [EMAIL PROTECTED]
Senior Systems Programmer   or  [EMAIL PROTECTED]
Rensselaer Polytechnic Instituteor  [EMAIL PROTECTED]
___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"