Updated - Vagrant on Windows path limit fix

I previously shared my experience using PuPHPet to host a Linux VM on my Windows computer for MEAN stack development. Since then I've made some improvements to the startup script I use to overcome Windows's 260 character path limit, which npm and bower easily exceed.
Here's the latest script (and another nod to the GitHub discussion that started it):
#!/bin/bash
BASE_FOLDER="/var/tmp/windows-path-limit-fix/"
create()
{
# Generate a unique but predictable directory by hashing the folder mount point
# From http://stackoverflow.com/a/1602389
name=`echo $1 | md5sum | cut -f1 -d" "`
destination="$BASE_FOLDER$name"
# Skip setup if the folder already exists
if [ ! -d "$destination" ]; then
echo "Creating mount destination: $destination"
eval "mkdir -p $destination"
eval "chown -R www-data:www-data $destination"
eval "chmod 775 $destination"
fi
if [ -d "$1" ]; then
echo "Transferring files from $1 to $destination"
rsync -Lr --inplace $1/ $destination/
else
echo "Creating mount target: $1"
eval "mkdir -p $1"
fi
echo "mounting $destination at $1"
eval "mount -o bind $destination $1"
}
if [ ! "$1" -o -z "$1" ]; then
echo "You must specify a folder mount point (recommend an absolute path)"
else
create $1
fiAnd the updated method for calling it:
config.vm.provision :shell, :path => 'puphpet/shell/install-ruby.sh'
config.vm.provision :shell, :path => 'puphpet/shell/install-puppet.sh'
config.vm.provision :shell, run: 'always' do |s| s.path = 'puphpet/shell/windows-path-limit-fix.sh' s.args = '/vagrant/node_modules'endconfig.vm.provision :shell, run: 'always' do |s| s.path = 'puphpet/shell/windows-path-limit-fix.sh' s.args = '/vagrant/.bower-tmp'end
config.vm.provision :puppet do |puppet|
puppet.facter = {
'ssh_username' => "#{ssh_username}",
'provisioner_type' => ENV['VAGRANT_DEFAULT_PROVIDER'],
'vm_target_key' => 'vagrantfile-local',
}While the old script got the job done, it had many inconveniences. The new version makes several improvements:
- Temporary files are stored in
/var/tmpinstead of/tmp, meaning they persist after the VM is restarted. - Building on that, the temporary directory name is now a hash of the mount point instead of choosing a new name every time. This allows us to detect when the directory is already present then remount it.
- The updated provisioner syntax in the
Vagrantfilecauses the script to run duringvagrant reloadin addition to the usualvagrant up.
These updates avoid repeated setup of the mounted directories. No more npm install after every reload!

