diff options
author | Turbo Fredriksson <[email protected]> | 2012-02-04 21:08:53 +0100 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-12-03 09:42:15 -0800 |
commit | 645fb9cc214c79c77378dd1e1fd2e3ef668bc848 (patch) | |
tree | 93522c296789b8ac16a572b0fbcf35f7d891c654 /scripts/smb.sh | |
parent | 4588bf57017f5d2693cd7b3f763640fe8cfe5909 (diff) |
Implemented sharing datasets via SMB using libshare
Add the initial support for the 'smbshare' option using the
existing libshare infrastructure. Because this implementation
relies on usershares samba version 3.0.23 is required.
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #493
Diffstat (limited to 'scripts/smb.sh')
-rwxr-xr-x | scripts/smb.sh | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/scripts/smb.sh b/scripts/smb.sh new file mode 100755 index 000000000..7cf6c4bc1 --- /dev/null +++ b/scripts/smb.sh @@ -0,0 +1,214 @@ +#!/bin/bash + +BASETANK="share" +DATE=`date "+%Y%m%d"` + +TEST_SMBFS=0 +TEST_DESTROY=0 + +if [ -z "$1" ]; then + echo "Usage: `basename $0` [unpack]<[smbfs][snapshot][all]>" + exit 1 +fi + +set_onoff() { + type="$1" + dataset="$2" + toggle="$3" + + current=`zfs get -H $type -o value $dataset` + if [ "$current" != "$toggle" ]; then + run "zfs set $type=$toggle $dataset" + fi +} + +check_exists() { + dataset="$1" + + extra="" + [ -n "$2" ] && extra="$2" + + zfs get all "$dataset" > /dev/null 2>&1 + if [ $? != 0 ]; then + run "zfs create $extra $dataset" + fi +} + +check_shares() { + if [ "$TEST_SMBFS" == "1" ]; then + echo "Shares:" + echo "=> usershare list:" + net usershare list + echo + echo "=> /etc/dfs/sharetab:" + cat /etc/dfs/sharetab + echo + fi + + sleep 2 +} + +test_header() { + echo "TEST: $*" + echo "======================================" +} + +run() { + cmd="$*" + + echo "CMD: $cmd" + $cmd +} + +# --------- +# Needs more work... +if echo "$*" | grep -qi "unpack"; then + zfs unmount -a + zfs unshare -a + run "zfs destroy -r $BASETANK/tests" + + sh /etc/init.d/zfs stop + +# for tid in `grep ^tid /proc/net/iet/volume | sed "s@.*:\([0-9].*\) name.*@\1@"` +# do +# ietadm --op delete --tid $tid +# done + + set -e + rmmod `lsmod | grep ^z | grep -v zlib_deflate | sed 's@ .*@@'` spl zlib_deflate + + pushd / > /dev/null + [ -f "tmp/zfs.tgz" ] && tar xzf tmp/zfs.tgz && rm tmp/zfs.tgz + [ -f "tmp/spl.tgz" ] && tar xzf tmp/spl.tgz && rm tmp/spl.tgz + popd > /dev/null + + depmod -a + + sh /etc/init.d/zfs start + set +e +fi + +# --------- +if echo "$*" | egrep -qi "smbfs|all"; then + check_exists $BASETANK/tests + + TEST_SMBFS=1 + + test_header "Exists || Create" + str= + for volnr in 1 2 3; do + check_exists $BASETANK/tests/smbfs$volnr + + str="$str $BASETANK/tests/smbfs$volnr" + done + run "zfs get sharesmb $str" + + # Set sharesmb=on + test_header "Enable SMB share" + for volnr in 1 2 3; do + set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on + check_shares + done + + # Share all + test_header "Share all (individually)" + for volnr in 1 2 3; do + run "zfs share $BASETANK/tests/smbfs$volnr" + check_shares + done + + # Unshare all + test_header "Unshare all (individually)" + for volnr in 1 2 3; do + run "zfs unshare $BASETANK/tests/smbfs$volnr" + check_shares + done + + # Change mountpoint - first unshare and then share individual + test_header "Change mount point (unshare ; share)" + mkdir -p /tests + set_onoff sharesmb "$str" off + for volnr in 3 1 2; do + run "zfs set mountpoint=/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr" + echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" + mount | grep ^$BASETANK/tests/smbfs$volnr + echo + + run "zfs mount $BASETANK/tests/smbfs$volnr" + echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" + mount | grep ^$BASETANK/tests/smbfs$volnr + echo + + set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on + check_shares + + run "zfs share $BASETANK/tests/smbfs$volnr" + check_shares + + echo "-------------------" + done + + # Change mountpoint - remounting + test_header "Change mount point (remounting)" + for volnr in 3 1 2; do + run "zfs set mountpoint=/$BASETANK/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr" + echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" + mount | grep ^$BASETANK/tests/smbfs$volnr + echo + # => Doesn't seem to remount (!?) + + run "zfs mount $BASETANK/tests/smbfs$volnr" + echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" + mount | grep ^$BASETANK/tests/smbfs$volnr + echo + # => Doesn't seem to reshare (!?) + + check_shares + + run "zfs share $BASETANK/tests/smbfs$volnr" + check_shares + + echo "-------------------" + done +fi + +# --------- +if echo "$*" | egrep -qi "smbfs|all"; then + test_header "Unshare + Share all" + + run "zfs share -a" ; check_shares + run "zfs unshare -a" ; check_shares +fi + +# --------- +if echo "$*" | grep -qi "snapshot|all"; then + test_header "Snapshots" + + echo ; echo "-------------------" + check_exists $BASETANK/tests/destroy + check_exists $BASETANK/tests/destroy/destroy1 + run "zfs destroy -r $BASETANK/tests/destroy" + + echo ; echo "-------------------" + check_exists $BASETANK/tests/destroy + run "zfs snapshot $BASETANK/tests/destroy@$DATE" + run "zfs destroy -r $BASETANK/tests/destroy" + + echo ; echo "-------------------" + check_exists $BASETANK/tests/destroy + run "zfs snapshot $BASETANK/tests/destroy@$DATE" + run "zfs destroy -r $BASETANK/tests/destroy@$DATE" + run "zfs destroy -r $BASETANK/tests/destroy" +fi + +if echo "$*" | egrep -qi "smbfs|snapshot|all"; then + test_header "Cleanup (Share all + Destroy all)" + + run "zfs share -a" + check_shares + + run "zfs destroy -r $BASETANK/tests" + check_shares + + run "zfs list" +fi |