nix: add development vm

This commit adds back the ability to run a development VM with docspell.
See updated documentation for examples.
This commit is contained in:
Vladimir Timofeenko 2022-12-23 18:57:34 -08:00
parent 8f8adad595
commit eca08c7416
4 changed files with 67 additions and 29 deletions

View File

@ -15,7 +15,7 @@ in
i18n = { i18n = {
defaultLocale = "en_US.UTF-8"; defaultLocale = "en_US.UTF-8";
}; };
console.keyMap = "de"; console.keyMap = "us";
users.users.root = { users.users.root = {
password = "root"; password = "root";
@ -88,6 +88,9 @@ in
firewall.allowedTCPPorts = [ 7880 ]; firewall.allowedTCPPorts = [ 7880 ];
}; };
system.stateVersion = "22.05"; system.stateVersion = "22.11";
# This slows down the build of a vm
documentation.enable = false;
} }

28
nix/dev-vm/default.nix Normal file
View File

@ -0,0 +1,28 @@
# NOTE: modulesPath and imports are taken from nixpkgs#59219
{ modulesPath, pkgs, lib, ... }: {
imports = [ (modulesPath + "/virtualisation/qemu-vm.nix") ];
services.openssh = {
enable = true;
permitRootLogin = "yes";
};
services.docspell-restserver = {
openid = lib.mkForce [ ];
backend = lib.mkForce {
signup = {
mode = "open";
};
};
};
# Otherwise oomkiller kills docspell
virtualisation.memorySize = 2048;
virtualisation.forwardPorts = [
# SSH
{ from = "host"; host.port = 64022; guest.port = 22; }
# Docspell
{ from = "host"; host.port = 64080; guest.port = 7880; }
];
}

View File

@ -115,5 +115,20 @@
joex = ((import ./modules/joex.nix) self.overlays.default); joex = ((import ./modules/joex.nix) self.overlays.default);
}; };
nixosConfigurations =
let
lib = nixpkgs.lib;
in
{
dev-vm = lib.makeOverridable nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
self.nixosModules.default
./checks
# nixos-shell specific module. Should be kept outside nix flake checks
./dev-vm
];
};
};
}; };
} }

View File

@ -126,43 +126,35 @@ warnings should also be fixed.
# Nix Expressions # Nix Expressions
The directory `/nix` contains nix expressions to install docspell via The directory `/nix` contains Nix Flake to install docspell via
the nix package manager and to integrate it into NixOS. the nix package manager and to integrate it into NixOS.
## Testing NixOS Modules Flake implements `checks` output which can be run with `nix flake check`
and it defines a development VM which can be used to interactively work
with docspell.
The modules can be build by building the `configuration-test.nix` file To run the VM, issue:
together with some nixpkgs version. For example:
```bash ```bash
nixos-rebuild build-vm -I nixos-config=./configuration-test.nix \ cd $PROJECT_ROOT/nix
-I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.09.tar.gz nix run '.#nixosConfigurations.dev-vm.config.system.build.vm
``` ```
This will build all modules imported in `configuration-test.nix` and To open docspell, wait for docspell-restserver service to report that
create a virtual machine containing the system. After that completes, http listener is up and connect to `localhost:64080`.
the system configuration can be found behind the `./result/system`
symlink. So it is possible to look at the generated systemd config for To ssh into the machine, run:
example:
```bash ```bash
cat result/system/etc/systemd/system/docspell-joex.service ssh -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-p 64022 root@localhost
``` ```
And with some more commands (there probably is an easier way…) the Once connected to the machine, you can see the docspell config file via
config file can be checked:
```bash ```bash
cat result/system/etc/systemd/system/docspell-joex.service | grep ExecStart | cut -d'=' -f2 | xargs cat | tail -n1 | awk '{print $NF}'| sed 's/.$//' | xargs cat | jq systemd-show docspell-joex.service | grep ExecStart | cut -d'=' -f2 | xargs cat | tail -n1 | awk '{print $NF}'| sed 's/.$//' | xargs cat | jq
```
To see the module in action, the vm can be started (the first line
sets more memory for the vm):
``` bash
export QEMU_OPTS="-m 2048"
export QEMU_NET_OPTS "hostfwd=tcp::7880-:7880"
./result/bin/run-docspelltest-vm
``` ```
# Release # Release