For bsd the resolve_host_path capability is a no-op. For darwin
hosts, if firmlinks are defined on the system, paths will be properly
resolved to real path.
Using the resolve_host_path capability allows hosts to modify the
shared folder directory while keeping the logic contained within
the specific host implementation.
On OS X 10.15, / is read-only and paths inside of /Users (and elsewhere)
are mounted via a "firmlink" (which is a new invention in APFS). These
must be resolved to their full path to be shareable via NFS.
/Users/johnsmith/mycode => /System/Volumes/Data/Users/johnsmith/mycode
We check to see if a path is mounted here with `df`, and prepend it.
Firmlinks are only createable by the OS and this wasn't supposed to be
visible to applications anyway:
https://developer.apple.com/videos/play/wwdc2019/710/?time=481
Prior to this commit, the BSD options for the /etc/exports file was not
properly set up in the correct order for a given entry. It was however
fixed for FreeBSD, but never for the original exports template. This
commit fixes that by unifying the BSD and FreeBSD templates.
With a synced folder configuration like so:
synced_folder ".", "/vagrant", :nfs => true
synced_folder "#{ENV['HOME']}/mirror", "/mirror", :nfs => true
synced_folder ENV['HOME'], "/home/#{ENV['USER']}", :nfs => true
on OSX, vagrant writes two overlapping exports to /etc/exports
which then fail the export check.
Iterating through the list of folders lexically builds a correct, single
exports entry.
Signed-off-by: Teemu Matilainen <teemu.matilainen@iki.fi>
mapall= and maproot= are mutually exclusive options. Currently, when trying to use maproot=, mapall= is getting automatically added, which prevents us from using the NFS mount. This change turns off the adding of mapall= if maproot= has been specified as an option.