Advertisement
zefie

SMB Automount Script

Jun 11th, 2013
423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.34 KB | None | 0 0
  1. #!/bin/bash
  2. srcmnt="vault"
  3. dstmnt="/media/shares"
  4. mntopts="-o credentials=/etc/smbpass,file_mode=0660,dir_mode=0770,uid=1000,gid=1001"
  5.  
  6. mounts=( Anime Backups Movies Music Photos Software TVShows Videos)
  7.  
  8.  
  9. HOST=${srcmnt}
  10. srcdown=1;
  11. srcsrvup=0;
  12.  
  13. mount=$(which mount)
  14. umount=$(which umount)
  15. nmap=$(which nmap)
  16. ping=$(which ping)
  17. user=$(whoami)
  18.  
  19. check_host() {
  20.         echo -n " * Waiting for $HOST "
  21.  
  22.         while [ $srcdown -ne "0" ]; do
  23.                 $ping -q -c 1 -w 1 $HOST &> /dev/null; srcdown=$?;
  24.                 if [ $srcdown -eq "0" ]; then
  25.                         break;
  26.                 fi
  27.                 echo -n '.'; sleep 3;
  28.         done
  29.  
  30.         while [ $srcsrvup -ne "1" ]; do
  31.                 srcsrvup=$($nmap -sT -p 445 -P0 -T5 -n $HOST | grep open | wc -l)
  32.                 if [ $srcsrvup -eq "1" ]; then
  33.                         break;
  34.                 fi
  35.                 echo -n '.'; sleep 3;
  36.         done
  37.  
  38.         echo " Up."
  39. }
  40.  
  41. mount_cifs() {
  42.  
  43.         if [ $(echo -n $nmap | wc -m) -le 1 ]; then
  44.                 echo "Error: nmap required";
  45.                 exit;
  46.         fi
  47.  
  48.         if [ $(echo -n $ping | wc -m) -le 1 ]; then
  49.                 echo "Error: ping required";
  50.                 exit;
  51.         fi
  52.  
  53.  
  54.         for i in "${mounts[@]}"; do
  55.                 echo " * Preparing to mount //${srcmnt}/${i} ..."
  56.                 if [ $(echo $srcsrvup) -ne "1" ]; then
  57.                         check_host
  58.                 fi
  59.  
  60.                 if [ ! -d "${dstmnt}/${i}" ]; then
  61.                         mkdir -p "${dstmnt}/${i}"
  62.                 fi
  63.  
  64.                 if [ "$(grep "//${srcmnt}/${i}" /etc/mtab | wc -l)" -ne "1" ]; then
  65.                         skipmount=0
  66.                         echo -n " * Mounting //${srcmnt}/${i} on ${dstmnt}/${i} "
  67.                         if [ "$user" = "root" ]; then
  68.                                         echo -n "as root..."
  69.                         else
  70.                                         echo -n "as non-root user ${user}..."
  71.                         fi
  72.                         while [ "$skipmount" -eq "0" ]; do
  73.                                 if [ ! "$(grep "//${srcmnt}/${i}" /etc/mtab)" ]; then
  74.                                         if [ "$user" = "root" ]; then
  75.                                                 ${mount} -t cifs ${mntopts} "//${srcmnt}/${i}" "${dstmnt}/${i}" &> /dev/null
  76.                                         else
  77.                                                 if [ "$(grep "//${srcmnt}/${i}" /etc/fstab | grep user | wc -l)" -eq "1" ]; then
  78.                                                         ${mount} "//${srcmnt}/${i}"
  79.                                                 else
  80.                                                         echo ""
  81.                                                         echo " * Could not mount //${srcmnt}/${i} .. You are not root, and mount is not user mountable in /etc/fstab"
  82.                                                         skipmount=1
  83.                                                 fi
  84.                                         fi
  85.                                         if [ "$skipmount" -ne "1" ]; then
  86.                                                 if [ "$(grep //${srcmnt}/${i} /etc/mtab | wc -l)" -ne "1" ]; then
  87.                                                         echo -n "."
  88.                                                         sleep 10
  89.                                                 else
  90.                                                         echo " Done."
  91.                                                         skipmount=1
  92.                                                 fi
  93.                                         fi
  94.                                 fi
  95.                         done
  96.                 else
  97.                         echo " * Already mounted: //${srcmnt}/${i} "
  98.                 fi
  99.         done
  100. }
  101.  
  102.  
  103. umount_cifs () {
  104.         for i in "${mounts[@]}"; do
  105.                 echo " * Preparing to unmount "//${srcmnt}/${i}" ..."
  106.                 skipmount=0
  107.                 if [ "$(grep "//${srcmnt}/${i}" /etc/mtab | wc -l)" -eq "1" ]; then
  108.                         dstmnt=$(grep "//${srcmnt}/${i}" /etc/mtab | cut -d' ' -f 2);
  109.                         echo -n " * Unmounting /${srcmnt}/${i} from $dstmnt "
  110.                         if [ "$user" = "root" ]; then
  111.                                         echo -n "as root..."
  112.                         else
  113.                                         echo -n "as non-root user ${user}..."
  114.                         fi
  115.                         while [ "$skipmount" -eq "0" ]; do
  116.                                 if [ "$(grep "//${srcmnt}/${i}" /etc/mtab | wc -l)" -eq "1" ]; then
  117.                                         if [ "$user" = "root" ]; then
  118.                                                 ${umount} "//${srcmnt}/${i}" &> /dev/null
  119.                                         else
  120.                                                 if [ "$(grep "//${srcmnt}/${i}" /etc/fstab | grep user | wc -l)" -eq "1" ]; then
  121.                                                         ${umount} "//${srcmnt}/${i}"
  122.                                                 else
  123.                                                         echo ""
  124.                                                         echo " * Could not unmount //${srcmnt}/${i} .. You are not root, and mount is not user mountable";
  125.                                                         skipmount=1
  126.                                                 fi
  127.                                         fi
  128.                                         if [ "$(grep "//${srcmnt}/${i}" /etc/mtab | wc -l)" -eq "1" ]; then
  129.                                                 echo -n "."
  130.                                                 sleep 10
  131.                                         else
  132.                                                 echo " Done."
  133.                                                 skipmount=1
  134.                                         fi
  135.                                 fi
  136.                         done
  137.                 else
  138.                         echo " * Not mounted: //${srcmnt}/${i} "
  139.                 fi
  140.         done
  141. }
  142.  
  143.  
  144. case "$1" in
  145.  
  146. "mount")
  147.         mount_cifs
  148.         ;;
  149.  
  150. "umount")
  151.         umount_cifs
  152.         ;;
  153.  
  154. "unmount")
  155.         umount_cifs
  156.         ;;
  157.  
  158. *)
  159.         echo "Usage: $0 [mount|umount]"
  160.         ;;
  161. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement