Home Server

Home Server

After the hardware upgrade in November and a somehow rekindled interest in playing around with hardware and self-hosting after a few months of mostly playing games… I found myself with a spare i5-3570K with 16GB RAM. I’m pretty happy with my FreeNAS box, but it’s not the fastest (AMD Turion™ II Neo N54L) and it doesn’t run docker and I don’t even want to try to run a beefy VM on it. The NAS should be stable and left alone. (I run 2 jails, but they’re just serving files, in a sense.)

Also I tried to have my Raspberry Pi 3 as a “development box” here, but it just felt too slow. Maybe it was the USB stick over USB 2, I don’t know. And WSL also doesn’t excite me, really. It just feels wrong, somehow.

So incidentally a years old 650W PSU died on me a few weeks back and I had already transplanted my i5’s PSU into that other computer, so I needed a new one anyway if I wanted to use that computer. Sadly it was in a midi tower that was just a little too big to fit under my desk (there’s already my main machine, my NAS, a container with wheels and my subwoofer that doubles as a foot rest most of the days).

So I looked for a small case and a “smaller” PSU and then I ordered

Now it fits under my desk. I didn’t want to go full-out proxmox because I only want to run a few docker containers and one “pet” VM where I have a normal Linux box available without having to boot a laptop and that can use 4 cores a lot of RAM. So my host was supposed to be kinda bare-bones, so I decided to Alpine, which I hadn’t used in a while, and mostly in VMs and containers.

The wiki was helpful, as usual, but I’m still copying my steps here in case they change it.

  • install alpine via alpine-setup (3.11 in my case)
  • uncomment the /community repo in /etc/apk/repositories
  • install packages:

    apk update
    # for docker & libvirt, not 100% sure if you need virt-manager
    apk add docker bridge libvirt-daemon qemu-img qemu-system-x86_64 dbus polkit
    # for my own convenience
    apk add sudo curl file htop
    # for docker-compose (there should be a better way, but it didn't work)
    apk add py-pip python-dev libffi-dev openssl-dev gcc libc-dev make
  • add user to correct groups:

    • addgroup USER docker
    • addgroup USER libvirt
  • start daemons on boot:

    • rc-update add docker
    • rc-update add libvirtd
    • rc-update add dbus
    • rc-status
  • enable remote access for virt-manager:

    # cat /etc/polkit-1/localauthority/50-local.d/50-libvirt-ssh-remote-access-policy.pkla
    [Remote libvirt SSH access]
  • check networking (brctl might be smarter than manual fiddling):

    # cat /etc/network/interfaces
    auto lo
    iface lo inet loopback
    auto br0
    iface br0 inet static
        hostname whatever
        bridge-ports eth0
        bridge-stp 0
        bridge-fd 0
  • finalize:

    • reboot and check if everything works
    • brctl show

      br0             8000.c86000ecf792       no              eth0
      docker0         8000.024214a852b8       no
      virbr0          8000.52540047d4cc       yes             virbr0-nic
    • connect via ssh + virt-manager from anywhere


The only open ports should be:

# netstat -tulpen
Proto Local Address  PID/Program name

tcp 6419/qemu-system-x8
tcp     4380/sshd
tcp   :::22          4380/sshd
udp  3027/chronyd
udp   ::1:323        3027/chronyd

Low RAM usage in idle, no CPU power wasted in idle, looks good. So far Alpine looks like a good choice. I only need a script or two to quickly spin up some throwaway VMs, but maybe virt-manager is also good enough for that.