Skip to content

Continued: Fix for handling in case of multiple mounts / paths && merged changes from Yasushi/winnfsd

Pre-release
Pre-release
Compare
Choose a tag to compare
@das-peter das-peter released this 02 May 12:14
· 0 commits to master since this release

Continued the attempt fixing winnfsd#13
There was still an issue with the siblings iteration on the top-level mounts.
Should work better now.

Further the changes from the https://github.com/Yasushi/winnfsd fork were merged.
Which should fix some path alias handling issues: Yasushi#4

Below you can find the vagrantfile we use to patch vagrant-winnfsd on the fly to:

  • Use the current binary
  • Use the new mounting syntax
  • Write config into the user- instead the program-directory to avoid problems with windows UAC.
# The code in the condition is only needed when the machine is built / reloaded.
if ARGV[0] == "up" || ARGV[0] == "reload" then

  # Windows check.
  is_windows = (RbConfig::CONFIG['host_os'].match(/mswin|mingw|cygwin/i))

  # If this is Windows make sure the NFS stuff can work.
  if (is_windows)
    # Because the program files directory isn't necessarily writable (UAC) and so
    # on, we patch up the vagrant-winnfs plugin to use the vagrant user directory.
    # Created a pull request with the change:
    # https://github.com/winnfsd/vagrant-winnfsd/pull/85
    puts "Patching plugin vagrant-winnfsd"
    patching_file = Vagrant.user_data_path.join("gems/gems/vagrant-winnfsd-1.1.0/lib/vagrant-winnfsd/cap/nfs.rb")
    puts "   Patching config location"
    if File.exist?(patching_file)
      File.write(patching_file, File.open(patching_file,&:read).gsub("\"\#{Vagrant.source_root}/nfspaths\"","\"\#{Vagrant.user_data_path}/nfspaths\""))
      puts "    -> done"
    end

    # Download our own binary because the current 1.0.1 version has issues.
    binary_file = Vagrant.user_data_path.join("gems/gems/vagrant-winnfsd-1.1.0/bin/winnfsd.exe")
    puts "   Patching binary"
    require "digest"
    checksum = Digest::MD5.file(binary_file).hexdigest
    if !checksum.eql? "90db3d0e1695a069891936ece23287da"
      if File.exist?(binary_file)
        if File.writable?(binary_file)
          # Use open-uri because it follows redirects.
          require "open-uri"
          open("https://github.com/CandoImage/winnfsd/releases/download/2.0.3-beta/winnfsd.exe") {|f|
             File.open(binary_file,"wb") do |file|
               file.puts f.read
             end
          }
          puts "    -> done"
        else
          puts "    -> Failed, file not writable."
        end
      end
    else
      puts "    -> Already done - skip binary download."
    end
    # Adjust mounting in the new version.
    patching_file = Vagrant.user_data_path.join("gems/gems/vagrant-winnfsd-1.1.0/lib/vagrant-winnfsd/synced_folder.rb")
    puts "   Patching mount syntax"
    if File.exist?(patching_file)
      File.write(patching_file, File.open(patching_file,&:read).gsub(".gsub(':', '')","").gsub("= '/' +","="))
      puts "    -> done"
    end

  end
end