Software For My New Home Server

12 points by abnercoimbre a day ago on lobsters | 14 comments

splitbrain | 23 hours ago

When I replaced my Synology I had exactly the same thoughts as the author. I considered TrueNAS and the the other pre-made NAS operating systems, but in the end decided to run NixOS as the base system (first time I used it) and run all my services via Docker compose on top of it. I described my setup here: https://www.splitbrain.org/blog/2025-08/03-diy_nas_on_nixos

BTW. what ever came out of the discussion of having a homelab or selfhost tag? This would be a good fit.

what ever came out of the discussion of having a homelab or selfhost tag

Some taxonomical issues around naming, but really it doesn't come up so often.

[OP] abnercoimbre | 16 hours ago

Kinda chicken-and-egg though. I've refrained from more homelab posts due to the dilemma of choosing appropriate tags. My other comment shows I failed even with this submission!

jaredkrinke | a day ago

On the off chance the author is here, it would be nice to show some example service shell scripts. I’m curious how much beyond a shebang and single command line is involved.

duncaen | 22 hours ago

I think the author calling it boilerplate does it a disservice, the service scripts as bare minimum just exec into the program. The most "boilerplate" is redirecting stderr to stdout, because runit by default sends stdout to a corresponding log service and stderr goes to the parent process/console. And the [ -r conf ] && . ./conf pattern which is used in some services to pass options or environment variables to the service, without having to edit the service script itself.

Here is the service for sshd:

#!/bin/sh
exec 2>&1
ssh-keygen -A >/dev/null 2>&1 # Will generate host keys if they don't already exist
[ -r conf ] && . ./conf
exec /usr/bin/sshd -D $OPTS

nginx:

#!/bin/sh
exec 2>&1
exec nginx -g 'daemon off;'

nathangrigg | 13 hours ago

Hi, I’m the author, and thanks for providing a couple of examples.

I agree with you, the boilerplate is not excessive, and I didn’t really mean it as a pejorative.

And to jaredkrinke, the scripts rarely get more than a half-dozen lines. Here is one of my run scripts for a uwsgi python app that needs to set up a /run directory for a socket, and run as a less privileged user.

#!/bin/sh
exec 2>&1
install -d -o fava -g nginx -m 2770 /run/fava
exec chpst -u fava:fava /opt/fava/venv/bin/uwsgi --ini /etc/fava/uwsgi.ini

[OP] abnercoimbre | a day ago

I tagged with systemd to emphasize its absence: this author went for Void Linux! I'm intrigued by the surge in interest. I don't know why it's happening (though I'm sure it's a well-maintained distro.)

hawski | a day ago

That could also dampen the interest of people disinterested in systemd and interested as well.

Void for sure feels less corporate and more frugal hacker friendly. With how things develop lately when many things feel fake or too complex Void doesn't.

xilef | 19 hours ago

To me it feels (and builds) like my preferred FreeBSD, except with the hardware support my laptop needs

jaredkrinke | 19 hours ago

I haven’t personally tried it, but you might also find Chimera Linux interesting: https://chimera-linux.org/

Void is amazing, and as the author mentions, runit is an excellent init system. The lightning speed boot times are incredible, and system service management is just so simple. I used void for many years, but recently switched to Alpine. They are both great linux systems, and if I could have one thinbg, it would be Alpine linux with the runit (or dinit from chimera) init system.

trousers | 23 hours ago

I do something similar - docker containers for most services, but using alpine instead of void.
It has worked out very well!

s00ner | 5 hours ago

I also run Alpine on my home server and use podman for service containers. It's rock solid and dead simple. Apk is the fastest package manager I've ever used.

oceanhaiyang | 7 hours ago

Feel like this article has no meat to it. I only got they built a new server and put void on it. Great?