For almost a decade I had a home server that started out as a retired office workstation. It sports an AMD Sempron 3200+ CPU, a whopping 2 GiB of RAM, and a blazingly fast 1.5Gbps SATA interface. While enough for the original intent, a simple file server, it grew beyond that fast. First it was a DLNA server, to watch media files from the server on the TV set. Then a torrent client, which later got the ability to automatically add new releases of Arch Linux, Debian, Fedora, Grml, … And finally an ownCloud instance, that was later switched to [Nextcloud].
Originally starting with Debian 5 (Lenny) which I
dist-upgraded all the way to Debian 7 (Wheezy). Disks got larger, and the combination of
mdraid and LVM kept everything running. Then ZFS on Linux got into Ubuntu, and got interesting for Debian too. So of course I had to reinstall for Debian 8 (Jessie), switching to a completely unsupported ZFS Root.
But there comes a point where it’s just not feasible to keep a machine alive. The hardware is, for all intents and purposes, outdated. Should any component besides the disks fail I’d be hard pressed to find a replacement. With Debian being what it is it’s hard to get an update to more current releases of packages, and with this hardware it’s pretty much impossible to containerize away stuff that might need these newer releases.
So I decided it was time for a new machine, and a switch from Debian to FreeBSD.
There are two things FreeBSD supports that I always wanted on Linux:
Jails are a OS-level virtualization, kind of the stuff that Docker or LXC does, but more mature (they’re part of FreeBSD since 2000), and without a for-profit company behind the technology.
With software for Linux you usually have 2 options:
- use the package provided by the distribution
- use whatever the developers provide, which can range from „compile it yourself“ through
curl | sudo bashto full-blown repos
Ports are a middle ground. They’re not officially supported by the FreeBSD project, altough they’re used for the package system, but usually have a maintainer from the community looking after them. This includes a whole infrastructure to create native packages from these ports. Combined with jails this means that you can run the bleeding edge of some software in it’s separate container, complete with updates, without having to look after n different build systems.
I have neither the experience, nor the time, to just heave everything from the old machine to the new, so this will happen incremental. I also plan to create an [Ansible] cookbook for everything I do, which I’ll publish (in a redacted form) via GitLab. This post will be updated with a link to a new article each time each time there’s something noteable.