After the release of NetBSD 3.0 just before Christmas, I embarked on an orgy of upgrades and installations. After my final upgrade yesterday, I now have five machines running 3.0_STABLE:

Four of the machines were upgrades: two from 3.0_BETA and two from 2.1_STABLE. In addition, snowbird was installed from scratch. My workstation (tesla, sparc64) is still running 3.0_BETA (a fairly ancient build from July with some home-rolled patches), but will probably be upgraded to -CURRENT in the coming weeks.

I prefer doing manual upgrades as it’s much quicker than booting sysinst (which normally requires me to either make some changes to my boot server or write a CD). My standard procedure is as follows:

  1. Install the GENERIC kernel of the new release and reboot with it, leaving userland unchanged. This is needed because of potential syscall changes between major releases which can cause trouble during the upgrade if you have a newer userland with an older kernel.
  2. Untar the needed sets (except for etc.tgz!), remembering to use the “p” flag to tar to preserve permissions.
    tar -xpzvf base.tgz -C /
    ...
  3. Extract etc.tgz into /tmp/etc and run postinstall(8) – this ensures that /etc is correctly updated and my customizations aren’t overwritten.
    mkdir /tmp/etc
    tar -xpzvf etc.tgz -C /tmp/etc
    postinstall -s /tmp/etc check
    postinstall -s /tmp/etc fix
  4. Optionally run etcupdate(8) to update any other /etc files.
    etcupdate -b /tmp/etc
  5. Check for any manual changes needed after the upgrade (enabling/disabling services in rc.conf, etc).
  6. Reboot to ensure everything starts up correctly, etc.