From 9b593a88b07217315c239ca92d68d2754a3d062d Mon Sep 17 00:00:00 2001
From: springsunx <yearnsun@gmail.com>
Date: Sat, 1 Feb 2020 16:25:54 +0800
Subject: [PATCH] add package luci-app-nfs (#2908)

add nfs manage
---
 package/lean/luci-app-nfs/Makefile            |  18 ++++
 .../luci-app-nfs/luasrc/controller/nfs.lua    |   8 ++
 .../luci-app-nfs/luasrc/model/cbi/nfs.lua     |  65 +++++++++++++
 package/lean/luci-app-nfs/po/zh_Hans/nfs.po   |  44 +++++++++
 .../luci-app-nfs/po/zh_Hans/nfs.zh-cn.lmo     | Bin 0 -> 288 bytes
 package/lean/luci-app-nfs/root/etc/config/nfs |   6 ++
 package/lean/luci-app-nfs/root/etc/init.d/nfs |  86 ++++++++++++++++++
 .../luci-app-nfs/root/etc/uci-defaults/nfs    |  14 +++
 8 files changed, 241 insertions(+)
 create mode 100644 package/lean/luci-app-nfs/Makefile
 create mode 100644 package/lean/luci-app-nfs/luasrc/controller/nfs.lua
 create mode 100644 package/lean/luci-app-nfs/luasrc/model/cbi/nfs.lua
 create mode 100644 package/lean/luci-app-nfs/po/zh_Hans/nfs.po
 create mode 100644 package/lean/luci-app-nfs/po/zh_Hans/nfs.zh-cn.lmo
 create mode 100644 package/lean/luci-app-nfs/root/etc/config/nfs
 create mode 100644 package/lean/luci-app-nfs/root/etc/init.d/nfs
 create mode 100644 package/lean/luci-app-nfs/root/etc/uci-defaults/nfs

diff --git a/package/lean/luci-app-nfs/Makefile b/package/lean/luci-app-nfs/Makefile
new file mode 100644
index 000000000..f4b299e01
--- /dev/null
+++ b/package/lean/luci-app-nfs/Makefile
@@ -0,0 +1,18 @@
+# Copyright (C) 2016 Openwrt.org
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for nfs
+LUCI_DEPENDS:=
+LUCI_PKGARCH:=all
+PKG_NAME:=luci-app-nfs
+PKG_VERSION:=1.0
+PKG_RELEASE:=1
+
+include $(TOPDIR)/feeds/luci/luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
+
diff --git a/package/lean/luci-app-nfs/luasrc/controller/nfs.lua b/package/lean/luci-app-nfs/luasrc/controller/nfs.lua
new file mode 100644
index 000000000..9807fb213
--- /dev/null
+++ b/package/lean/luci-app-nfs/luasrc/controller/nfs.lua
@@ -0,0 +1,8 @@
+module("luci.controller.nfs", package.seeall)
+
+function index()
+	if not nixio.fs.access("/etc/config/nfs") then
+		return
+	end
+	entry({"admin", "nas", "nfs"}, cbi("nfs"), _("NFS Manage"), 5).dependent = true
+end
diff --git a/package/lean/luci-app-nfs/luasrc/model/cbi/nfs.lua b/package/lean/luci-app-nfs/luasrc/model/cbi/nfs.lua
new file mode 100644
index 000000000..3c3267752
--- /dev/null
+++ b/package/lean/luci-app-nfs/luasrc/model/cbi/nfs.lua
@@ -0,0 +1,65 @@
+local fs = require "nixio.fs"
+
+m = Map("nfs", translate("NFS Manage"))
+
+-- NFS Share --
+s = m:section(TypedSection, "share", translate("Shared Directories"))
+s.anonymous = true
+s.addremove = true
+s.template = "cbi/tblsection"
+
+en = s:option(Flag, "enabled", translate("Enable"))
+en.rmempty = false
+en.default = "1"
+
+ph1 = s:option(Value, "path", translate("Path"))
+ph1.placeholder = "/mnt"
+ph1.rmempty = false
+ph1.optional = false
+
+ct = s:option(Value, "clients", translate("Clients"))
+ct.placeholder = "192.168.1.0/24"
+ct.rmempty = false
+ct.optional = false
+
+op = s:option(Value, "options", translate("options"))
+op.placeholder = "rw,sync,root_squash,all_squash,insecure,no_subtree_check"
+op.rmempty = false
+op.optional = false
+
+-- NFS Mount --
+c = m:section(TypedSection, "mount", translate("Mounted Points"))
+c.anonymous = true
+c.addremove = true
+c.template = "cbi/tblsection"
+
+en = c:option(Flag, "enabled", translate("Enable"))
+en.default = "1"
+en.rmempty = false
+
+sr = c:option(Value, "source", translate("source"))
+sr.placeholder = "192.168.1.1:/mnt/*"
+sr.rmempty = false
+sr.optional = false
+
+ph2 = c:option(Value, "target", translate("target"))
+ph2.placeholder = "/mnt/nfs/*"
+ph2.rmempty = false
+ph2.optional = false
+
+op = c:option(Value, "options", translate("options"))
+op.placeholder = "rw,nolock"
+op.rmempty = false
+op.optional = false
+
+de = c:option(Value, "delay", translate("delay"))
+de.placeholder = "5"
+de.rmempty = false
+de.optional = false
+
+if nixio.fs.access("/etc/config/fstab") then
+  ph1.titleref = luci.dispatcher.build_url("admin", "system", "mounts")
+  ph2.titleref = luci.dispatcher.build_url("admin", "system", "mounts")
+end
+
+return m
diff --git a/package/lean/luci-app-nfs/po/zh_Hans/nfs.po b/package/lean/luci-app-nfs/po/zh_Hans/nfs.po
new file mode 100644
index 000000000..1ae9fab84
--- /dev/null
+++ b/package/lean/luci-app-nfs/po/zh_Hans/nfs.po
@@ -0,0 +1,44 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-03-1\n"
+"PO-Revision-Date: 2016-03-1 21:36+0800\n"
+"Last-Translator: leenchan\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language-Team: \n"
+"X-Generator: Poedit 1.8.1\n"
+
+msgid "NFS Manage"
+msgstr "NFS 管理"
+
+msgid "Shared Directories"
+msgstr "共享目录"
+
+msgid "Enable"
+msgstr "启用"
+
+msgid "Path"
+msgstr "路径"
+
+msgid "Clients"
+msgstr "允许的客户端"
+
+msgid "Mounted Points"
+msgstr "已挂载的目录"
+
+msgid "source"
+msgstr "源目录"
+
+msgid "target"
+msgstr "挂载到"
+
+msgid "options"
+msgstr "选项"
+
+msgid "delay"
+msgstr "延迟时间"
diff --git a/package/lean/luci-app-nfs/po/zh_Hans/nfs.zh-cn.lmo b/package/lean/luci-app-nfs/po/zh_Hans/nfs.zh-cn.lmo
new file mode 100644
index 0000000000000000000000000000000000000000..76efe6406c1432a9f8e19c9d622df6a955f2c292
GIT binary patch
literal 288
zcmeZs3s!i(ZsGF@Z43-gTQ@%0wfgz&bx-$BeL7+N^C>GB7+!2&|8!pqNUrh4x*gAF
zwLD$7=vl}1=d0HP#kOyH*3<N2?_QuVL>B|Yvt1KlOa_SL(~b=c3=A(DI$ti_3DmQD
z+l&44pH1KPa{3m{*WAlF<1YmPrFlSD=fza}_|J;@Kz0TYv*q(Hc4WP{xdg~o0P!mh
z2}JK@SFr=KB|!YvnL(%aDfWZdAiy=p=3Jnz>C`$PI{=6|=jq*e68~#U0gw&CJd1rf
s@1;Bb?gFxHfLLgwORvh~{Z9*lYz+|qXyb{!2O8Bu?uh|nP9UxU0Bsd?n*aa+

literal 0
HcmV?d00001

diff --git a/package/lean/luci-app-nfs/root/etc/config/nfs b/package/lean/luci-app-nfs/root/etc/config/nfs
new file mode 100644
index 000000000..739584656
--- /dev/null
+++ b/package/lean/luci-app-nfs/root/etc/config/nfs
@@ -0,0 +1,6 @@
+
+config share
+	option enabled '0'
+	option path '/mnt'
+	option clients '*'
+	option options 'rw,sync,root_squash,all_squash,insecure,no_subtree_check'
diff --git a/package/lean/luci-app-nfs/root/etc/init.d/nfs b/package/lean/luci-app-nfs/root/etc/init.d/nfs
new file mode 100644
index 000000000..8930bea33
--- /dev/null
+++ b/package/lean/luci-app-nfs/root/etc/init.d/nfs
@@ -0,0 +1,86 @@
+#!/bin/sh /etc/rc.common
+START=45
+STOP=99
+NAME="nfs"
+
+nfs_share() {
+    local config="$1"
+    local enabled
+    local path
+    local clients
+    local options
+
+    config_get_bool enabled "$config" enabled 0
+
+    for opt in path clients options
+    do
+        config_get "$opt" "$config" "$opt"
+    done
+
+    if [ "$enabled" = 1 ]; then
+        grep -qs $path /etc/exports
+        if [ $? -ne 0 ]; then
+            echo -e "$path\t$clients($options)" >>/etc/exports
+            exportfs -r
+        fi
+    elif [ "$enabled" = 0 ]; then
+        exportfs -u | grep -qs $path
+        if [ $? -eq 0 ]; then
+            exportfs -u $clients:$path
+        fi
+    fi
+    exportfs -r
+}
+
+nfs_share_stop() {
+    exportfs -au &>/dev/null
+}
+
+nfs_mount() {
+    local config="$1"
+    local enabled
+    local target
+    local source
+    local options
+    local delay
+
+    config_get_bool enabled "$config" enabled 0
+
+    for opt in target source options delay
+    do
+        config_get "$opt" "$config" "$opt"
+    done
+
+    if [ "$enabled" = 1 ]; then
+        if [ "$delay" -a $delay -gt 0 ]; then
+            logger "NetMount: Sleep $delay seconds before mount"
+            sleep $delay
+        fi
+        grep -qs $target /proc/mounts
+        if [ $? -ne 0 ]; then
+            mkdir -p $target
+            logger "NetMount: Mounting $source in $target"
+            mount -t nfs -o $options $source $target
+        fi
+    elif [ "$enabled" = 0 ]; then
+        if grep -qs $target /proc/mounts; then
+            umount -fr $target
+            sleep $delay
+        fi
+    fi
+}
+
+start() {
+    config_load "$NAME"
+    config_foreach nfs_share share
+    config_foreach nfs_mount mount
+}
+
+stop() {
+    nfs_share_stop
+}
+
+restart() {
+    echo > /etc/exports
+    start
+}
diff --git a/package/lean/luci-app-nfs/root/etc/uci-defaults/nfs b/package/lean/luci-app-nfs/root/etc/uci-defaults/nfs
new file mode 100644
index 000000000..f7aa1397b
--- /dev/null
+++ b/package/lean/luci-app-nfs/root/etc/uci-defaults/nfs
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+	delete ucitrack.@nfs[-1]
+	add ucitrack nfs
+	set ucitrack.@nfs[-1].init=nfs
+	commit ucitrack
+EOF
+
+/etc/init.d/nfs enable && /etc/init.d/nfs restart
+
+rm -f /tmp/luci-indexcache
+
+exit 0