I’m trying to build sd card images for raspberry pi but the build itself is a bit finicky and not very reliable. I was trying to find a good way to build NixOS locally on a system without NixOS to then try it out either in VM or docker but both of these have some issues of their own and seem generally a bit advanced or not very used.
What do people usually do to test out new services/configuration changes? Do you just do
nixos-rebuild switch and if there are any issues just roll back?
Is there any reliable way to test a nix configurutation out locally/in VM/in docker before deploying it?
There are many more options than just the
switch. If you take a look at the man page of
nixos-rebuild you can see that there is the
build option for example. Or maybe more fitting there is the
buid-vm option where you could test the system before deploying it on the rpi. There are also the
test options that could apply to your situation but just take a look at the man-page.
Hope that was helpful!
nixos-rebuild build-vm, as @lovirent mentions, but that indeed does not work on non-NixOS systems.
If I wanted to support non-NixOS systems, I’d add an
app to my flake that builds a generic qemu image using nixos-generators and then runs it with a simple script. Which is basically what
nixos-rebuild build-vm does, except it doesn’t rely on the host having a nix store.
Or just switch to NixOS for development,
build-vm is incredibly useful. You can still write a custom script for convenient access via a nix flake, in this case I make some small changes (e.g. not including
hardware-configuration.nix) to the VM target so that I can test the software without having underlying hardware/networking quirks get in the way.
If you want to run tests, that’s an option too. There’s even a convenient helper library in the nixpkgs repo, though it’s not really designed to help test a system configuration. Still, I’ve written an integration test or two with that before.
You might also find deploy-rs with its auto-rollback and pre-deployment test features interesting.
I did not think about it not working on non nixos,
thanks for clarifying that