Set up and use a network of local development VMs
... using Vagrant to manage VirtualBox VMs. (The author of this documentation wasted a lot of time trying to get Vagrant to work with KVM/libvirt. Issues with networking that looked like guest misconfigurations vanished after changing to the better-tested combination of Vagrant and VirtualBox.)
This requires NixOS. Nix without the OS will not work.
Use the local development environment
-
Add VirtualBox to your NixOs system configuration at
/etc/nixos/configuration.nix
:virtualisation.virtualbox.host.enable = true; # Save bytes and build time, optional but recommended: virtualisation.virtualbox.host.headless = true;
-
Enter the morph local grid directory:
cd morph/grid/local
-
Enter the project's nix-shell:
nix-shell ../../../shell.nix
-
Build and start the VMs:
VAGRANT_DEFAULT_PROVIDER=virtualbox vagrant up
-
Then, add the Vagrant SSH configuration to your user's
~/.ssh/config
file:install -d ~/.ssh ; vagrant ssh-config >> ~/.ssh/config
Latest Morph honors the SSH_CONFIG_FILE
environment variable (since 3f90aa88 (March 2020, v 1.5.0)), so in the future this should get a bit more convenient.
-
Create a
public-keys/users.nix
file with your SSH key (seepublic-keys/users.nix.example
for the format) so you'll be able to log in after deploying the new configuration:$EDITOR public-keys/users.nix
-
Then, build and deploy our software to the Vagrant VMs:
morph build grid.nix morph push grid.nix morph deploy grid.nix boot vagrant halt vagrant up morph upload-secrets grid.nix
You should now be able to log in with the users and keys you set in your users.nix
file.