bindfs-helper.sh 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/bin/bash
  2. if ! which bindfs >/dev/null; then
  3. echo -e "\nbindfs wurde nicht gefunden." >&2;
  4. echo -e "Unter Debian erledigt dies ein 'aptitude install bindfs'.\n" >&2;
  5. exit 2;
  6. fi
  7. if ! which stat >/dev/null || ! which dirname >/dev/null || ! which whoami >/dev/null; then
  8. echo -e "\nDie coreutils wurden nicht gefunden." >&2;
  9. echo -e "Unter Debian erledigt dies ein 'aptitude install coreutils'.\n" >&2;
  10. exit 2;
  11. fi
  12. if [ "$(whoami)" != "root" ] && [ "$(whoami)" != "0" ]; then
  13. echo -e "\nDieses Script sollte mit root-Rechten ausgeführt werden, da nur root rechteverwaltend mounten darf.\n" >&2;
  14. exit 1;
  15. fi
  16. while true; do
  17. while true; do
  18. read -p "Welches real existierende Verzeichnis soll virtuell gemountet werden? " MNTDIR;
  19. if [ "${MNTDIR:0:1}" != "/" ]; then
  20. echo -e "\nBitte geben Sie einen absoluten Pfad an.\n" >&2;
  21. continue;
  22. fi
  23. if [ ! -d $MNTDIR ]; then
  24. echo -e "\nDas Verzeichnis existiert nicht.\n" >&2;
  25. continue;
  26. fi
  27. break;
  28. done
  29. MNTDIR=$(dirname $MNTDIR/x);
  30. MNTDIRu=$(stat -c "%u" $MNTDIR);
  31. MNTDIRg=$(stat -c "%g" $MNTDIR);
  32. while true; do
  33. read -p "Auf welches virtuelle Verzeichnis soll gemountet werden? " MNTPNT;
  34. if [ "${MNTPNT:0:1}" != "/" ]; then
  35. echo -e "\nBitte geben Sie einen absoluten Pfad an.\n" >&2;
  36. continue;
  37. fi
  38. if [ ! -d $MNTPNT ]; then
  39. echo -e "\nDas Verzeichnis existiert nicht.\n" >&2;
  40. continue;
  41. fi
  42. if [ "$MNTPNT" == "$MNTDIR" ]; then
  43. echo -e "\nDies ist das selbe Verzeichnis wie das zu mountende Verzeichnis.\n" >&2;
  44. continue 2;
  45. fi
  46. if [ "${MNTPNT:0:${#MNTDIR}}" == "$MNTDIR" ] || [ "$MNTPNT" == "${MNTDIR:0:${#MNTPNT}}" ]; then
  47. echo -e "\nDie Verzeichnisse sind eineinander verschachtelt.\n" >&2;
  48. continue 2;
  49. fi
  50. break;
  51. done
  52. MNTPNT=$(dirname $MNTPNT/x);
  53. MNTPNTu=$(stat -c "%u" $MNTDIR);
  54. MNTPNTg=$(stat -c "%g" $MNTDIR);
  55. break;
  56. done
  57. FSTAB="bindfs#$MNTDIR $MNTPNT fuse nonempty,create-for-user=$MNTDIRu,create-for-group=$MNTDIRg,force-user=$MNTPNTu,force-group=$MNTPNTg 0 0";
  58. CMMND="bindfs -o nonempty --create-for-user=$MNTDIRu --create-for-group=$MNTDIRg -u $MNTPNTu -g $MNTPNTg $MNTDIR $MNTPNT";
  59. echo -e "\nDer fstab-Eintrag lautet:\n $FSTAB";
  60. echo -e "\nDer Befehl für das manuelle Mounten lautet:\n $CMMND";
  61. if [ -f /etc/fstab ]; then
  62. echo "";
  63. while true; do
  64. read -n 1 -p "Soll ein fstab-Eintrag angelegt werden? " X;
  65. echo "";
  66. case $X in
  67. y|Y|j|J|1|t|T)
  68. echo -e "\n# BindFS-Mount von $MNTDIR auf $MNTPNT:\n$FSTAB" >> /etc/fstab;
  69. echo "Der fstab-Eintrag wurde angelegt.";
  70. ;;
  71. n|N|0|f|F)
  72. echo "Es wurde kein fstab-Eintrag angelegt.";
  73. ;;
  74. *)
  75. echo -e "\nBitte antworten Sie mit (J)a oder (N)ein.\n" >&2;
  76. continue;
  77. ;;
  78. esac
  79. break;
  80. done
  81. fi
  82. echo "";
  83. while true; do
  84. read -n 1 -p "Soll das Verzeichnis jetzt gemountet werden? " X;
  85. echo "";
  86. case $X in
  87. y|Y|j|J|1|t|T)
  88. /bin/bash -c "$CMMND" &&
  89. echo "Das Verzeichnis wurde gemountet." ||
  90. echo "Fehler beim Mounten des Verzeichnisses" >&2;
  91. ;;
  92. n|N|0|f|F)
  93. echo "Das Verzeichnis wurde nicht gemountet.";
  94. ;;
  95. *)
  96. echo -e "\nBitte antworten Sie mit (J)a oder (N)ein.\n" >&2;
  97. continue;
  98. ;;
  99. esac
  100. break;
  101. done