What is the best method for implementing Vagrant NFS "synced folders" between host and VM?
I was finally able to get NFS working, in general, but it required several tweaks within the VM; and I'm not sure how to automate those changes for others to use.
Specifically, I have to modify the UID/GID in /etc/passwd and /etc/group to match those of the user/group of the exported filesystem. (e.g. host machine uses 502:20, VM apache user must be set to use 502:20 as well)
Without this change, I have all kinds of permission/ownership issues that prevent the web app from running. With the UID/GID matching, everything works great.
I've read all the docs I could find, including the Vagrant web site.
As a side note: I also tried native folder sync (painfully slow) and rsync (100% CPU... unusable)
NFS seems like the winner for performance, but my setup is sketchy.
If it makes any difference, I'm working with the following:
In Vagrantfile you can assign the current uid/gid to the nfs mapping. (See on host /etc/exports after provisioning.)
config.nfs.map_uid = Process.uid
config.nfs.map_gid = Process.gid
With Puppet as provisioner you can facter these values:
config.vm.provision :puppet, :facter => {
"host_uid" => config.nfs.map_uid,
"host_gid" => config.nfs.map_gid,
} do |puppet| ...
So you can use it in puppet scope like variables e.g.
user { "www-data":
ensure => present,
uid => $::host_uid,
gid => $::host_gid,
}
I think in chef the custom json option is the equivalent to use it later in chef recipes
Vagrant.configure("2") do |config|
config.vm.provision "chef_solo" do |chef|
# ...
chef.json = {
"map" => {
"uid" => config.nfs.map_uid,
"gid" => config.nfs.map_gid
}
}
end
end