Binary Strolls

Cyber rambling (or ranting), mostly about code

Running FreeBSD current

January 29, 2019 , posted in freebsd, x230, infra

I have been a FreeBSD user for quite sometime now. I run it on my servers, and on my personal laptop, a Thinkpad x230.

One of the main reasons I started experimenting with FreeBSD was to get more familiar with internals of a modern UNIX. What better way to learn than to poke around source? That’s how I ended up building FreeBSD.

CURRENT is the FreeBSD terminology for “bleeding edge” development version, the subversion branch where development happens. All new changes are developed against this branch, so this was the target/version that I wanted to build and run.

The good - Streamlined build

The code structure of FreeBSD was a big help in doing this, all base components that one would need on a minimal UNIX installation is in a single repo. The components in this repo is enough to boot a computer and start writing (C/C++) code on it. Which made compiling and running the development head a no brainer-less than 10 commands job. Take that LFS! (sorry, couldn’t resist).

# svn update /usr/src
# cd /usr/src
# make -j4 buildworld
# make -j4 kernel
# shutdown -r now
# cd /usr/src
# make installworld
# mergemaster -Ui
# shutdown -r now

The Bad - Takes too long

However compiling the entire tree is resource intensive, and it takes ~4 hours to build on my old Thinkpad, CPU usage will be at 100% and the laptop will be more or less unusable while building. This severely limited the frequency of updating code on laptop.

Mailing list to rescue

People at the FreeBSD-Current mailing list pointed out that I could just reuse the builds from my server. So that’s what I have done, I have yet another hetzner box building FreeBSD-CURRENT periodically with

cd /usr/src && svn update .
make -j 4 buildkernel buildworld KERNCONF=GENERIC-LAPTOP | tee /var/log/lastbuild.log

and I pull it to my laptop with rsync, with roughly following

cd /usr
rsync -avz builder:/usr/src .
rsync -avz builder:/usr/obj .

cd /usr/src
make -j4 installkernel KERNCONF=GENERIC-LAPTOP
shutdown -r now
make -j4 installworld KERNCONF=GENERIC-LAPTOP

The Ugly - Nothing yet

Sorry to disappoint, I haven’t come across any really bad things yet ¯\_(ツ)_/¯.

There is always risk of really breaking your system with an experimental OS version. I am yet to run across into that. That will eventually force me to use ZFS boot environments, I guess.

That’s all folks!

Except for some minor hiccups the experience running CURRENT have been smooth, I will keep this blog updated if it breaks :-)