Thursday, November 20, 2003

fun with -current

So I have several boxes at work installed with 5.0. One particular box I was having trouble with inetd connections sending reset when the box was under a significant amount of httpd load. No problem, I just adjusted inetd to start with '-R0' and problem solved.

After I did this, it occurred to me that I could easily update the box to -current by NFS mounting /usr/src and /usr/obj from the machine I track -current on and run make installkernel, reboot, installworld, etc.. to get it up to date fairly quickly. I should have stopped myself right there.

At first make installkernel complained about this line in Makefile.inc1

745: (${TARGET_ARCH} != ${MACHINE_ARCH} || ${BOOTSTRAPPING} < 501101)

Which was really weird since ${BOOTSTRAPPING} is 0, not "0" and it's complaining about string comparisons. Oh well, I changed '<' to '!=' since it would accomplish the same thing.

Installkernel succeeded and I rebooted single user into the new kernel, remounted /usr/src and /usr/obj off the -current box and began to run makeinstallworld (after mergemaster -p of course). This is where things got ugly. The install died somewhere in in the middle of nowhere leaving me with no ld-elf.so.1 and half installed new DYNAMICROOT /bin, /sbin, etc... ARGHH!! I couldn't do anything that wasn't built into the shell at this point.

THANK GOD for a statically linked mountd. I was able to finally mount /rescue off of the -current box and proceed to copy just enough to selectively 'make install' certain portions of the tree! After it was fairly stable, I re-ran 'make installworld' and succeeded. I think NO_DYNAMICROOT=yo will be in the -current boxen's make.conf from now on.

2 comments:

  1. what error did it die with? is there any mention of this in UPDATING?

    ReplyDelete
  2. It dies complaining about libc.so.1, evidently during the libexec portion of installworld since ld-elf.so.1 was missing. I'm not sure if this was just a spurious nfs error that happened to cause it to bomb.

    The libc.so.1 error (libc.so.1 did exist at the time) was due to the fact that the exec'd util during the make process wanted the newer libc.so.1 which wasn't installed yet.

    There's no mention of problems with the dynamic root stuff in UPDATING when upgrading from 5.0, and I've yet to retry another 5.0 update to -current.

    In hindsight I should have rsync'd /usr/src and /usr/obj and /rescue over first. But if you were on a system with low diskspace it would be a problem.

    ReplyDelete