-
-
Save mattes/4d7f435d759ca2581347 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env ruby | |
| # Usage | |
| # $ docker-machine create my-machine123 -d virtualbox | |
| # $ ruby <(curl -L https://git.io/vvvco) my-machine123 | |
| # https://gist.github.com/mattes/4d7f435d759ca2581347 | |
| require 'erb' | |
| bootlocalsh = %Q(#/bin/bash | |
| sudo umount /Users | |
| sudo /usr/local/etc/init.d/nfs-client start | |
| sudo mount -t nfs -o noacl,async <%= vboxnet_ip %>:/Users /Users | |
| ) | |
| if ARGV.length != 1 | |
| puts "usage: #{__FILE__} machine-name" | |
| exit 1 | |
| end | |
| machine_name = ARGV[0] | |
| print "Get vboxnet ip addres ..." | |
| # get host only adapter | |
| vboxnet_name = `VBoxManage showvminfo #{machine_name} --machinereadable | grep hostonlyadapter` | |
| vboxnet_name = vboxnet_name.scan(/"(.*)"/).flatten.first.chomp | |
| if vboxnet_name == '' | |
| puts "error: unable to find name of vboxnet" | |
| exit 1 | |
| end | |
| # get ip addr for vboxnet | |
| vboxnet_ip = '' | |
| vboxnets = `VBoxManage list hostonlyifs`.split("\n\n") | |
| vboxnets.each do |vboxnet| | |
| if vboxnet.scan(/Name: *(.+?)\n/).flatten.first.chomp == vboxnet_name | |
| vboxnet_ip = vboxnet.scan(/IPAddress: *(.*)\n/).flatten.first.chomp | |
| break | |
| end | |
| end | |
| if vboxnet_ip == '' | |
| puts "error: unable to find ip of vboxnet #{vboxnet_name}" | |
| exit 1 | |
| end | |
| print " #{vboxnet_ip}\n" | |
| # create record in local /etc/exports and restart nsfd | |
| machine_ip = `docker-machine ip #{machine_name}`.chomp | |
| puts "Update /etc/exports ..." | |
| `echo '\n/Users #{machine_ip} -alldirs -maproot=root\n' | sudo tee -a /etc/exports` | |
| `awk '!a[$0]++' /etc/exports | sudo tee /etc/exports` # removes duplicate lines | |
| `sudo nfsd restart`; sleep 2 | |
| puts `sudo nfsd checkexports` | |
| # render bootlocal.sh and copy bootlocal.sh over to boot2docker | |
| # (this will override an existing /var/lib/boot2docker/bootlocal.sh) | |
| puts "Update boot2docker virtual machine ..." | |
| bootlocalsh_rendered = ERB.new(bootlocalsh).result() | |
| first = true | |
| bootlocalsh_rendered.split("\n").each do |l| | |
| `docker-machine ssh #{machine_name} 'echo "#{l}" | sudo tee #{first ? '' : '-a'} /var/lib/boot2docker/bootlocal.sh'` | |
| first = false | |
| end | |
| `docker-machine ssh #{machine_name} 'sudo chmod +x /var/lib/boot2docker/bootlocal.sh'` | |
| puts "Restart #{machine_name} ..." | |
| `docker-machine restart #{machine_name}` | |
| puts "Done." | |
| puts | |
| puts "Run `docker-machine ssh #{machine_name} df` to check if NFS is mounted." | |
| puts "Output should include something like this: '#{vboxnet_ip}:/Users [...] /Users'" |
@tonivdv Are you referencing the network settings for NAT or for the Host Only Network in your comments?
@nathanleclaire Sorry that I didn't respond sooner (mentions in gist don't work/notify). I set it for both NAT and Host Only Network. Not sure if one of the two is good enough. I should play with it to really know.
@nathanleclaire I made the test, and only the "Host only adapter" should be changed to PCnet-FAST III to have high performance :)
Thanks, why -maproot=root and not -mapall=USER:GROUP ?
@tomdavidson, it's better USER:GROUP indeed!
I dont know whats better or not, just that I can not manage to get the right permissions of the host volumes for a database with the user & group of mysql to be able to write to the share. What would be the implications of -mapall=USER, with no group?
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/exports.5.html
Currently I have switched mine to use -mapall=uid:gid and that seems to work well for me.
Hi @mattes @tonivdv - You should loop me in on conversations like these, they're relevant to my interests 😉