diff --git a/plugins/guests/arch/cap/nfs.rb b/plugins/guests/arch/cap/nfs.rb new file mode 100644 index 000000000..116256ed2 --- /dev/null +++ b/plugins/guests/arch/cap/nfs.rb @@ -0,0 +1,35 @@ +module VagrantPlugins + module GuestArch + module Cap + class NFS + def self.nfs_client_installed(machine) + machine.communicate.test("pacman -Q nfs-utils") + end + + def self.nfs_pre(machine) + comm = machine.communicate + + # There is a bug in NFS where the rpcbind functionality is not started + # and it's not a dependency of nfs-utils. Read more here: + # + # https://bbs.archlinux.org/viewtopic.php?id=193410 + # + comm.sudo <<-EOH.gsub(/^ {12}/, "") + set -e + systemctl enable rpcbind + systemctl start rpcbind + EOH + end + + def self.nfs_client_install(machine) + comm = machine.communicate + comm.sudo <<-EOH.gsub(/^ {12}/, "") + set -e + pacman --noconfirm -Syy + pacman --noconfirm -S nfs-utils ntp + EOH + end + end + end + end +end diff --git a/plugins/guests/arch/plugin.rb b/plugins/guests/arch/plugin.rb index 6b678d763..440917754 100644 --- a/plugins/guests/arch/plugin.rb +++ b/plugins/guests/arch/plugin.rb @@ -20,6 +20,21 @@ module VagrantPlugins require_relative "cap/configure_networks" Cap::ConfigureNetworks end + + guest_capability(:arch, :nfs_client_install) do + require_relative "cap/nfs" + Cap::NFS + end + + guest_capability(:arch, :nfs_client_installed) do + require_relative "cap/nfs" + Cap::NFS + end + + guest_capability(:arch, :nfs_pre) do + require_relative "cap/nfs" + Cap::NFS + end end end end diff --git a/plugins/synced_folders/nfs/synced_folder.rb b/plugins/synced_folders/nfs/synced_folder.rb index 8fe0f69c3..f75cc8f4a 100644 --- a/plugins/synced_folders/nfs/synced_folder.rb +++ b/plugins/synced_folders/nfs/synced_folder.rb @@ -101,8 +101,16 @@ module VagrantPlugins end # Mount them! - machine.guest.capability( - :mount_nfs_folder, nfsopts[:nfs_host_ip], mount_folders) + if machine.guest.capability?(:nfs_pre) + machine.guest.capability(:nfs_pre) + end + + machine.guest.capability(:mount_nfs_folder, + nfsopts[:nfs_host_ip], mount_folders) + + if machine.guest.capability?(:nfs_post) + machine.guest.capability(:nfs_post) + end end def cleanup(machine, opts)