mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
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 <behlendorf1@llnl.gov> Closes #493
This commit is contained in:
committed by
Brian Behlendorf
parent
4588bf5701
commit
645fb9cc21
+2
-1
@@ -9,7 +9,8 @@ dist_pkglibexec_SCRIPTS = \
|
||||
$(top_srcdir)/scripts/zpool-create.sh \
|
||||
$(top_srcdir)/scripts/zpios.sh \
|
||||
$(top_srcdir)/scripts/zpios-sanity.sh \
|
||||
$(top_srcdir)/scripts/zpios-survey.sh
|
||||
$(top_srcdir)/scripts/zpios-survey.sh \
|
||||
$(top_srcdir)/scripts/smb.sh
|
||||
|
||||
ZFS=$(top_builddir)/scripts/zfs.sh
|
||||
ZCONFIG=$(top_builddir)/scripts/zconfig.sh
|
||||
|
||||
Executable
+214
@@ -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
|
||||
Reference in New Issue
Block a user