Created
June 17, 2013 18:26
-
-
Save afragen/5799030 to your computer and use it in GitHub Desktop.
Call in launchd plist to run at user login to automatically mount a disk. Example usage iTunes Library stored on NAS.
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
#!/usr/bin/env bash | |
# call with `mount.sh true` for debug messages | |
version="1.0" | |
dbg=false | |
home_vols=( "/Volumes/iTunes" "/Volumes/Drobo" ) # order is important | |
webdav_vols=( "/Volumes/user1" "/Volumes/user2" "/Volumes/user3" ) | |
home_router_mac="mac-address-here" | |
# how to grab drobo_ip based upon drobo mac address using `netstat -rnf inet` | |
drobo_mac="mac-address-here" | |
drobo_ip=`netstat -rnf inet | grep $drobo_mac | awk {'print$1'}` | |
crashplan_server="mini-server" | |
media_server="mini-server" | |
mounts=( `mount | grep /Volumes | awk {'print$3'}` ) | |
router_ip=`netstat -rnf inet | grep default | awk {'print$2'}` | |
router_mac=`netstat -rnf inet | grep -v link | grep -w ^$router_ip | awk {'print$2'}` | |
#test for any parameter, true if debugging | |
#test -n "$1" && dbg=$1 || dbg=false #;dbg=true | |
case "$1" in | |
"" ) ;; #if no parameter then run script | |
-v|--version ) echo $0" "v$version && exit 0 ;; | |
-d|--debug ) dbg=true ;; | |
*) echo -e "-v or --version for version number\n-d or --debug for debug info" ;; | |
esac | |
function debug { | |
[ $dbg == true ] && echo $1 | |
} | |
function on_error { | |
echo "errno $1" | |
echo "rmdir $vol" | |
rmdir $vol | |
isMounted=false | |
} | |
function un_mount { | |
for mount in ${mounts[@]}; do | |
for vol in ${home_vols[@]}; do | |
[ $mount == $vol ] && mount | grep afp | grep $mount | awk {'print$3'} | xargs -t umount -f | |
done | |
for vol in ${webdav_vols[@]}; do | |
[ $mount == $vol ] && mount | grep http | grep $mount | awk {'print$3'} | xargs -t umount -f | |
done | |
done | |
run_iTunes | |
exit $? | |
} | |
function mount_disk { | |
run_iTunes | |
echo "trying to mount $vol as $1" | |
mkdir $vol | |
case "$1" in | |
"afp_rw" ) mount_afp afp://$drobo_ip/Drobo/$2 $vol ;; | |
"afp_ro" ) mount_afp -o rdonly afp://$drobo_ip/Drobo/$2 $vol ;; | |
#"webdav" ) mount_webdav http://host.com/webdav/$2 $vol ;; | |
*) echo "Usage: mount_disk [afp_rw|afp_ro|webdav] ['iTunes|webdav_disk']" ;; | |
esac | |
test $? != 0 && on_error $? | |
} | |
function run_iTunes { | |
[[ `mount | grep /Volumes | awk {'print$3'} | grep -Ec "(/Volumes/DroboShare)"` -ge 0 ]] && isMounted=false | |
[[ `mount | grep /Volumes | awk {'print$3'} | grep -Ec "(/Volumes/iTunes|/Volumes/Drobo$)"` -gt 0 ]] && isMounted=true | |
# startup iTunes on media_server | |
if ! $isMounted; then | |
killall -c iTunes | |
fi | |
[[ (`scutil --get ComputerName` == $media_server) && $isMounted ]] && /usr/local/etc/load_myProcess.sh | |
} | |
# if nothing mounted need $vols not empty to try when at home | |
[ -z $mounts ] && mounts=( "zero_mounts" ) | |
debug "Running $0" | |
debug "router: ${router_ip} -- ${router_mac} -- drobo ip: ${drobo_ip}" | |
debug "volumes: `ls /Volumes*`" | |
debug "mounted volumes: `echo ${mounts[@]}`" | |
if [ "$router_mac" == "" ]; then | |
debug "not connected" | |
un_mount | |
fi | |
if ! [ "$router_mac" == $home_router_mac ]; then | |
debug "not at home" | |
un_mount | |
fi | |
if [ $router_mac == $home_router_mac ]; then | |
debug "at home" | |
run_iTunes | |
for mount in ${mounts[@]}; do | |
for vol in ${home_vols[@]}; do | |
if [ ! $mount == $vol ] && [ ! -d $vol ]; then | |
case $vol in | |
"/Volumes/Drobo" ) [ `scutil --get ComputerName` == $crashplan_server ] && mount_disk afp_rw ;; | |
"/Volumes/iTunes" ) [ `scutil --get ComputerName` != $crashplan_server ] && mount_disk afp_rw "iTunes" ;; | |
esac | |
fi | |
done | |
for vol in ${webdav_vols[@]}; do | |
if [ ! $mount == $vol ] && [ ! -d $vol ]; then | |
webdav=`echo $vol | awk -F/ '{print$3}'` | |
[ `scutil --get ComputerName` == $media_server ] && mount_disk webdav $webdav | |
case $vol in | |
"/Volumes/user1" ) [ $USER == "user1" ] && mount_disk webdav "user1" ;; | |
"/Volumes/user2" ) [ $USER == "user2" ] && mount_disk webdav "user2" ;; | |
"/Volumes/user3" ) [ $USER == "user3" ] && mount_disk webdav "user3" ;; | |
esac | |
fi | |
done | |
done | |
fi | |
run_iTunes | |
debug "isMounted: "$isMounted | |
debug "volumes: `ls /Volumes*`" | |
debug "mounted volumes: `mount | grep /Volumes | awk {'print$3'}`" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment