summaryrefslogtreecommitdiffstats
path: root/extras/hook-scripts/stop/pre/S30samba-stop.sh
diff options
context:
space:
mode:
Diffstat (limited to 'extras/hook-scripts/stop/pre/S30samba-stop.sh')
-rwxr-xr-x[-rw-r--r--]extras/hook-scripts/stop/pre/S30samba-stop.sh93
1 files changed, 52 insertions, 41 deletions
diff --git a/extras/hook-scripts/stop/pre/S30samba-stop.sh b/extras/hook-scripts/stop/pre/S30samba-stop.sh
index 66efa3cc5ae..ea799381d62 100644..100755
--- a/extras/hook-scripts/stop/pre/S30samba-stop.sh
+++ b/extras/hook-scripts/stop/pre/S30samba-stop.sh
@@ -1,66 +1,77 @@
#! /bin/bash
+#Need to be copied to hooks/<HOOKS_VER>/stop/pre
+
+#TODO: All gluster and samba paths are assumed for fedora like systems.
+#Some efforts are required to make it work on other distros.
+
+#The preferred way of creating a smb share of a gluster volume has changed.
+#The old method was to create a fuse mount of the volume and share the mount
+#point through samba.
+#
+#New method eliminates the requirement of fuse mount and changes in fstab.
+#glusterfs_vfs plugin for samba makes call to libgfapi to access the volume.
+#
+#This hook script automagically removes shares for volume on every volume stop
+#event by removing the volume related entries(if any) in smb.conf file.
+
PROGNAME="Ssamba-stop"
-OPTSPEC="volname:"
+OPTSPEC="volname:,last:"
VOL=
-MNT_PRE="/mnt/samba"
+CONFIGFILE=
+PIDDIR=
+LAST=
function parse_args () {
- ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@)
+ ARGS=$(getopt -o '' -l $OPTSPEC -n $PROGNAME -- "$@")
eval set -- "$ARGS"
while true; do
- case $1 in
- --volname)
- shift
- VOL=$1
- ;;
- *)
- shift
- break
- ;;
- esac
- shift
+ case $1 in
+ --volname)
+ shift
+ VOL=$1
+ ;;
+ --last)
+ shift
+ LAST=$1
+ ;;
+ *)
+ shift
+ break
+ ;;
+ esac
+
+ shift
done
}
-function del_samba_export () {
- volname=$1
- cp /etc/samba/smb.conf /tmp/smb.conf
- sed -i "/gluster-$volname/,/^$/d" /tmp/smb.conf &&\
- mv /tmp/smb.conf /etc/samba/smb.conf
+function find_config_info () {
+ cmdout=`smbd -b | grep smb.conf`
+ if [ $? -ne 0 ];then
+ echo "Samba is not installed"
+ exit 1
+ fi
+ CONFIGFILE=`echo $cmdout | awk '{print $2}'`
+ PIDDIR=`smbd -b | grep PIDDIR | awk '{print $2}'`
}
-function umount_volume () {
+function deactivate_samba_share () {
volname=$1
- mnt_pre=$2
- umount -l $mnt_pre/$volname
-}
-
-function remove_fstab_entry () {
- volname=$1
- mntpt=$2
- mntent="`hostname`:/$volname $mntpt glusterfs defaults,transport=tcp 0 0"
- esc_mntent=$(echo -e "$mntent" | sed 's/\//\\\//g')
- exists=`grep "$mntent" /etc/fstab`
- if [ "$exists" != " " ]
- then
- sed -i /"$esc_mntent"/d /etc/fstab
- fi
+ sed -i -e '/^\[gluster-'"$volname"'\]/{ :a' -e 'n; /available = no/H; /^$/!{$!ba;}; x; /./!{ s/^/available = no/; $!{G;x}; $H; }; s/.*//; x; };' ${CONFIGFILE}
}
function sighup_samba () {
- pid=`cat /var/run/smbd.pid`
- if [ $pid != " " ]
+ pid=`cat ${PIDDIR}/smbd.pid`
+ if [ "x$pid" != "x" ]
then
kill -HUP $pid;
else
- /etc/init.d/smb condrestart
+ service smb condrestart
fi
}
-parse_args $@
-del_samba_export $VOL
-umount_volume $VOL $MNT_PRE
-remove_fstab_entry $VOL $MNT_PRE/$VOL
+parse_args "$@"
+find_config_info
+deactivate_samba_share $VOL
sighup_samba