diff options
Diffstat (limited to 'extras/hook-scripts')
19 files changed, 786 insertions, 0 deletions
diff --git a/extras/hook-scripts/Makefile.am b/extras/hook-scripts/Makefile.am new file mode 100644 index 000000000..dd67c248e --- /dev/null +++ b/extras/hook-scripts/Makefile.am @@ -0,0 +1,2 @@ +EXTRA_DIST = S40ufo-stop.py S56glusterd-geo-rep-create-post.sh +SUBDIRS = add-brick set start stop diff --git a/extras/hook-scripts/S40ufo-stop.py b/extras/hook-scripts/S40ufo-stop.py new file mode 100755 index 000000000..107f19683 --- /dev/null +++ b/extras/hook-scripts/S40ufo-stop.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +import os +from optparse import OptionParser + +if __name__ == '__main__': + # check if swift is installed + try: + from gluster.swift.common.Glusterfs import get_mnt_point, unmount + except ImportError: + import sys + sys.exit("Openstack Swift does not appear to be installed properly"); + + op = OptionParser(usage="%prog [options...]") + op.add_option('--volname', dest='vol', type=str) + op.add_option('--last', dest='last', type=str) + (opts, args) = op.parse_args() + + + mnt_point = get_mnt_point(opts.vol) + if mnt_point: + unmount(mnt_point) + else: + sys.exit("get_mnt_point returned none for mount point") diff --git a/extras/hook-scripts/S56glusterd-geo-rep-create-post.sh b/extras/hook-scripts/S56glusterd-geo-rep-create-post.sh new file mode 100755 index 000000000..1369c22fc --- /dev/null +++ b/extras/hook-scripts/S56glusterd-geo-rep-create-post.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +key_val_pair1=`echo $2 | cut -d ' ' -f 1` +key_val_pair2=`echo $2 | cut -d ' ' -f 2` +key_val_pair3=`echo $2 | cut -d ' ' -f 3` + +key=`echo $key_val_pair1 | cut -d '=' -f 1` +val=`echo $key_val_pair1 | cut -d '=' -f 2` +if [ "$key" != "is_push_pem" ]; then + exit; +fi +if [ "$val" != '1' ]; then + exit; +fi + +key=`echo $key_val_pair2 | cut -d '=' -f 1` +val=`echo $key_val_pair2 | cut -d '=' -f 2` +if [ "$key" != "pub_file" ]; then + exit; +fi +if [ "$val" == "" ]; then + exit; +fi +pub_file=`echo $val` +pub_file_tmp=`echo $val`_tmp + +key=`echo $key_val_pair3 | cut -d '=' -f 1` +val=`echo $key_val_pair3 | cut -d '=' -f 2` +if [ "$key" != "slave_ip" ]; then + exit; +fi +if [ "$val" == "" ]; then + exit; +fi +slave_ip=`echo $val` + +if [ -f $pub_file ]; then + scp $pub_file $slave_ip:$pub_file_tmp + ssh $slave_ip "mv $pub_file_tmp $pub_file" + ssh $slave_ip "gluster system:: copy file /geo-replication/common_secret.pem.pub > /dev/null" + ssh $slave_ip "gluster system:: execute add_secret_pub > /dev/null" +fi diff --git a/extras/hook-scripts/add-brick/Makefile.am b/extras/hook-scripts/add-brick/Makefile.am new file mode 100644 index 000000000..6e2701e90 --- /dev/null +++ b/extras/hook-scripts/add-brick/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = post pre +CLEANFILES = diff --git a/extras/hook-scripts/add-brick/post/Makefile.am b/extras/hook-scripts/add-brick/post/Makefile.am new file mode 100644 index 000000000..12f510291 --- /dev/null +++ b/extras/hook-scripts/add-brick/post/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = disabled-quota-root-xattr-heal.sh diff --git a/extras/hook-scripts/add-brick/post/disabled-quota-root-xattr-heal.sh b/extras/hook-scripts/add-brick/post/disabled-quota-root-xattr-heal.sh new file mode 100755 index 000000000..1866f6abd --- /dev/null +++ b/extras/hook-scripts/add-brick/post/disabled-quota-root-xattr-heal.sh @@ -0,0 +1,141 @@ +#!/bin/sh + +##--------------------------------------------------------------------------- +## This script updates the 'limit-set' xattr on the newly added node. Please +## refer hook-scripts/add-brick/pre/S28Quota-root-xattr-heal.sh for the complete +## description. +## Do the following only if limit configured on root. +## 1. Do an auxiliary mount. +## 2. Get 'limit-set' xattr on root +## 3. Set xattrs with the same value on the root. +## 4. Disable itself +##--------------------------------------------------------------------------- + +QUOTA_CONFIG_XATTR="trusted.glusterfs.quota.limit-set"; +MOUNT_DIR=`mktemp --directory --tmpdir`; +OPTSPEC="volname:,version:,gd-workdir:,volume-op:" +PROGNAME="Quota-xattr-heal-add-brick" +VOL_NAME= +VERSION= +VOLUME_OP= +GLUSTERD_WORKING_DIR= +ENABLED_NAME="S28Quota-root-xattr-heal.sh" + + +cleanup_mountpoint () +{ + umount -f $MOUNT_DIR; + if [ 0 -ne $? ] + then + return $? + fi + + rmdir $MOUNT_DIR; + if [ 0 -ne $? ] + then + return $? + fi +} + +##------------------------------------------ +## Parse the arguments +##------------------------------------------ +ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@) +eval set -- "$ARGS" + +while true; +do + case $1 in + --volname) + shift + VOL_NAME=$1 + ;; + --version) + shift + VERSION=$1 + ;; + --gd-workdir) + shift + GLUSTERD_WORKING_DIR=$1 + ;; + --volume-op) + shift + VOLUME_OP=$1 + ;; + *) + shift + break + ;; + esac + shift +done +##---------------------------------------- + +ENABLED_STATE="$GLUSTERD_WORKING_DIR/hooks/$VERSION/$VOLUME_OP/post/$ENABLED_NAME" + + +FLAG=`gluster volume quota $VOL_NAME list / 2>&1 | grep \ + '\(No quota configured on volume\)\|\(Limit not set\)'`; +if ! [ -z $FLAG ] +then + ls $ENABLED_STATE; + RET=$? + if [ 0 -eq $RET ] + then + unlink $ENABLED_STATE; + exit $? + fi + + exit $RET; +fi + +## ----------------------------------- +## Mount the volume in temp directory. +## ----------------------------------- +glusterfs -s localhost --volfile-id=$VOL_NAME --client-pid=-42 $MOUNT_DIR; +if [ 0 -ne $? ] +then + exit $?; +fi +## ----------------------------------- + +## ------------------ +## Getfattr the value +## ------------------ +VALUE=`getfattr -n "$QUOTA_CONFIG_XATTR" -e hex --absolute-names $MOUNT_DIR \ + 2>&1 | grep $QUOTA_CONFIG_XATTR | awk -F'=' '{print $2}'` +RET=$? +if [ 0 -ne $RET ] +then + ## Clean up and exit + cleanup_mountpoint; + + exit $RET; +fi +## ------------------ + +## --------- +## Set xattr +## --------- +setfattr -n "$QUOTA_CONFIG_XATTR" -v $VALUE $MOUNT_DIR; +RET=$? +if [ 0 -ne $RET ] +then + ## Clean up and exit + cleanup_mountpoint; + + exit $RET; +fi +## --------- + +cleanup_mountpoint; + +## Disable +ls $ENABLED_STATE; +RET=$? +if [ 0 -eq $RET ] +then + unlink $ENABLED_STATE; + exit $? +fi +exit $? diff --git a/extras/hook-scripts/add-brick/pre/Makefile.am b/extras/hook-scripts/add-brick/pre/Makefile.am new file mode 100644 index 000000000..4d22d3c48 --- /dev/null +++ b/extras/hook-scripts/add-brick/pre/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = S28Quota-enable-root-xattr-heal.sh diff --git a/extras/hook-scripts/add-brick/pre/S28Quota-enable-root-xattr-heal.sh b/extras/hook-scripts/add-brick/pre/S28Quota-enable-root-xattr-heal.sh new file mode 100755 index 000000000..080138654 --- /dev/null +++ b/extras/hook-scripts/add-brick/pre/S28Quota-enable-root-xattr-heal.sh @@ -0,0 +1,100 @@ +#!/bin/sh + +############################################################################### +## ---------------------------------------------------------------------------- +## The scripts +## I. add-brick/pre/S28Quota-root-xattr-heal.sh (itself) +## II. add-brick/post/disabled-root-xattr-heal.sh AND +## collectively archieves the job of healing the 'limit-set' xattr upon +## add-brick to the gluster volume. +## +## This script is the 'controlling' script. Upon add-brick this script enables +## the corresponding script based on the status of the volume. +## If volume is started - enable add-brick/post script +## else - enable start/post script. +## +## The enabling and disabling of a script is based on the glusterd's logic, +## that it only runs the scripts which starts its name with 'S'. So, +## Enable - symlink the file to 'S'*. +## Disable- unlink symlink +## ---------------------------------------------------------------------------- +############################################################################### + +OPTSPEC="volname:,version:,gd-workdir:,volume-op:" +PROGNAME="Quota-xattr-heal-add-brick-pre" +VOL_NAME= +GLUSTERD_WORKING_DIR= +VOLUME_OP= +VERSION= +ENABLED_NAME="S28Quota-root-xattr-heal.sh" +DISABLED_NAME="disabled-quota-root-xattr-heal.sh" + +enable () +{ + ln -sf $DISABLED_STATE $1; +} + +##------------------------------------------ +## Parse the arguments +##------------------------------------------ +ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@) +eval set -- "$ARGS" + +while true; +do + case $1 in + --volname) + shift + VOL_NAME=$1 + ;; + --gd-workdir) + shift + GLUSTERD_WORKING_DIR=$1 + ;; + --volume-op) + shift + VOLUME_OP=$1 + ;; + --version) + shift + VERSION=$1 + ;; + *) + shift + break + ;; + esac + shift +done +##---------------------------------------- + +DISABLED_STATE="$GLUSTERD_WORKING_DIR/hooks/$VERSION/add-brick/post/$DISABLED_NAME" +ENABLED_STATE_START="$GLUSTERD_WORKING_DIR/hooks/$VERSION/start/post/$ENABLED_NAME" +ENABLED_STATE_ADD_BRICK="$GLUSTERD_WORKING_DIR/hooks/$VERSION/add-brick/post/$ENABLED_NAME"; + +## Why to proceed if the required script itself is not present? +ls $DISABLED_STATE; +if [ 0 -ne $? ] +then + exit $?; +fi + +## Is quota enabled? +FLAG=`cat $GLUSTERD_WORKING_DIR/vols/$VOL_NAME/info | grep "^features.quota=" \ + | awk -F'=' '{print $NF}'`; +if [ "$FLAG" != "on" ] +then + exit $EXIT_SUCCESS; +fi + +## Is volume started? +FLAG=`cat $GLUSTERD_WORKING_DIR/vols/$VOL_NAME/info | grep "^status=" \ + | awk -F'=' '{print $NF}'`; +if [ "$FLAG" != "1" ] +then + enable $ENABLED_STATE_START; + exit $? +fi + +enable $ENABLED_STATE_ADD_BRICK; +exit $? diff --git a/extras/hook-scripts/set/Makefile.am b/extras/hook-scripts/set/Makefile.am new file mode 100644 index 000000000..1fcade4b0 --- /dev/null +++ b/extras/hook-scripts/set/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = post +CLEANFILES = diff --git a/extras/hook-scripts/set/post/Makefile.am b/extras/hook-scripts/set/post/Makefile.am new file mode 100644 index 000000000..9ded234cf --- /dev/null +++ b/extras/hook-scripts/set/post/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = S30samba-set.sh diff --git a/extras/hook-scripts/set/post/S30samba-set.sh b/extras/hook-scripts/set/post/S30samba-set.sh new file mode 100755 index 000000000..88f6e797b --- /dev/null +++ b/extras/hook-scripts/set/post/S30samba-set.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +#Need to be copied to hooks/<HOOKS_VER>/set/post/ + +#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 enables user to enable or disable smb share by volume set +#option. Keys "user.cifs" and "user.smb" both are valid, but user.smb is +#preferred. + + +PROGNAME="Ssamba-set" +OPTSPEC="volname:" +VOL= +CONFIGFILE= +LOGFILEBASE= +PIDDIR= + +enable_smb="" + +function parse_args () { + ARGS=$(getopt -l $OPTSPEC -o "o" -name $PROGNAME $@) + eval set -- "$ARGS" + + while true; do + case $1 in + --volname) + shift + VOL=$1 + ;; + *) + shift + for pair in $@; do + read key value < <(echo "$pair" | tr "=" " ") + case "$key" in + "user.cifs") + enable_smb=$value + ;; + "user.smb") + enable_smb=$value + ;; + *) + ;; + esac + done + + shift + break + ;; + esac + shift + done +} + +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}'` + LOGFILEBASE=`smbd -b | grep 'LOGFILEBASE' | awk '{print $2}'` +} + +function add_samba_share () { + volname=$1 + STRING="\n[gluster-$volname]\n" + STRING+="comment = For samba share of volume $volname\n" + STRING+="vfs objects = glusterfs\n" + STRING+="glusterfs:volume = $volname\n" + STRING+="glusterfs:logfile = $LOGFILEBASE/glusterfs-$volname.%%M.log\n" + STRING+="glusterfs:loglevel = 7\n" + STRING+="path = %%P/\n" + STRING+="read only = no\n" + STRING+="guest ok = yes\n" + printf "$STRING" >> ${CONFIGFILE} +} + +function sighup_samba () { + pid=`cat ${PIDDIR}/smbd.pid` + if [ "x$pid" != "x" ] + then + kill -HUP "$pid"; + else + /etc/init.d/smb start + fi +} + +function del_samba_share () { + volname=$1 + sed -i "/\[gluster-$volname\]/,/^$/d" /etc/samba/smb.conf +} + +function is_volume_started () { + volname=$1 + echo "$(grep status /var/lib/glusterd/vols/"$volname"/info |\ + cut -d"=" -f2)" +} + +parse_args $@ +if [ "0" = $(is_volume_started "$VOL") ]; then + exit 0 +fi + +#Find smb.conf, smbd pid directory and smbd logfile path +find_config_info + +if [ "$enable_smb" = "enable" ]; then + if ! grep --quiet "\[gluster-$VOL\]" /etc/samba/smb.conf ; then + add_samba_share $VOL + sighup_samba + fi + +elif [ "$enable_smb" = "disable" ]; then + del_samba_share $VOL + sighup_samba +fi diff --git a/extras/hook-scripts/start/Makefile.am b/extras/hook-scripts/start/Makefile.am new file mode 100644 index 000000000..1fcade4b0 --- /dev/null +++ b/extras/hook-scripts/start/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = post +CLEANFILES = diff --git a/extras/hook-scripts/start/post/Makefile.am b/extras/hook-scripts/start/post/Makefile.am new file mode 100644 index 000000000..d9cba93ed --- /dev/null +++ b/extras/hook-scripts/start/post/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = S29CTDBsetup.sh S30samba-start.sh diff --git a/extras/hook-scripts/start/post/S29CTDBsetup.sh b/extras/hook-scripts/start/post/S29CTDBsetup.sh new file mode 100755 index 000000000..7d5085c46 --- /dev/null +++ b/extras/hook-scripts/start/post/S29CTDBsetup.sh @@ -0,0 +1,77 @@ +#! /bin/bash +# RHS-2.0 only +# - The script mounts the 'meta-vol' on start 'event' on a known +# directory (eg. /gluster/lock) +# - Adds the necessary configuration changes for ctdb in smb.conf and +# restarts smb service. +# - P.S: There are other 'tasks' that need to be done outside this script +# to get CTDB based failover up and running. + +SMB_CONF=/etc/samba/smb.conf + +CTDB_MNT=/gluster/lock +PROGNAME="ctdb" +OPTSPEC="volname:" +VOL= +# $META is the volume that will be used by CTDB as a shared filesystem. +# It is not desirable to use this volume for storing 'data' as well. +# META is set to 'all' (viz. a keyword and hence not a legal volume name) +# to prevent the script from running for volumes it was not intended. +# User needs to set META to the volume that serves CTDB lockfile. +META="all" + +function parse_args () { + ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@) + eval set -- "$ARGS" + + while true; do + case $1 in + --volname) + shift + VOL=$1 + ;; + + *) + shift + break + ;; + + esac + + shift + done +} + +function add_glusterfs_ctdb_options () { + PAT="Share Definitions" + GLUSTER_CTDB_CONFIG="# ctdb config for glusterfs\n\tclustering = yes\n\tidmap backend = tdb2\n" + exists=`grep "clustering = yes" "$SMB_CONF"` + if [ "$exists" == "" ] + then + sed -i /"$PAT"/i\ "$GLUSTER_CTDB_CONFIG" "$SMB_CONF" + fi +} + +function add_fstab_entry () { + volname=$1 + mntpt=$2 + mntent="`hostname`:/$volname $mntpt glusterfs _netdev,defaults,transport=tcp 0 0" + exists=`grep "^$mntent" /etc/fstab` + if [ "$exists" == "" ] + then + echo "$mntent" >> /etc/fstab + fi +} + +parse_args $@ +if [ "$META" = "$VOL" ] +then + #expects ctdb service to manage smb + service smb stop + add_glusterfs_ctdb_options + mkdir -p $CTDB_MNT + sleep 5 + mount -t glusterfs `hostname`:$VOL "$CTDB_MNT" && \ + add_fstab_entry $VOL $CTDB_MNT + chkconfig ctdb on +fi diff --git a/extras/hook-scripts/start/post/S30samba-start.sh b/extras/hook-scripts/start/post/S30samba-start.sh new file mode 100755 index 000000000..529348e25 --- /dev/null +++ b/extras/hook-scripts/start/post/S30samba-start.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +#Need to be copied to hooks/<HOOKS_VER>/start/post + +#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 creates shares for volume on every volume start +#event by adding the entries in smb.conf file and sending SIGHUP to samba. +# +#In smb.conf: +#glusterfs vfs plugin has to be specified as required vfs object. +#Path value is relative to the root of gluster volume;"/" signifies complete +#volume. + +PROGNAME="Ssamba-start" +OPTSPEC="volname:" +VOL= +CONFIGFILE= +LOGFILEBASE= +PIDDIR= + +function parse_args () { + ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@) + eval set -- "$ARGS" + + while true; do + case $1 in + --volname) + shift + VOL=$1 + ;; + *) + shift + break + ;; + esac + shift + done +} + +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'}` + LOGFILEBASE=`smbd -b | grep 'LOGFILEBASE' | awk '{print $2}'` +} + +function add_samba_share () { + volname=$1 + STRING="\n[gluster-$volname]\n" + STRING+="comment = For samba share of volume $volname\n" + STRING+="vfs objects = glusterfs\n" + STRING+="glusterfs:volume = $volname\n" + STRING+="glusterfs:logfile = $LOGFILEBASE/glusterfs-$volname.%%M.log\n" + STRING+="glusterfs:loglevel = 7\n" + STRING+="path = %%P/\n" + STRING+="read only = no\n" + STRING+="guest ok = yes\n" + printf "$STRING" >> ${CONFIGFILE} +} + +function sighup_samba () { + pid=`cat ${PIDDIR}/smbd.pid` + if [ "x$pid" != "x" ] + then + kill -HUP "$pid"; + else + /etc/init.d/smb condrestart + fi +} + +function get_smb () { + volname=$1 + uservalue= + + usercifsvalue=$(grep user.cifs /var/lib/glusterd/vols/"$volname"/info |\ + cut -d"=" -f2) + usersmbvalue=$(grep user.smb /var/lib/glusterd/vols/"$volname"/info |\ + cut -d"=" -f2) + + if [[ $usercifsvalue = "disable" || $usersmbvalue = "disable" ]]; then + uservalue="disable" + fi + echo "$uservalue" +} + +parse_args $@ +if [ $(get_smb "$VOL") = "disable" ]; then + exit 0 +fi + +#Find smb.conf, smbd pid directory and smbd logfile path +find_config_info + +if ! grep --quiet "\[gluster-$VOL\]" ${CONFIGFILE} ; then + add_samba_share $VOL + sighup_samba +fi diff --git a/extras/hook-scripts/stop/Makefile.am b/extras/hook-scripts/stop/Makefile.am new file mode 100644 index 000000000..e2ac8e274 --- /dev/null +++ b/extras/hook-scripts/stop/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = pre +CLEANFILES = diff --git a/extras/hook-scripts/stop/pre/Makefile.am b/extras/hook-scripts/stop/pre/Makefile.am new file mode 100644 index 000000000..85243adbe --- /dev/null +++ b/extras/hook-scripts/stop/pre/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = S29CTDB-teardown.sh S30samba-stop.sh diff --git a/extras/hook-scripts/stop/pre/S29CTDB-teardown.sh b/extras/hook-scripts/stop/pre/S29CTDB-teardown.sh new file mode 100755 index 000000000..bfbd356b8 --- /dev/null +++ b/extras/hook-scripts/stop/pre/S29CTDB-teardown.sh @@ -0,0 +1,80 @@ +#! /bin/bash +#non-portable - RHS-2.0 only +SMB_CONF=/etc/samba/smb.conf + +CTDB_MNT=/gluster/lock +PROGNAME="ctdb" +OPTSPEC="volname:" +VOL= +# $META is the volume that will be used by CTDB as a shared filesystem. +# It is not desirable to use this volume for storing 'data' as well. +# META is set to 'all' (viz. a keyword and hence not a legal volume name) +# to prevent the script from running for volumes it was not intended. +# User needs to set META to the volume that serves CTDB lockfile. +META="all" + +function sighup_samba () { + pid=`cat /var/run/smbd.pid` + if [ "$pid" != "" ] + then + kill -HUP $pid; + else + /etc/init.d/smb start + fi +} + +function parse_args () { + ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@) + eval set -- "$ARGS" + + while true; do + case $1 in + --volname) + shift + VOL=$1 + ;; + + *) + shift + break + ;; + + esac + + shift + done +} + + +function remove_ctdb_options () { + IFS=$'\n' + GLUSTER_CTDB_CONFIG=$'# ctdb config for glusterfs\n\tclustering = yes\n\tidmap backend = tdb2\n' + + for line in $GLUSTER_CTDB_CONFIG + do + sed -i /"$line"/d $SMB_CONF + done + unset IFS +} + +function remove_fstab_entry () { + volname=$1 + mntpt=$2 + mntent="`hostname`:/$volname $mntpt glusterfs _netdev,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 +} + +parse_args $@ +if [ "$META" = "$VOL" ] +then + umount "$CTDB_MNT" + chkconfig ctdb off + remove_fstab_entry $VOL $CTDB_MNT + remove_ctdb_options + sighup_samba +fi diff --git a/extras/hook-scripts/stop/pre/S30samba-stop.sh b/extras/hook-scripts/stop/pre/S30samba-stop.sh new file mode 100755 index 000000000..8950eea43 --- /dev/null +++ b/extras/hook-scripts/stop/pre/S30samba-stop.sh @@ -0,0 +1,71 @@ +#! /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:" +VOL= +CONFIGFILE= +PIDDIR= + +function parse_args () { + ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@) + eval set -- "$ARGS" + + while true; do + case $1 in + --volname) + shift + VOL=$1 + ;; + *) + shift + break + ;; + esac + shift + done +} + +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 del_samba_share () { + volname=$1 + sed -i "/\[gluster-$volname\]/,/^$/d" ${CONFIGFILE} +} + +function sighup_samba () { + pid=`cat ${PIDDIR}/smbd.pid` + if [ "x$pid" != "x" ] + then + kill -HUP $pid; + else + /etc/init.d/smb condrestart + fi +} + +parse_args $@ +find_config_info +del_samba_share $VOL +sighup_samba |
