A Vagrant plugin to automate bindfs mount in the VM. This allow you to change owner, group and permissions on files and, for example, work around NFS share permissions issues.
People often recommend switching to vagrant's VMWare-fusion provider. This reportedly has better performance, but shares with symlinks won't work. You also have to buy both the plugin and VMWare-fusion.
The final recommendation, at least on Linux/OSX hosts, is to use nfs.
However, an NFS mount has the same numeric permissions in the guest as in the host.
If you're on OSX, for instance, a folder owned by the default OSX user will appear to be owned by
501:20 in the guest.
This is where
vagrant-bindfs comes in!
- mount your share over NFS into a temporary location in the guest
- re-mount the share to the actual destination with
vagrant-bindfs, setting the correct permissions
map_gid NFS options can be used to set the identity used to read/write files on the host side.
Vagrant-bindfs is distributed as a Ruby gem.
You can install it as any other Vagrant plugin with
vagrant plugin install vagrant-bindfs.
config.bindfs.bind_folder to configure folders that will be binded on VM startup.
The format is:
config.bindfs.bind_folder "/path/to/source", "/path/to/destination", options
Vagrant::Config.run do |config| [...] # Your VM configuration ## Basic usage config.bindfs.bind_folder "source/dir", "mount/point" ## Advanced options config.bindfs.bind_folder "source/dir", "mount/point", :perms => "u=rw:g=r:o=r", :create_as_user => true ## Complete example for a NFS shared folder # Static IP is required to use NFS shared folder config.vm.network "private_network", ip: "192.168.50.4" # Declare shared folder with Vagrant syntax config.vm.synced_folder "host/source/dir", "/vagrant-nfs", :type => :nfs # Use vagrant-bindfs to re-mount folder config.bindfs.bind_folder "/vagrant-nfs", "guest/mount/point" end
bind_folder supports the following arguments:
:owner(defaults to 'vagrant')
:group(defaults to 'vagrant')
:perms(defaults to 'u=rwX:g=rD:o=rD')
… and following flags (all disabled by default, vagrant-bindfs rely on bindfs own defaults) :
You can overwrite default options via
See bindfs man page for details.
vagrant-bindfs does not check compatibility between given arguments but warn you when a binding command fail or if bindfs is not installed on your virtual machine. On Debian systems, it will try to install bindfs automatically.
If you find this plugin useful, we could use a few enhancements! In particular, capabilities files for installing vagrant-bindfs on systems other than Debian would be useful. We could also use some specs…
If you've made changes to this plugin, you can easily test it locally in vagrant. From the root of the repo, do:
bundle exec vagrant up
This will spin up a default Debian VM and try to bindfs-mount some shares in it.
Feel free to modify the included
Vagrantfile to add additional test cases.