summaryrefslogtreecommitdiffstats
path: root/extras/hook-scripts/set/post/S30samba-set.sh
blob: bec3ac270b368b5b1e937c7be69cb5120f3df42e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash

PROGNAME="Ssamba-set"
OPTSPEC="volname:"
VOL=
MNT_PRE="/mnt/samba"

enable_cifs=""

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_cifs=$value;;
                            *) ;;
                        esac
                done

                shift
                break
                ;;
            esac
            shift
        done
}

function add_samba_export () {
        volname=$1
        mnt_pre=$2
        mkdir -p $mnt_pre/$volname && \
        printf "\n[gluster-$volname]\ncomment=For samba export of volume $volname\npath=$mnt_pre/$volname\nread only=no\nguest ok=yes\n" >> /etc/samba/smb.conf
}

function sighup_samba () {
        pid=`cat /var/run/smbd.pid`
        if [ "$pid" != "" ]
        then
                kill -HUP "$pid";
        else
                /etc/init.d/smb start
        fi
}

function add_fstab_entry () {
        volname=$1
        mntpt=$2
        mntent="`hostname`:/$volname $mntpt glusterfs defaults,transport=tcp 0 0"
        exists=`grep "$mntent" /etc/fstab`
        if [ "$exists" == "" ]
        then
            echo "$mntent" >> /etc/fstab
        fi
}

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 umount_volume () {
        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
}

function is_volume_started () {
        volname=$1
        echo "$(grep status /var/lib/glusterd/vols/"$volname"/info | cut -d"=" -f2)"
}

function get_cifs () {
        volname=$1
        echo "$(grep user.cifs /var/lib/glusterd/vols/"$volname"/info | cut -d"=" -f2)"
}

function mount_volume () {
	volname=$1
	mntpt=$2
	if [ "$(cat /proc/mounts | grep "$mntpt")" == "" ]; then
		mount -t glusterfs `hostname`:$volname $mntpt && \
				add_fstab_entry $volname $mntpt
	fi
}

parse_args $@
if [ "0" = $(is_volume_started "$VOL") ]; then
    exit 0
fi

if [ "$enable_cifs" = "enable" ]; then
    add_samba_export $VOL $MNT_PRE
    mkdir -p $MNT_PRE/$VOL
    sleep 5
    mount_volume $VOL $MNT_PRE/$VOL
    sighup_samba

elif [ "$enable_cifs" = "disable" ]; then
    del_samba_export $VOL
    umount_volume $VOL $MNT_PRE
    remove_fstab_entry $VOL $MNT_PRE/$VOL
    sighup_samba
fi