Skip to content

Commit

Permalink
add --vm-test mode for local vm tests
Browse files Browse the repository at this point in the history
Update src/nixos-anywhere.sh
  • Loading branch information
Lassulus authored and Mic92 committed Jul 21, 2023
1 parent 11d3803 commit 465e4c8
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 12 deletions.
18 changes: 17 additions & 1 deletion docs/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,23 @@ example uses a local directory on the source machine.
5. On the target machine, make sure you have access as root via ssh by adding
your SSH key to the file `authorized_keys` in the directory `/root/.ssh`

6. You can now run **nixos-anywhere** from the command line as shown below,
6. (Optional) Test your nixos and disko configuration:

The following command will automatically test your nixos configuration and run disko inside a virtual machine, where

- `<path to configuration>` is the path to the directory or repository
containing `flake.nix` and `disk-config.nix`

- `<configuration name>` must match the name that immediately follows the
text `nixosConfigurations.` in the flake, as indicated by the comment in
the
[example](https://github.com/numtide/nixos-anywhere-examples/blob/main/flake.nix)).

```
nix run github:numtide/nixos-anywhere -- --flake <path to configuration>#<configuration name> root@<ip address>
```

7. You can now run **nixos-anywhere** from the command line as shown below,
where:

- `<path to configuration>` is the path to the directory or repository
Expand Down
36 changes: 25 additions & 11 deletions src/nixos-anywhere.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ Options:
URL of the source Nix store to copy the nixos and disko closure from
* --build-on-remote
build the closure on the remote machine instead of locally and copy-closuring it
* --vm-test
build the system and test the disk configuration inside a VM without installing it to the target.
USAGE
}

Expand Down Expand Up @@ -155,7 +157,9 @@ while [[ $# -gt 0 ]]; do
--build-on-remote)
build_on_remote=y
;;

--vm-test)
vm_test=y
;;
*)
if [[ -z ${ssh_connection-} ]]; then
ssh_connection="$1"
Expand Down Expand Up @@ -198,17 +202,19 @@ nix_build() {
"$@"
}

if [[ -z ${ssh_connection-} ]]; then
abort "ssh-host must be set"
fi
if [[ -z ${vm_test-} ]]; then
if [[ -z ${ssh_connection-} ]]; then
abort "ssh-host must be set"
fi

# we generate a temporary ssh keypair that we can use during nixos-anywhere
ssh_key_dir=$(mktemp -d)
trap 'rm -rf "$ssh_key_dir"' EXIT
mkdir -p "$ssh_key_dir"
# ssh-copy-id requires this directory
mkdir -p "$HOME/.ssh/"
ssh-keygen -t ed25519 -f "$ssh_key_dir"/nixos-anywhere -P "" -C "nixos-anywhere" >/dev/null
# we generate a temporary ssh keypair that we can use during nixos-anywhere
ssh_key_dir=$(mktemp -d)
trap 'rm -rf "$ssh_key_dir"' EXIT
mkdir -p "$ssh_key_dir"
# ssh-copy-id requires this directory
mkdir -p "$HOME/.ssh/"
ssh-keygen -t ed25519 -f "$ssh_key_dir"/nixos-anywhere -P "" -C "nixos-anywhere" >/dev/null
fi

# parse flake nixos-install style syntax, get the system attr
if [[ -n ${flake-} ]]; then
Expand All @@ -222,6 +228,14 @@ if [[ -n ${flake-} ]]; then
exit 1
fi
if [[ ${build_on_remote-n} == "n" ]]; then
if [[ -n ${vm_test-} ]]; then
exec nix build \
--print-out-paths \
--no-link \
-L \
"${nix_options[@]}" \
"${flake}#nixosConfigurations.\"${flakeAttr}\".config.system.build.installTest"
fi
disko_script=$(nix_build "${flake}#nixosConfigurations.\"${flakeAttr}\".config.system.build.diskoScript")
nixos_system=$(nix_build "${flake}#nixosConfigurations.\"${flakeAttr}\".config.system.build.toplevel")
fi
Expand Down

0 comments on commit 465e4c8

Please sign in to comment.