# 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.