Skip to content
Permalink
Browse files

samba36: add package with hotplug.d script for auto sharing

The new samba36-hotplug package provides a hotplug.d script for the
"mount" subsystem. It automatically shares every mounted block device.

It works by updating /var/run/config/samba file which:
1) Is read by procd init script
2) Gets wiped on reboot providing a consistent state
3) Can be safely updated without flash wearing or conflicting with user
   changes being made in /etc/config/samba

Cc: Rosy Song <rosysong@rosinson.com>
Cc: Jo-Philipp Wich <jo@mein.io>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
  • Loading branch information...
Rafał Miłecki
Rafał Miłecki committed Dec 26, 2018
1 parent 5a59e2c commit ef1efa756e0d0caef41216719dcc72c71b31d8ff
Showing with 68 additions and 0 deletions.
  1. +12 −0 package/network/services/samba36/Makefile
  2. +56 −0 package/network/services/samba36/files/samba.hotplug
@@ -43,6 +43,12 @@ define Package/samba36-server
DEPENDS:=+USE_GLIBC:librt $(ICONV_DEPENDS)
endef

define Package/samba36-hotplug
$(call Package/samba/Default)
TITLE+= hotplug script for auto sharing
DEPENDS:=+blockd
endef

define Package/samba36-client
$(call Package/samba/Default)
TITLE+= client
@@ -161,6 +167,11 @@ define Package/samba36-server/install
$(LN) samba_multicall $(1)/usr/sbin/smbpasswd
endef

define Package/samba36-hotplug/install
$(INSTALL_DIR) $(1)/etc/hotplug.d/mount
$(INSTALL_CONF) ./files/samba.hotplug $(1)/etc/hotplug.d/mount/60-samba
endef

define Package/samba36-client/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_BIN)/smbclient $(1)/usr/sbin
@@ -174,5 +185,6 @@ endef

$(eval $(call BuildPackage,samba36-client))
$(eval $(call BuildPackage,samba36-server))
$(eval $(call BuildPackage,samba36-hotplug))
$(eval $(call BuildPackage,samba36-net))

@@ -0,0 +1,56 @@
#!/bin/sh

. /usr/share/libubox/jshn.sh

device_get_vars() {
json_init
json_load "$(ubus call block info)"

json_select devices

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 ..
break
}

json_select ..
done

json_select ..
}

[ -f /var/run/config/samba ] || {
mkdir -p /var/run/config && touch /var/run/config/samba
}

[ "$ACTION" = "add" ] && {
device_get_vars $DEVICE label mount
[ -n "$mount" ] && {
uci -c /var/run/config batch <<-EOF
set samba.$DEVICE="sambashare"
set samba.$DEVICE.name="$label"
set samba.$DEVICE.path="$mount"
set samba.$DEVICE.browseable="yes"
set samba.$DEVICE.read_only="yes"
set samba.$DEVICE.guest_ok="yes"
commit samba
EOF
/etc/init.d/samba reload
}
}

[ "$ACTION" = "remove" ] && {
uci -c /var/run/config batch <<-EOF
delete samba.$DEVICE
commit samba
EOF
/etc/init.d/samba reload
}

0 comments on commit ef1efa7

Please sign in to comment.
You can’t perform that action at this time.