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> |