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 000000000..76efe6406 Binary files /dev/null and b/package/lean/luci-app-nfs/po/zh_Hans/nfs.zh-cn.lmo differ 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