I learned through Richard Bejtlich’s blog that the first beta for FreeBSD 6.0 was out.
According to the announcement, a cvsup tag was available so I decided to try it out on my laptop system.
Downloading the new source was a simple matter of changing one line in my custom cvsup file:
I then ran cvsup and waited an hour or so as a whole bunch of src was downloaded.
Before starting the upgrade, I read through /usr/src/UPDATING to see if there were any gotchas to be aware of. It had this to say:
“NOTE TO PEOPLE WHO THINK THAT FreeBSD 6.x IS SLOW:
FreeBSD 6.x has many debugging features turned on, in both the kernel and userland. These features attempt to detect incorrect use of system primitives, and encourage loud failure through extra sanity checking and fail stop semantics. They also substantially impact system performance. If you want to do performance measurement, benchmarking, and optimization, you’ll want to turn them off. This includes various WITNESS-related kernel options, INVARIANTS, malloc debugging flags in userland, and various verbose features in the kernel. Many developers choose to disable these features on build machines to maximize performance.”
I made a mental note to watch for these as I always create a custom kernel once the upgrade is successful.
# cd /usr/src
# make buildworld
# make buildkernel
# make installkernel
# make installworld
Then the moment of truth:
I watched the startup messages and everything looked good hardware-wise. I was pleasantly surprised at the verbosity of the new DHCP client as I like to see REQUESTS, ACKS and NACKS go by–makes troubleshooting much easier:
fxp0: link state changed to UP
no such user: _dhcp, falling back to “nobody”
DCHPREQUEST on fxp0 to 255.255.255.255 port 67
DHCPACK from 192.168.2.100
bound to 192.168.2.71 — renewal in 172800 seconds.
I did a quick poke about and everything still seemed to work: X, sound, pointer, etc. Now it was time for a custom kernel. I removed the debugging stuff:
makeoptions DEBUG=-g # Build kernel with gdb(1)
# Debugging for use in -current
I then went through the config file and made my usual customizations. Once I saved the edits:
# cd /usr/src
# make buildkernel KERNCONF=CUSTOM
# make installkernel KERNCONF=CUSTOM
My laptop now has this uname -a:
FreeBSD laptop.domain.org 6.0-BETA1 FreeBSD 6.0-BETA1 #1: Sun Jul 17 09:06:44 EDT 2005 firstname.lastname@example.org:/usr/obj/usr/src/sys/CUSTOM i386
So far, I haven’t encountered any problems with the new OS and was quite pleased at the flawlessness of the upgrade. A couple things to note if you’re going to take the plunge:
- do it on a test system after backing up your data; this is a beta, after all
- my laptop was fully in sync with 5.4; I don’t know what will happen if you upgrade from a version prior to that
I like Colin Percival’s quote on whether or not to use this beta:
“If I was deploying a new server today, I’d install FreeBSD 5.4. If I were planning on installing a new server next month, I’d install FreeBSD 6.0-BETA-whatever-number-we’re-up-to-by-then.”
Finally, Scott Robbins of NYCBug pointed me to a pr
which some may find helpful. It gives the instructions for disabling malloc debugging and mentions the new “make cleanworld” target. Thanks, Scott, for pointing this out.