Vagrant: Difference between revisions

imported>Samueldr
m Adds link to the nixos box page for the vagrant-nixos-plugin
Adding notes about networking firewall blocking DHCP requests
 
(5 intermediate revisions by 4 users not shown)
Line 2: Line 2:


{{note|This page is about vagrant, see [[Vagrant Box]] for the NixOS vagrant boxes.}}
{{note|This page is about vagrant, see [[Vagrant Box]] for the NixOS vagrant boxes.}}
== NixOS as Host ==
=== Using NFS mounts ===
Add to your <tt>Vagrantfile</tt>:
<syntaxhighlight lang="Ruby">
  # Mount a folder inside the VM.
  config.vm.synced_folder "myfolder/", "/mnt/myfolder", type: "nfs", nfs_version: 4
</syntaxhighlight>
Add to your <tt>configuration.nix</tt>:
<syntaxhighlight lang="nix">
{
  # Minimal configuration for NFS support with Vagrant.
  services.nfs.server.enable = true;
 
  # Add firewall exception for VirtualBox provider
  networking.firewall.extraCommands = ''
    ip46tables -I INPUT 1 -i vboxnet+ -p tcp -m tcp --dport 2049 -j ACCEPT
  '';
  # Add firewall exception for libvirt provider when using NFSv4
  networking.firewall.interfaces."virbr1" = {                                 
    allowedTCPPorts = [ 2049 ];                                             
    allowedUDPPorts = [ 2049 ];                                             
  };   
}
</syntaxhighlight>
This should make NFS mounts work.
{{note|Vagrant will, by default, want to use <code>sudo</code> and modify <tt>/etc/exports</tt>. As long as you are not defining exports with <tt>configuration.nix</tt>, vagrant should be able to work.}}
{{note|Home directories are set not to be world-searchable by default on NixOS. This may lead to a "permission denied" error when trying to mount directories within your home into the VM. You can change this by running <code>chmod a+x ~</code>, but note that this will allow all users on the system to read world-readable files within your home given the paths.}}
{{Warning|Since '''Vagrant 2.3.4 a bug is preventing the mounting of the nfs folders'''. The issue is vagrant try to call System V instead of Systemd in order to get the status of nfs service. For details and '''workaround''' : [https://github.com/hashicorp/vagrant/issues/13296]}}


== Plugins ==
== Plugins ==
Line 8: Line 46:


See [[Vagrant_Box#NixOS_Plugin|the NixOS vagrant box page]], which as information about the <code>vagrant-nixos-plugin</code> project.
See [[Vagrant_Box#NixOS_Plugin|the NixOS vagrant box page]], which as information about the <code>vagrant-nixos-plugin</code> project.
== Troubleshooting:  conflicting dependencies bundler when installing vagrant plugins==
As of 18.03 vagrant plugins are broken:
<syntaxhighlight lang=console>
$  vagrant plugin update
Updating installed plugins...
Bundler, the underlying system Vagrant uses to install plugins,
reported an error. The error is shown below. These errors are usually
caused by misconfigured plugin installations or transient network
issues. The error from Bundler is:
conflicting dependencies bundler (= 1.14.6) and bundler (= 1.16.1)
  Activated bundler-1.16.1
  which does not match conflicting dependency (= 1.14.6)
  Conflicting dependency chains:
    bundler (= 1.16.1), 1.16.1 activated
  versus:
    bundler (= 1.14.6)
  Gems matching bundler (= 1.14.6):
    bundler-1.14.6
</syntaxhighlight>
using the following nix expression fixes the problems:
<syntaxhighlight lang=nix>
(import <nixpkgs> {
    overlays = [
      (self: super: {
        bundler = super.bundler.overrideAttrs (old: {
          name = "bundler-1.16.1";
          src = super.fetchurl {
            url = "https://rubygems.org/gems/bundler-1.16.1.gem";
            sha256 = "1s2nq4qnffxg3kwrk7cnwxcvfihlhxm9absl2l6d3qckf3sy1f22";
          };
        });
      })
    ];
  }).vagrant
</syntaxhighlight>
More information in this [https://github.com/NixOS/nixpkgs/issues/36880 issue]
== Troubleshooting: VM failing to receive IP address ==
If you run <code>vagrant up</code> and your VM is stalling with the message <code>Waiting for domain to get an IP address</code>, your networking firewall may be blocking vagrants DHCP requests. You can allow the requests with the following changes to your configuration.nix file:
<syntaxhighlight lang=nix>
# Trust libvirt bridge interfaces for VM networking (required for Vagrant DHCP)
networking.firewall.trustedInterfaces = [ "virbr0" "virbr1" "virbr2" ];
# Don't let NetworkManager manage libvirt bridges (prevents conflicts)
networking.networkmanager.unmanaged = [ "virbr0" "virbr1" "virbr2" ];
</syntaxhighlight>