zfs/scripts/smb.sh

215 lines
4.5 KiB
Bash
Executable File

#!/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