From a906154ab93bd8eac06c7012c016ddca018c6b68 Mon Sep 17 00:00:00 2001 From: Lienol <23146169+Lienol@users.noreply.github.com> Date: Fri, 5 Jul 2024 19:22:30 +0800 Subject: [PATCH] autosamba: add package --- package/public/autosamba/Makefile | 35 +++++++++ package/public/autosamba/files/20-smb | 105 ++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 package/public/autosamba/Makefile create mode 100644 package/public/autosamba/files/20-smb diff --git a/package/public/autosamba/Makefile b/package/public/autosamba/Makefile new file mode 100644 index 0000000000..7518c31200 --- /dev/null +++ b/package/public/autosamba/Makefile @@ -0,0 +1,35 @@ +# +# Copyright (C) 2010-2011 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=autosamba +PKG_VERSION:=1 +PKG_RELEASE:=12 +PKG_ARCH:=all + +include $(INCLUDE_DIR)/package.mk + +define Package/autosamba + TITLE:=Samba autoconfig hotplug script. + MAINTAINER:=Lean + DEPENDS:=+luci-app-samba +wsdd2 +endef + +define Package/autosamba/description +A hotplug script to config Samba share automatically. +endef + +define Build/Compile +endef + +define Package/autosamba/install + $(INSTALL_DIR) $(1)/etc/hotplug.d/block + $(INSTALL_BIN) ./files/20-smb $(1)/etc/hotplug.d/block/20-smb +endef + +$(eval $(call BuildPackage,autosamba)) diff --git a/package/public/autosamba/files/20-smb b/package/public/autosamba/files/20-smb new file mode 100644 index 0000000000..2044e647c3 --- /dev/null +++ b/package/public/autosamba/files/20-smb @@ -0,0 +1,105 @@ +#!/bin/sh + +# +# D-Team Technology Co.,Ltd. ShenZhen +# 作者:Vic +# +# 警告:对着屏幕的哥们,我们允许你使用此脚本,但不允许你抹去作者的信息,请保留这段话。 +# + +. /lib/functions.sh +. /lib/functions/service.sh + +global=0 +config_file="/etc/config/samba" + +wait_for_init() { + for i in `seq 30` + do + [ -e /tmp/procd.done ] || { + sleep 1; continue; + } + return + done +} + +smb_handle() { + config_get path $1 path + if [ "$path" = "$2" ] ;then + global=1 + fi +} + +chk_en() { + config_get_bool autoshare $1 autoshare 1 + [ $autoshare -eq 0 ] && exit +} + +config_load samba +config_foreach chk_en samba + +device=`basename $DEVPATH` + +case "$ACTION" in + add) + + case "$device" in + sd*);; + md*);; + hd*);; + mmcblk*);; + *) return;; + esac + + path="/dev/$device" + + wait_for_init + + cat /proc/mounts | grep -v '/boot\|/opt' | while read j + do + str=${j%% *} + if [ "$str" == $path ];then + strr=${j#* } + target=${strr%% *} + global=0 + config_foreach smb_handle sambashare $target + name=${target#*/mnt/} + + if [ $global -eq 0 ] ;then + echo -e "\n\nconfig sambashare" >> $config_file + echo -e "\toption auto '1'" >> $config_file + echo -e "\toption name '$name'" >> $config_file + echo -e "\toption path '$target'" >> $config_file + echo -e "\toption read_only 'no'" >> $config_file + echo -e "\toption guest_ok 'yes'" >> $config_file + echo -e "\toption create_mask '0666'" >> $config_file + echo -e "\toption dir_mask '0777'" >> $config_file + echo -e "\toption device '$device'" >> $config_file + /etc/init.d/samba reload + return + fi + fi + done + ;; + + remove) + i=0 + while true + do + dev=`uci get samba.@sambashare[$i].device` + [ $? -ne 0 ] && break + + [ "$dev" = "$device" ] && { + auto=`uci get samba.@sambashare[$i].auto` + [ $auto = "1" ] && { + mount_dir=`uci get samba.@sambashare[$i].name` + uci delete samba.@sambashare[$i] + uci commit + /etc/init.d/samba reload + return + } + } + let i+=1 + done + ;; +esac