Created
October 16, 2015 13:45
-
-
Save newtonlabs/59fa3cbbe0bf41f609d7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# This script will mount /Users in the boot2docker VM using NFS (instead of the | |
# default vboxsf). It's probably not a good idea to run it while there are | |
# Docker containers running in boot2docker. | |
# | |
# Usage: sudo ./boot2docker-use-nfs.sh | |
# | |
machine_env=$1 | |
function log() { | |
level=$1 | |
shift | |
echo [canvas] $level: $@ | |
} | |
sudo -k | |
docker-machine ssh ${machine_env} << EOF | grep "already mounted" &> /dev/null | |
mount | grep nfs > /dev/null && \ | |
echo "/Users already mounted with NFS" && \ | |
exit | |
EOF | |
if [ "$?" == "0" ] | |
then | |
log Info "/Users already mounted with NFS" | |
exit | |
fi | |
if [ "$EUID" != "0" ]; then | |
log Info "mounting with NFS requires sudo password..." | |
sudo "$0" "$@" | |
fi | |
if [ "$USER" != "root" ] | |
then | |
exit -1 | |
fi | |
# Run command as non root http://stackoverflow.com/a/10220200/96855 | |
B2D_IP=$(sudo -u ${SUDO_USER} docker-machine ip ${machine_env}) | |
if [ "$B2D_IP" == "" ] | |
then | |
sudo -u ${SUDO_USER} docker-machine start ${machine_env} | |
eval "$(sudo -u ${SUDO_USER} docker-machine env ${machine_env})" | |
B2D_IP=$(sudo -u ${SUDO_USER} docker-machine ip ${machine_env} &> /dev/null) | |
# echo "You need to start boot2docker first: boot2docker up && \$(boot2docker shellinit) " | |
#exit -1 | |
fi | |
OSX_IP=$(ifconfig en0 | grep --word-regexp inet | awk '{print $2}') | |
MAP_USER=${SUDO_USER} | |
MAP_GROUP=$(sudo -u ${SUDO_USER} id -n -g) | |
RESTART_NFSD=0 | |
EXPORTS_LINE="/Users -mapall=${MAP_USER}:${MAP_GROUP} ${OSX_IP}" | |
grep "$EXPORTS_LINE" /etc/exports > /dev/null | |
if [ "$?" != "0" ] | |
then | |
RESTART_NFSD=1 | |
# Backup exports file | |
$(cp -n /etc/exports /etc/exports.bak) && \ | |
echo "Backed up /etc/exports to /etc/exports.bak" | |
# Delete previously generated line if it exists | |
grep -v '^/Users ' /etc/exports > /etc/exports | |
# We are using the OS X IP because the b2d VM is behind NAT | |
echo "$EXPORTS_LINE" >> /etc/exports | |
fi | |
NFSD_LINE="nfs.server.mount.require_resv_port = 0" | |
grep "$NFSD_LINE" /etc/nfs.conf > /dev/null | |
if [ "$?" != "0" ] | |
then | |
RESTART_NFSD=1 | |
# Backup /etc/nfs.conf file | |
$(cp -n /etc/nfs.conf /etc/nfs.conf.bak) && \ | |
echo "Backed up /etc/nfs.conf to /etc/nfs.conf.bak" | |
echo "nfs.server.mount.require_resv_port = 0" >> /etc/nfs.conf | |
fi | |
if [ "$RESTART_NFSD" == "1" ] | |
then | |
log Info "Restarting nfsd" | |
nfsd update 2> /dev/null || (nfsd start && sleep 5) | |
fi | |
sudo -u ${SUDO_USER} docker-machine ssh ${machine_env} << EOF | |
echo "Unmounting /Users" | |
sudo umount /Users 2> /dev/null | |
echo "Starting nfs-client" | |
sudo /usr/local/etc/init.d/nfs-client start 2> /dev/null | |
echo "Mounting /Users" | |
sudo mount $OSX_IP:/Users /Users -o rw,async,noatime,rsize=32768,wsize=32768,proto=tcp,nfsvers=3 | |
echo "Mounted /Users:" | |
ls -al /Users | |
EOF | |
sudo -k | |
exit |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment