diff --git a/pages/FreeBSD9to10.md b/pages/FreeBSD9to10.md new file mode 100644 index 0000000..ed63f3a --- /dev/null +++ b/pages/FreeBSD9to10.md @@ -0,0 +1,175 @@ +# Moving a FreeBSD 9.3-STABLE System to 10.1.0-RELEASE + +In order to move from maintaining a FreeBSD system using source updates and manual builds, one needs to get it on a release track. One way to do this is to upgrade it to the next release by doing a final source build. Unfortunately, there is no FreeBSD 9 release after FreeBSD 9.3. So one has to jump to 10.x. At the time of writing 10.1.0-RELEASE was the most current. + +## Getting the Source for 10.1-RELEASE + +### The Plan for Fetching Source + +I wanted to save the old source tree just in case, before getting the new one. So I moved /usr/src out of the way and grabbed the release via svn. + +``` +mv /usr/src /usr/src.old +rm -rf /usr/obj +mkdir /usr/src +cd /usr/src +svn checkout https://svn0.us-west.freebsd.org/base/releng/10.1/ /usr/src +``` + +### The Reality + +Unfortunately this failed + +``` +# svn checkout https://svn0.us-west.freebsd.org/base/release/10.1.0/ /usr/src +svn: E000064: Unable to connect to a repository at URL 'https://svn0.us-west.freebsd.org/base/release/10.1.0' +svn: E000064: Error running context: Host is down +``` + +After 20 minutes of wasted debugging, it turned out that there was a DNS entry for an AAAA, but the server was not reachable via IPv6 + +``` +# ping6 svn0.us-west.freebsd.org +PING6(56=40+8+8 bytes) 2001:418:1::27 --> 2001:1900:2254:206a::e6a:0 +^C +--- svnmir.ysv.freebsd.org ping6 statistics --- +5 packets transmitted, 0 packets received, 100.0% packet loss +``` + +So I turned off IPv6 and the svn ran successfully. + +## Building the 10.1 release + +### The Instructions + +The classic instructions from /usr/src/UPDATING are + +``` +To upgrade in-place from stable to current +---------------------------------------------- + +make buildworld [9] +make kernel KERNCONF=YOUR_KERNEL_HERE [8] + [1] + [3] +mergemaster -p [5] +make installworld +mergemaster -i [4] +make delete-old [6] + +``` + +### What I Actually Did + +My habits were slightly different. So I did the following + +#### Build World and Kernel + +Note that one first builds the new world but does not install it, so that the kernel will be built with the new compiler and library. + +``` +time make buildworld 2>&1 | tee buildworld.log +time make kernel 2>&1 | tee kernel.log +``` + +Note that this last has installed the new kernel, so you are committed. + +If you turned IPv6 off in /etc/rc.conf you may want to re-enable it. + +### Finish Installation of the New World + +At or before this point, it is wise to test that you have serial (or VGA) console. You're gonna need it. + +Now boot the new kernel in single user mode. + +``` +shutdown now +``` + +Then install the world as built in the previous steps. From the serial (or VGA) console, + +``` +export TERM=vt100 +mergemaster -p +cd /usr/src +time make installworld 2>&1 > installworld.log +# check installworld.log to be sure it's ok +tail installworld.log +mergemaster -cviFU +``` + +In once case, after installworld, mergemaster got a jillion + +``` +: Conf string ends with key +``` + +The hack is to + +``` +rm /etc/malloc.conf +``` + +and rerun installworld. + +## Finally, Boot into the New System + +One should now be able to boot multi-user. Careful inspection of the boot console output would be wise. + +``` +reboot +``` + +One should get to the current security patch level. + +``` +freebsd-update fetch +freebsd-update install +``` + +And a reboot would probably be wise, as there was likely a kernel or other critical component update. + +### Oopsie! + +The reboot gave me + +``` +Configuring syscons: keymap keyrate blanktime. +Performing sanity check on sshd configuration. +Shared object "libkrb5.so.11" not found, required by "sshd" +/etc/rc: WARNING: failed precmd routine for sshd +``` + +I had to go in over serial console and + +``` +cd /usr/src/secure/lib/libssh +make +make install +cd /usr/src/secure/usr.sbin/sshd +make +make install +cd /usr/src/lib/libgssapi +make +make install +service sshd restart +``` + +to get going again. I never debugged this, just hacked. + +## And Rebuild Ports + +It is recommend that one rebuild all installed ports. + +``` +pkg-static install -f pkg +portmaster -af +``` + +If portmaster has a bad day, fix whatever caused it to barf and + +``` +portmaster -af -R +``` + +to resume without rebuilding what it already rebuilt. \ No newline at end of file