Browse Source

ksmbd-tools: add package with hotplug.d script for auto sharing

One of common use cases for SMB3 server in routers is sharing hotplugged
drives. Users make many attempts setting that up which often are not
optimal.

This script handles it in the cleanest way by using:
1. hotplug.d mount subsystem
2. runtime config in the /var/run/config/

It provides a working basic solution that can be later adjusted by
modifying provided hotplug script.

A pretty much idential solution was part of the samba36 package. It was
added in the OpenWrt commit ef1efa756e0d0 ("samba36: add package with
hotplug.d script for auto sharing") as an answer for feature required by
the Rosinson company.

Cc: Jo-Philipp Wich <jo@mein.io>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
(cherry picked from commit d0406d4c956e92f979802640832180eedd1a6efe)
lilik-openwrt-22.03
Rafał Miłecki 2 years ago
parent
commit
f8fec60bdc
2 changed files with 68 additions and 0 deletions
  1. +6
    -0
      net/ksmbd-tools/Makefile
  2. +62
    -0
      net/ksmbd-tools/files/ksmbd.hotplug

+ 6
- 0
net/ksmbd-tools/Makefile View File

@ -89,6 +89,12 @@ define Package/ksmbd-avahi-service/description
Ksmbd (smb/445) Daemon service via mDNS/DNS-SD.
endef
define Package/ksmbd-hotplug
$(call Package/ksmbd-tools/Default)
TITLE+= hotplug script for auto sharing
DEPENDS:=+blockd
endef
CONFIGURE_ARGS += \
--disable-shared \
--enable-static


+ 62
- 0
net/ksmbd-tools/files/ksmbd.hotplug View File

@ -0,0 +1,62 @@
#!/bin/sh
. /usr/share/libubox/jshn.sh
device_get_vars() {
json_init
json_load "$(ubus call block info)"
json_select devices || return 1
json_get_keys keys
for key in $keys
do
json_select $key
json_get_var device device
[ "$device" = "$1" ] && {
shift
json_get_vars $@
json_select ..
json_select ..
return 0
}
json_select ..
done
json_select ..
return 2
}
[ -f /var/run/config/ksmbd ] || {
mkdir -p /var/run/config && touch /var/run/config/ksmbd
}
[ "$ACTION" = "add" ] && {
device_get_vars $DEVICE label mount || {
logger -t ksmbd-hotplug "Failed to get $DEVICE info"
exit 1
}
[ -n "$mount" ] && {
uci -c /var/run/config batch <<-EOF
set ksmbd.$DEVICE="share"
set ksmbd.$DEVICE.name="${label:-$DEVICE}"
set ksmbd.$DEVICE.path="$mount"
set ksmbd.$DEVICE.browseable="yes"
set ksmbd.$DEVICE.read_only="yes"
set ksmbd.$DEVICE.guest_ok="yes"
commit ksmbd
EOF
/etc/init.d/ksmbd reload
}
}
[ "$ACTION" = "remove" ] && {
uci -c /var/run/config batch <<-EOF
delete ksmbd.$DEVICE
commit ksmbd
EOF
/etc/init.d/ksmbd reload
}

Loading…
Cancel
Save