Skip to content
Snippets Groups Projects

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

  1. 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;
  2. Enter the morph local grid directory:

    cd morph/grid/local
  3. Enter the project's nix-shell:

    nix-shell ../../../shell.nix
  4. Build and start the VMs:

    VAGRANT_DEFAULT_PROVIDER=virtualbox vagrant up
  5. 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.
  1. Create a public-keys/users.nix file with your SSH key (see public-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
  2. 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.