Introduction
Introduction Statistics Contact Development Disclaimer Help
Title: My NixOS workflow after migrating from OpenBSD
Author: Solène
Date: 24 September 2022
Tags: openbsd nixos life
Description: This article tells my journey migrating my computers from
OpenBSD to NixOS
# Introduction
After successfully switching my small computer fleet to NixOS, I'd like
to share about the journey.
I currently have a bunch of computers running NixOS:
* my personal laptop
* the work laptop
* home router
* home file server
* some home lab computer
* e-mail / XMPP / Gemini server hosted at openbsd.amsterdam
That sums up to 6 computers running NixOS, half of them is running the
development version, and the other is running the latest release.
# Migration
## From OpenBSD to NixOS
All the computers above used to run OpenBSD, let me explain why I
migrated. It was a very complicated choice for me, because I still
like OpenBSD despite I uninstalled it.
* NixOS offers more software choice than OpenBSD, this is especially
true for recent software, and porting them to OpenBSD is getting
difficult over time.
* After spending too much time with OpenBSD, I wanted to explore a
whole new world, NixOS being super different, it was a good
opportunity. As a professional IT worker, it's important for me to
stay up to date, Linux ecosystem evolved a lot over that past ten
years. What's funny is OpenBSD and NixOS share similar issues such as
not being able to use binaries found on the Internet (but for various
reasons)
* NixOS maintenance is drastically reduced compared to OpenBSD
* NixOS helps me to squeeze more from my hardware (speed, storage
capacity, reliability)
* systemd: I bet this one will be controversial, but since I learned
how to use it, I really like it (and NixOS make it even greater for
writing units)
Security is hard to measure, but it's the main argument in favor of
OpenBSD, however it is possible to enable mitigations on Linux as well
such as hardened memory allocator or a hardened Kernel. OpenBSD isn't
practical to separate services from running all in the same system,
while on Linux you can easily sandbox services. In the end, the
security mechanisms are different, but I feel the result is pretty
similar for my threat model of protecting against script kiddies.
I give a bonus point for Linux for its ability to account
CPU/Memory/Swap/Disk/network per user, group and process. This allows
spotting unusual activity. Security is about protection, but also
about being aware of intrusion, OpenBSD isn't very good at it at the
moment.
## NixOS modules
One issue I had migrating my mail server and the router was to find
what changes were made in /etc. I was able to figure which services
were enabled, but not really all the steps done a few years ago to
configure them. I had to scrape all the configuration file to see if
it looked like verbatim default configuration or something I changed
manually.
This is where NixOS shines for maintenance and configuration,
everything is declarative, so you never touch anything in /etc. At
anytime, even in a few years, I'll be able to exactly tell what I need
for each service, without having to dig up /etc/ and compare with
default files. This is a saner approach, and also ease migration
toward another system (OpenBSD? ;) ) because I'd just have to apply
these changes to configuration files.
# Workflow
Working with NixOS can be disappointing. Most of the system is
read-only, you need to learn a new language (Nix) to configure
services, you have to "rebuild" your system to make a change as simple
as adding an entry in /etc/hosts, not very "Unix-like".
Your biggest friend is the man page configuration.nix which contains
all the possible configurations settings available in NixOS, from
Kernel choice and grub parameters, to Docker containers started at boot
or your desktop environment.
The workflow is pretty easy, take your configuration.nix file, apply
changes to it, and run "nixos-rebuild test" (or switch if you prefer)
to try the changes. Then, you may want something more elaborated like
tracking your changes in a git or darcs repository, and start sharing
pieces of configuration between machines.
But in the end, you just declare some configuration. I prefer to keep
my configurations very easy to read, I still don't have any modules or
much variable, the common pieces are just .nix files imported for the
systems needing it. It's super easy to track and debug.
# Bento
Bento GitHub project page
After a while, I found it very tedious to have to run nixos-rebuild on
each machine to keep them up to date, so I started using the
autoUpgrade module which basically do it for you in a scheduled task.
But then, I needed to centralize each configuration file somewhere, and
have fun with ssh keys because I don't like publishing my configuration
files publicly. Which isn't optimal either as if you make a change
locally, you need to push the changes and connect to the remote host to
pull the changes and rebuild immediately instead of waiting for the
auto upgrade process.
So, I wrote bento, which allows me to manage all the configuration
files in a single place, but better than that, I can build the
configuration locally to ensure they will work once shipped. I quickly
added a way to track the status of each remote system to be sure they
picked up and applied the changes (every 10 minutes). Later, I
improved the network efficiency by central management computer as a
local binary cache, so other systems are now downloading packages from
it locally, instead of downloading them again from the Internet.
The coolest thing ever is that I can manage offline systems such as my
work laptop, I can update its configuration file in the weekend for an
update or to improve the environment (it mostly shares the same
configuration as my main laptop), and it will automatically pick it up
when I boot it.
# Conclusion
Moving to NixOS was a very good and pleasant experience, but I had some
knowledge about it before starting. It might be confusing a lot of
people, and you certainly need to get into NixOS mindset to appreciate
it.
You are viewing proxied material from dataswamp.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.