Merge Mainline
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
1a8c4210ee
@ -27,7 +27,7 @@ define dl_method
|
|||||||
$(strip \
|
$(strip \
|
||||||
$(if $(filter git,$(2)),$(call dl_method_git,$(1),$(2)),
|
$(if $(filter git,$(2)),$(call dl_method_git,$(1),$(2)),
|
||||||
$(if $(2),$(2), \
|
$(if $(2),$(2), \
|
||||||
$(if $(filter @OPENWRT @APACHE/% @DEBIAN/% @GHCODELOAD/% @GHREPO/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \
|
$(if $(filter @OPENWRT @APACHE/% @DEBIAN/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \
|
||||||
$(if $(filter git://%,$(1)),$(call dl_method_git,$(1),$(2)), \
|
$(if $(filter git://%,$(1)),$(call dl_method_git,$(1),$(2)), \
|
||||||
$(if $(filter svn://%,$(1)),svn, \
|
$(if $(filter svn://%,$(1)),svn, \
|
||||||
$(if $(filter cvs://%,$(1)),cvs, \
|
$(if $(filter cvs://%,$(1)),cvs, \
|
||||||
|
|||||||
@ -289,6 +289,7 @@ if [ -n "$CONF_RESTORE" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
|
[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
|
||||||
|
v "Restoring config files..."
|
||||||
tar -C / -x${TAR_V}zf "$CONF_RESTORE"
|
tar -C / -x${TAR_V}zf "$CONF_RESTORE"
|
||||||
exit $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -1,54 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2014-2018 OpenWrt-dist
|
|
||||||
# Copyright (C) 2014-2018 Jian Chang <aa65535@live.com>
|
|
||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=ChinaDNS
|
|
||||||
PKG_VERSION:=2.0.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHREPO/lrinQVQ/openwrt-chinadns/releases/download/v$(PKG_VERSION)
|
|
||||||
PKG_HASH:=caab37a27c444d917f0b92c65d7082543dc22acc7c24322be07a108a44794369
|
|
||||||
|
|
||||||
PKG_LICENSE:=GPLv3
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=Jian Chang <aa65535@live.com>
|
|
||||||
|
|
||||||
PKG_FIXUP:=autoreconf
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_INSTALL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/ChinaDNS
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=Protect yourself against DNS poisoning in China.
|
|
||||||
URL:=https://github.com/shadowsocks/ChinaDNS
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/ChinaDNS/description
|
|
||||||
Protect yourself against DNS poisoning in China.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/ChinaDNS/conffiles
|
|
||||||
/etc/chinadns_chnroute.txt
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/ChinaDNS/install
|
|
||||||
$(INSTALL_DIR) $(1)/etc
|
|
||||||
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/usr/share/chnroute.txt $(1)/etc/chinadns_chnroute.txt
|
|
||||||
$(INSTALL_DIR) $(1)/usr/sbin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/chinadns $(1)/usr/sbin
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,ChinaDNS))
|
|
||||||
@ -1,96 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2015-2016 OpenWrt.org
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=GoQuiet
|
|
||||||
PKG_VERSION:=1.2.2
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://github.com/cbeuw/GoQuiet.git
|
|
||||||
PKG_SOURCE_VERSION:=013cdfdf72000dcd4691799c37a0cf960ab4c82f
|
|
||||||
PKG_MIRROR_HASH:=c9c97463e5286e8ad10de5e86512b98f60672235c47cfd9696188a16496fc56c
|
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-3.0
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_GQ_CLIENT_COMPRESS_UPX \
|
|
||||||
CONFIG_GQ_SERVER_COMPRESS_UPX
|
|
||||||
|
|
||||||
GO_PKG:=github.com/cbeuw/GoQuiet
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
GO_PKG_LDFLAGS_X:=main.version=$(PKG_VERSION)
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/GoQuiet/template
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=GoQuiet
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS) +libpthread
|
|
||||||
URL:=https://github.com/cbeuw/GoQuiet
|
|
||||||
SUBMENU:=Web Servers/Proxies
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gq-client
|
|
||||||
$(call Package/GoQuiet/template)
|
|
||||||
TITLE+= Client
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gq-server
|
|
||||||
$(call Package/GoQuiet/template)
|
|
||||||
TITLE+= Server
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gq-client/config
|
|
||||||
config GQ_CLIENT_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gq-server/config
|
|
||||||
config GQ_SERVER_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
GO_PKG_BUILD_VARS += GO111MODULE=auto
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(eval GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/gq-client)
|
|
||||||
$(call GoPackage/Build/Configure)
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_GQ_CLIENT_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/gq-client
|
|
||||||
endif
|
|
||||||
$(eval GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/gq-server)
|
|
||||||
$(call GoPackage/Build/Configure)
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_GQ_SERVER_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/gq-server
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gq-client/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/gq-client $(1)/usr/bin/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gq-server/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/gq-server $(1)/usr/bin/
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,gq-client))
|
|
||||||
$(eval $(call GoBinPackage,gq-server))
|
|
||||||
$(eval $(call BuildPackage,gq-client))
|
|
||||||
$(eval $(call BuildPackage,gq-server))
|
|
||||||
@ -1,75 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE.txt for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=annie
|
|
||||||
PKG_VERSION:=0.10.3
|
|
||||||
PKG_RELEASE:=2
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://github.com/iawia002/annie.git
|
|
||||||
PKG_SOURCE_DATE:=2020-12-15
|
|
||||||
PKG_SOURCE_VERSION:=abc3c9df18173c91a5ca7a77fecc0665dea01aa1
|
|
||||||
PKG_MIRROR_HASH:=d49d79c342377a1edbf6870f7dd49cb4de70718934151793298004db72fc538a
|
|
||||||
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_ANNIE_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_ANNIE_COMPRESS_UPX
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
GO_PKG:=github.com/iawia002/annie
|
|
||||||
GO_PKG_BUILD_PKG:=$$(GO_PKG)
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/annie
|
|
||||||
SECTION:=multimedia
|
|
||||||
CATEGORY:=Multimedia
|
|
||||||
TITLE:=Fast, simple and clean video downloader
|
|
||||||
URL:=https://github.com/iawia002/annie
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ffmpeg
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/annie/description
|
|
||||||
Annie is a fast, simple and clean video downloader built with Go.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/annie/config
|
|
||||||
config ANNIE_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config ANNIE_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_ANNIE_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_ANNIE_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/annie
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,annie))
|
|
||||||
$(eval $(call BuildPackage,annie))
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=bpytop
|
|
||||||
PKG_VERSION:=1.0.62
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PYPI_NAME:=bpytop
|
|
||||||
PKG_HASH:=9a408ffe6575c4e20621215e532b206fe6b6d2e7e4bd053ab4b4906e6d7ba909
|
|
||||||
|
|
||||||
PKG_LICENSE:=Apache-2.0
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/python/pypi.mk
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/python/python3-package.mk
|
|
||||||
|
|
||||||
define Package/bpytop
|
|
||||||
SECTION:=admin
|
|
||||||
CATEGORY:=Administration
|
|
||||||
TITLE:=Python port of bashtop
|
|
||||||
URL:=https://github.com/aristocratos/bpytop
|
|
||||||
DEPENDS:=+python3-psutil +python3-setuptools
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/bpytop/description
|
|
||||||
Resource monitor that shows usage and stats for
|
|
||||||
processor, memory, disks, network and processes.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/bpytop/install
|
|
||||||
$(call Py3Package/$(1)/install,$(PKG_INSTALL_DIR))
|
|
||||||
$(INSTALL_DIR) $(1)
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/* $(1)/
|
|
||||||
$(INSTALL_DIR) $(1)/usr/share
|
|
||||||
$(CP) $(PKG_BUILD_DIR)/bpytop-themes $(1)/usr/share/bpytop
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call Py3Package,bpytop))
|
|
||||||
$(eval $(call BuildPackage,bpytop))
|
|
||||||
#$(eval $(call BuildPackage,bpytop-src))
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=brook
|
|
||||||
PKG_VERSION:=20210214
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/txthinking/brook/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=a8e2e989f6d09e36c1fbe8593404d53a0615dc93e91a0be94dda898f0d55ff1d
|
|
||||||
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
PKG_LICENSE:=GPL-3.0
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_BROOK_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_BROOK_COMPRESS_UPX
|
|
||||||
|
|
||||||
GO_PKG:=github.com/txthinking/brook
|
|
||||||
GO_PKG_BUILD_PKG:=github.com/txthinking/brook/cli/brook
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/brook
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
SUBMENU:=Web Servers/Proxies
|
|
||||||
TITLE:=A cross-platform proxy software
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
|
||||||
URL:=https://github.com/txthinking/brook
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/brook/description
|
|
||||||
Brook is a cross-platform strong encryption and not detectable proxy.
|
|
||||||
Zero-Configuration.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/brook/config
|
|
||||||
config BROOK_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config BROOK_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_BROOK_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_BROOK_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/brook
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,brook))
|
|
||||||
$(eval $(call BuildPackage,brook))
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
From bd7bc7ae9f46a8678c05dca78081033d6e2af497 Mon Sep 17 00:00:00 2001
|
|
||||||
From: CN_SZTL <cnsztl@project-openwrt.eu.org>
|
|
||||||
Date: Sat, 27 Feb 2021 15:05:31 +0800
|
|
||||||
Subject: [PATCH] cli: bump to v2.3.0
|
|
||||||
|
|
||||||
Signed-off-by: CN_SZTL <cnsztl@project-openwrt.eu.org>
|
|
||||||
---
|
|
||||||
cli/brook/main.go | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/cli/brook/main.go b/cli/brook/main.go
|
|
||||||
index 1f715ea..3c88eb2 100644
|
|
||||||
--- a/cli/brook/main.go
|
|
||||||
+++ b/cli/brook/main.go
|
|
||||||
@@ -28,7 +28,7 @@ import (
|
|
||||||
_ "net/http/pprof"
|
|
||||||
|
|
||||||
"github.com/txthinking/brook"
|
|
||||||
- "github.com/urfave/cli"
|
|
||||||
+ "github.com/urfave/cli/v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
var debug bool
|
|
||||||
--
|
|
||||||
2.17.1
|
|
||||||
|
|
||||||
@ -1,139 +0,0 @@
|
|||||||
From d626d772dd2ab02678c62714885e388966f09f55 Mon Sep 17 00:00:00 2001
|
|
||||||
From: CN_SZTL <cnsztl@project-openwrt.eu.org>
|
|
||||||
Date: Sat, 27 Feb 2021 15:05:49 +0800
|
|
||||||
Subject: [PATCH] go: init go modules
|
|
||||||
|
|
||||||
Signed-off-by: CN_SZTL <cnsztl@project-openwrt.eu.org>
|
|
||||||
---
|
|
||||||
go.mod | 25 +++++++++++++++++
|
|
||||||
go.sum | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
2 files changed, 111 insertions(+)
|
|
||||||
create mode 100644 go.mod
|
|
||||||
create mode 100644 go.sum
|
|
||||||
|
|
||||||
diff --git a/go.mod b/go.mod
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..7354e7d
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/go.mod
|
|
||||||
@@ -0,0 +1,25 @@
|
|
||||||
+module github.com/txthinking/brook
|
|
||||||
+
|
|
||||||
+go 1.16
|
|
||||||
+
|
|
||||||
+require (
|
|
||||||
+ github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
|
|
||||||
+ github.com/gorilla/mux v1.8.0
|
|
||||||
+ github.com/gorilla/websocket v1.4.2
|
|
||||||
+ github.com/mdp/qrterminal v1.0.1
|
|
||||||
+ github.com/miekg/dns v1.1.40
|
|
||||||
+ github.com/patrickmn/go-cache v2.1.0+incompatible
|
|
||||||
+ github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
|
||||||
+ github.com/tdewolff/minify v2.3.6+incompatible
|
|
||||||
+ github.com/tdewolff/parse v2.3.4+incompatible // indirect
|
|
||||||
+ github.com/txthinking/encrypt v0.0.0-20210121062928-5ab4dd51a0e9
|
|
||||||
+ github.com/txthinking/runnergroup v0.0.0-20200327135940-540a793bb997
|
|
||||||
+ github.com/txthinking/socks5 v0.0.0-20210106113028-328af325654e
|
|
||||||
+ github.com/txthinking/x v0.0.0-20201210150116-a8015a742c8c
|
|
||||||
+ github.com/urfave/cli/v2 v2.3.0
|
|
||||||
+ github.com/urfave/negroni v1.0.0
|
|
||||||
+ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
|
|
||||||
+ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
|
|
||||||
+ golang.org/x/sys v0.0.0-20210227040730-b0d1d43c014d // indirect
|
|
||||||
+ golang.org/x/text v0.3.5 // indirect
|
|
||||||
+)
|
|
||||||
diff --git a/go.sum b/go.sum
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..051ce2d
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/go.sum
|
|
||||||
@@ -0,0 +1,86 @@
|
|
||||||
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
|
||||||
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
|
|
||||||
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
|
||||||
+github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
|
|
||||||
+github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
|
||||||
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
|
||||||
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
|
||||||
+github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
|
||||||
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
|
||||||
+github.com/mdp/qrterminal v1.0.1 h1:07+fzVDlPuBlXS8tB0ktTAyf+Lp1j2+2zK3fBOL5b7c=
|
|
||||||
+github.com/mdp/qrterminal v1.0.1/go.mod h1:Z33WhxQe9B6CdW37HaVqcRKzP+kByF3q/qLxOGe12xQ=
|
|
||||||
+github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs=
|
|
||||||
+github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
|
||||||
+github.com/miekg/dns v1.1.40 h1:pyyPFfGMnciYUk/mXpKkVmeMQjfXqt3FAJ2hy7tPiLA=
|
|
||||||
+github.com/miekg/dns v1.1.40/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
|
||||||
+github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
|
|
||||||
+github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
|
||||||
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
|
||||||
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
+github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
|
||||||
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
|
||||||
+github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
|
||||||
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
|
||||||
+github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
|
||||||
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
|
||||||
+github.com/tdewolff/minify v2.3.6+incompatible h1:2hw5/9ZvxhWLvBUnHE06gElGYz+Jv9R4Eys0XUzItYo=
|
|
||||||
+github.com/tdewolff/minify v2.3.6+incompatible/go.mod h1:9Ov578KJUmAWpS6NeZwRZyT56Uf6o3Mcz9CEsg8USYs=
|
|
||||||
+github.com/tdewolff/parse v2.3.4+incompatible h1:x05/cnGwIMf4ceLuDMBOdQ1qGniMoxpP46ghf0Qzh38=
|
|
||||||
+github.com/tdewolff/parse v2.3.4+incompatible/go.mod h1:8oBwCsVmUkgHO8M5iCzSIDtpzXOT0WXX9cWhz+bIzJQ=
|
|
||||||
+github.com/txthinking/encrypt v0.0.0-20210121062928-5ab4dd51a0e9 h1:nqqcrK76wxumtdrYsK9dNRpBbXKk0DPGOe2sTPKu25k=
|
|
||||||
+github.com/txthinking/encrypt v0.0.0-20210121062928-5ab4dd51a0e9/go.mod h1:78N4pHirvbuhX3U2MJ3G0nxjmQtfaqHeYjvkHbw5Ho0=
|
|
||||||
+github.com/txthinking/runnergroup v0.0.0-20200327135940-540a793bb997 h1:vlDgnShahmE2XLslpr0hnzxfAmSj3JLX2CYi8Xct7G4=
|
|
||||||
+github.com/txthinking/runnergroup v0.0.0-20200327135940-540a793bb997/go.mod h1:CLUSJbazqETbaR+i0YAhXBICV9TrKH93pziccMhmhpM=
|
|
||||||
+github.com/txthinking/socks5 v0.0.0-20210106113028-328af325654e h1:SUWQViHyUHr766NlUKB1Wr8QRVTaxez9sLl3pwobiHw=
|
|
||||||
+github.com/txthinking/socks5 v0.0.0-20210106113028-328af325654e/go.mod h1:d3n8NJ6QMRb6I/WAlp4z5ZPAoaeqDmX5NgVZA0mhe+I=
|
|
||||||
+github.com/txthinking/x v0.0.0-20201210150116-a8015a742c8c h1:n3om7+DhvxNoBTcYul3jpeOTavBGKRjGW1GaLc8JsWc=
|
|
||||||
+github.com/txthinking/x v0.0.0-20201210150116-a8015a742c8c/go.mod h1:WgqbSEmUYSjEV3B1qmee/PpP2NYEz4bL9/+mF1ma+s4=
|
|
||||||
+github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
|
|
||||||
+github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
|
||||||
+github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc=
|
|
||||||
+github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
|
|
||||||
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
||||||
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
+golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
|
|
||||||
+golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
|
||||||
+golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
|
|
||||||
+golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
|
||||||
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
|
|
||||||
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
|
||||||
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
+golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
|
|
||||||
+golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
|
||||||
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw=
|
|
||||||
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
|
||||||
+golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
|
||||||
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
+golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
|
|
||||||
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
+golang.org/x/sys v0.0.0-20210227040730-b0d1d43c014d h1:9fH9JvLNoSpsDWcXJ4dSE3lZW99Z3OCUZLr07g60U6o=
|
|
||||||
+golang.org/x/sys v0.0.0-20210227040730-b0d1d43c014d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
+golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
|
||||||
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
|
||||||
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
|
||||||
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
|
||||||
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|
||||||
+golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
|
|
||||||
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|
||||||
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
+golang.org/x/tools v0.0.0-20191216052735-49a3e744a425 h1:VvQyQJN0tSuecqgcIxMWnnfG5kSmgy9KZR9sW3W5QeA=
|
|
||||||
+golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
|
||||||
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
|
|
||||||
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
|
||||||
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
|
||||||
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
+gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=
|
|
||||||
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
+rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY=
|
|
||||||
+rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs=
|
|
||||||
--
|
|
||||||
2.17.1
|
|
||||||
|
|
||||||
@ -1,77 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=CloudflareSpeedTest
|
|
||||||
PKG_VERSION:=1.4.9
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/XIU2/CloudflareSpeedTest/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=7b7a18b54eae74d70f18105cc9c74822ce05336b2b894c59a388f46430733dcd
|
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-3.0
|
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_CDNSPEEDTEST_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_CDNSPEEDTEST_COMPRESS_UPX
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
GO_PKG:=CloudflareSpeedTest
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/cdnspeedtest
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=Getting the fastest ips to your network of CDN
|
|
||||||
URL:=https://github.com/XIU2/CloudflareSpeedTest
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cdnspeedtest/config
|
|
||||||
config CDNSPEEDTEST_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config CDNSPEEDTEST_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_CDNSPEEDTEST_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_CDNSPEEDTEST_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/CloudflareSpeedTest
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cdnspeedtest/install
|
|
||||||
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/CloudflareSpeedTest $(1)/usr/bin/cdnspeedtest
|
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/usr/share/CloudflareSpeedTest
|
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/ip.txt $(1)/usr/share/CloudflareSpeedTest/
|
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/ipv6.txt $(1)/usr/share/CloudflareSpeedTest/
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,cdnspeedtest))
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=chinadns-ng
|
|
||||||
PKG_VERSION:=1.0-beta.24
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://github.com/zfl9/chinadns-ng.git
|
|
||||||
PKG_SOURCE_DATE:=2021-02-11
|
|
||||||
PKG_SOURCE_VERSION:=df3bb7c6310df9b3c0f874b7a0c38ea5ce0996cb
|
|
||||||
PKG_MIRROR_HASH:=4b0a159e1ecd81392a67b31528b0430afa991bfceef5dd60d2d843edfccb6b12
|
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-3.0
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=pexcn <i@pexcn.me>
|
|
||||||
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_INSTALL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/chinadns-ng
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=ChinaDNS next generation, refactoring with epoll and ipset.
|
|
||||||
URL:=https://github.com/zfl9/chinadns-ng
|
|
||||||
DEPENDS:=+ipset
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/chinadns-ng/description
|
|
||||||
ChinaDNS next generation, refactoring with epoll and ipset.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/chinadns-ng/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/chinadns-ng $(1)/usr/bin
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,chinadns-ng))
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
####
|
|
||||||
# File: /httplib/Makefile
|
|
||||||
# Project: ootoc-OpenWRT
|
|
||||||
# File Created: Sunday, 8th March 2020 10:45:13 pm
|
|
||||||
# Author: ElonH[EH](elonhhuang@gmail.com)
|
|
||||||
# License: GNU General Public License v3.0 or later(http://www.gnu.org/licenses/gpl-3.0-standalone.html)
|
|
||||||
# Copyright (C) 2020 [ElonH]
|
|
||||||
####
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=cpp-httplib
|
|
||||||
PKG_VERSION:=0.5.7
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/yhirose/cpp-httplib/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=27b7f6346bdeb1ead9d17bd7cea89d9ad491f50f0479081053cc6e5742a89e64
|
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=ElonH <elonhhuang@gmail.com>
|
|
||||||
|
|
||||||
HOST_BUILD_PARALLEL:=1
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
CMAKE_INSTALL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/host-build.mk
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(INCLUDE_DIR)/cmake.mk
|
|
||||||
|
|
||||||
define Package/cpp-httplib
|
|
||||||
SECTION:=lib
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
VARIANT:=lib
|
|
||||||
URL:=https://github.com/yhirose/cpp-httplib
|
|
||||||
TITLE:=A C++11 single-file header-only cross platform HTTP/HTTPS library.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cpp-httplib/description
|
|
||||||
A C++11 single-file header-only cross platform HTTP/HTTPS library.
|
|
||||||
It's extremely easy to setup. Just include `httplib.h` file in your code!
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call HostBuild))
|
|
||||||
$(eval $(call BuildPackage,cpp-httplib))
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2010 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:=cups-bjnp
|
|
||||||
PKG_VERSION:=2.0
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@SF/cups-bjnp
|
|
||||||
PKG_HASH:=2acb716680d66f1378cf8dcd45fedf7f72ccc9b66fa80214d6dcb042b5e3c9ab
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=cups
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/cups-bjnp
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=BJNP protocol backend for CUPS
|
|
||||||
URL:=http://sourceforge.net/projects/cups-bjnp/
|
|
||||||
DEPENDS:=cups
|
|
||||||
SUBMENU:=Printing
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-bjnp/description
|
|
||||||
CUPS backend for the canon printers using the proprietary USB over
|
|
||||||
IP BJNP protocol. This backend allows Cups to print over the network
|
|
||||||
to a Canon printer. It currently supports Cups 1.2 and Cups 1.3 and
|
|
||||||
is designed by reverse engineering.
|
|
||||||
endef
|
|
||||||
|
|
||||||
CONFIGURE_ARGS += --with-cupsbackenddir=$(STAGING_DIR)/usr/include/cups
|
|
||||||
|
|
||||||
TARGET_CFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib
|
|
||||||
|
|
||||||
define Package/cups-bjnp/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/cups/backend
|
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bjnp $(1)/usr/lib/cups/backend
|
|
||||||
endef
|
|
||||||
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,cups-bjnp))
|
|
||||||
@ -1,321 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2006-2016 OpenWrt.org
|
|
||||||
# Copyright (C) 2016 lede-project.org
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=cups
|
|
||||||
PKG_VERSION:=2.1.4
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-source.tar.gz
|
|
||||||
PKG_SOURCE_URL:=http://www.cups.org/software/$(PKG_VERSION)
|
|
||||||
PKG_HASH:=4b14fd833180ac529ebebea766a09094c2568bf8426e219cb3a1715304ef728d
|
|
||||||
|
|
||||||
TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/cups/Default
|
|
||||||
URL:=http://www.cups.org/
|
|
||||||
SUBMENU:=Printing
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
DEPENDS:=+libcups +libcupsmime +libcupscgi +libcupsppdc +libusb-1.0
|
|
||||||
TITLE:=Common UNIX Printing System (daemon)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups/description
|
|
||||||
Common UNIX Printing System (daemon)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups/conffiles
|
|
||||||
/etc/cups/classes.conf
|
|
||||||
/etc/cups/cupsd.conf
|
|
||||||
/etc/cups/printers.conf
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-bsd
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
DEPENDS:=+libcups
|
|
||||||
TITLE:=Common UNIX Printing System - BSD commands (old)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-bsd/description
|
|
||||||
Common UNIX Printing System - BSD commands (old)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-client
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
DEPENDS:=+libcups +libcupsimage +libcupsmime
|
|
||||||
TITLE:=Common UNIX Printing System - Client commands
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-client/conffiles
|
|
||||||
/etc/cups/client.conf
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-client/description
|
|
||||||
Common UNIX Printing System - Client commands
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-filters
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
DEPENDS:=+libcupsimage
|
|
||||||
TITLE:=Common UNIX Printing System - Filter
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-filters/description
|
|
||||||
Common UNIX Printing System - Filter
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-ppdc
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
DEPENDS:=+libcupsppdc
|
|
||||||
TITLE:=Common UNIX Printing System - PPDC utils
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-ppdc/description
|
|
||||||
Common UNIX Printing System - PPDC utils
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcups
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=libs
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
DEPENDS:=+zlib +libpthread +libpng +libjpeg
|
|
||||||
TITLE:=Common UNIX Printing System - Core library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcups/description
|
|
||||||
Common UNIX Printing System - Core library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupscgi
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=libs
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
DEPENDS:=+libcups
|
|
||||||
TITLE:=Common UNIX Printing System - CGI library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupscgi/description
|
|
||||||
Common UNIX Printing System - CGI library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsimage
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=libs
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
DEPENDS:=+libcups
|
|
||||||
TITLE:=Common UNIX Printing System - Image library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsimage/description
|
|
||||||
Common UNIX Printing System - Image library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsmime
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=libs
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
DEPENDS:=+libcups
|
|
||||||
TITLE:=Common UNIX Printing System - MIME library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsmime/description
|
|
||||||
Common UNIX Printing System - MIME library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsppdc
|
|
||||||
$(call Package/cups/Default)
|
|
||||||
SECTION:=libs
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
DEPENDS:=+libcups +libstdcpp
|
|
||||||
TITLE:=Common UNIX Printing System - PPDC library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsppdc/description
|
|
||||||
Common UNIX Printing System - PPDC library
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Configure
|
|
||||||
$(call Build/Configure/Default, \
|
|
||||||
--with-cups-user="nobody" \
|
|
||||||
--with-cups-group="nogroup" \
|
|
||||||
--with-system-groups="root" \
|
|
||||||
--with-pdftops="none" \
|
|
||||||
--without-perl \
|
|
||||||
--without-python \
|
|
||||||
--without-php \
|
|
||||||
--enable-default-shared \
|
|
||||||
--enable-shared \
|
|
||||||
--enable-image \
|
|
||||||
--enable-libusb \
|
|
||||||
--disable-acl \
|
|
||||||
--disable-dnssd \
|
|
||||||
--disable-dbus \
|
|
||||||
--disable-avahi \
|
|
||||||
--disable-launchd \
|
|
||||||
--disable-ldap \
|
|
||||||
--disable-pam \
|
|
||||||
--disable-slp \
|
|
||||||
--disable-gnutls \
|
|
||||||
--disable-openssl \
|
|
||||||
--disable-cdsassl \
|
|
||||||
--disable-ssl \
|
|
||||||
--disable-gssapi \
|
|
||||||
--disable-tiff, \
|
|
||||||
UNAME="Linux" \
|
|
||||||
LIBS="$(TARGET_LDFLAGS) -lz -lpng -ljpeg" \
|
|
||||||
)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(MAKE) -C $(PKG_BUILD_DIR) \
|
|
||||||
$(TARGET_CONFIGURE_OPTS) \
|
|
||||||
DSTROOT="$(PKG_INSTALL_DIR)" \
|
|
||||||
STRIP="/bin/true" \
|
|
||||||
all install
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups/install
|
|
||||||
rm -rf $(1)/etc/cups
|
|
||||||
$(INSTALL_DIR) $(1)/etc/cups
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/etc/cups/* $(1)/etc/cups/
|
|
||||||
rm -rf $(1)/etc/cups/certs
|
|
||||||
ln -sf /tmp $(1)/etc/cups/certs
|
|
||||||
rm -f $(1)/usr/bin/cups-config
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/cups
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/backend $(1)/usr/lib/cups
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/cgi-bin $(1)/usr/lib/cups
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/daemon $(1)/usr/lib/cups
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/driver $(1)/usr/lib/cups
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/monitor $(1)/usr/lib/cups
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/cups/filter
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/filter/{commandtops,pstops} \
|
|
||||||
$(PKG_INSTALL_DIR)/usr/lib/cups/filter/gziptoany \
|
|
||||||
$(1)/usr/lib/cups/filter
|
|
||||||
$(INSTALL_DIR) $(1)/usr/share/cups/templates
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/share/cups/templates/*.tmpl \
|
|
||||||
$(1)/usr/share/cups/templates/
|
|
||||||
$(INSTALL_DIR) $(1)/usr/share/cups/mime
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/share/cups/mime/* $(1)/usr/share/cups/mime/
|
|
||||||
### Do install docs: cups web interface relies on them
|
|
||||||
$(INSTALL_DIR) $(1)/usr/share/doc/cups
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/*.*html \
|
|
||||||
$(1)/usr/share/doc/cups/
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/*.css \
|
|
||||||
$(1)/usr/share/doc/cups/
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/*.txt \
|
|
||||||
$(1)/usr/share/doc/cups/
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/share/doc/cups/images \
|
|
||||||
$(1)/usr/share/doc/cups/
|
|
||||||
$(INSTALL_DIR) $(1)/usr/sbin
|
|
||||||
# overwrite default config with our own
|
|
||||||
$(CP) ./files/etc/cups/* $(1)/etc/cups/
|
|
||||||
# install initscript with priority 60
|
|
||||||
$(INSTALL_DIR) $(1)/etc/init.d
|
|
||||||
$(INSTALL_BIN) ./files/cupsd.init $(1)/etc/init.d/cupsd
|
|
||||||
$(INSTALL_BIN) \
|
|
||||||
$(PKG_INSTALL_DIR)/usr/sbin/{cupsctl,cupsd} \
|
|
||||||
$(1)/usr/sbin/
|
|
||||||
# needed for cups to find usb printers per http://wiki.openwrt.org/doc/howto/cups.server
|
|
||||||
chmod 700 $(1)/usr/lib/cups/backend/usb
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-bsd/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/{lprm,lpq,lpr} $(1)/usr/bin/
|
|
||||||
$(INSTALL_DIR) $(1)/usr/sbin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/lpc $(1)/usr/sbin/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-client/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) \
|
|
||||||
$(PKG_INSTALL_DIR)/usr/bin/{lp,cancel,cupstestppd,cupstestdsc} \
|
|
||||||
$(PKG_INSTALL_DIR)/usr/bin/{ipptool,lpoptions,lpstat} \
|
|
||||||
$(1)/usr/bin/
|
|
||||||
$(INSTALL_DIR) $(1)/usr/sbin
|
|
||||||
$(INSTALL_BIN) \
|
|
||||||
$(PKG_INSTALL_DIR)/usr/sbin/{cupsaccept,cupsaddsmb,cupsfilter} \
|
|
||||||
$(PKG_INSTALL_DIR)/usr/sbin/{lpadmin,lpinfo,lpmove} \
|
|
||||||
$(1)/usr/sbin/
|
|
||||||
(cd $(1)/usr/sbin; ln -sf cupsaccept accept; ln -sf cupsaccept cupsenable; ln -sf cupsaccept cupsdisable; ln -sf cupsaccept reject; ln -sf cupsaccept cupsreject;)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-filters/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/cups/filter
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cups/filter/{commandtops,gziptoany,pstops,rastertoepson,rastertohp,rastertolabel,rastertopwg} \
|
|
||||||
$(1)/usr/lib/cups/filter
|
|
||||||
(cd $(1)/usr/lib/cups/filter; ln -sf rastertolabel rastertodymo;)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cups-ppdc/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) \
|
|
||||||
$(PKG_INSTALL_DIR)/usr/bin/{ppdc,ppdhtml,ppdi,ppdmerge,ppdpo} \
|
|
||||||
$(1)/usr/bin/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcups/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcups.so* $(1)/usr/lib/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupscgi/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupscgi.so* $(1)/usr/lib/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsimage/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupsimage.so* $(1)/usr/lib/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsmime/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupsmime.so* $(1)/usr/lib/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libcupsppdc/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcupsppdc.so* $(1)/usr/lib/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/InstallDev
|
|
||||||
$(INSTALL_DIR) $(2)/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cups-config $(2)/bin/
|
|
||||||
$(INSTALL_DIR) $(1)/usr/include
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/include/cups $(1)/usr/include/
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcups*.so* $(1)/usr/lib/
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,cups))
|
|
||||||
$(eval $(call BuildPackage,libcups))
|
|
||||||
$(eval $(call BuildPackage,libcupscgi))
|
|
||||||
$(eval $(call BuildPackage,libcupsimage))
|
|
||||||
$(eval $(call BuildPackage,libcupsmime))
|
|
||||||
$(eval $(call BuildPackage,libcupsppdc))
|
|
||||||
$(eval $(call BuildPackage,cups-bsd))
|
|
||||||
$(eval $(call BuildPackage,cups-client))
|
|
||||||
$(eval $(call BuildPackage,cups-filters))
|
|
||||||
$(eval $(call BuildPackage,cups-ppdc))
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
# Copyright (C) 2006-2011 OpenWrt.org
|
|
||||||
|
|
||||||
START=50
|
|
||||||
|
|
||||||
start() {
|
|
||||||
mkdir -m 0755 -p /var/cache/cups
|
|
||||||
mkdir -m 0755 -p /var/cups
|
|
||||||
mkdir -m 0755 -p /var/spool/cups/tmp
|
|
||||||
service_start /usr/sbin/cupsd
|
|
||||||
}
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
service_stop /usr/sbin/cupsd
|
|
||||||
}
|
|
||||||
|
|
||||||
reload() {
|
|
||||||
service_reload /usr/sbin/cupsd
|
|
||||||
}
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
########################################################################
|
|
||||||
# #
|
|
||||||
# This is a sample class configuration file. This file is included #
|
|
||||||
# from the main configuration file (cups.conf) and lists all of the #
|
|
||||||
# printer classes known to the system. #
|
|
||||||
# #
|
|
||||||
########################################################################
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
########################################################################
|
|
||||||
# #
|
|
||||||
# This is the CUPS client configuration file. This file is used to #
|
|
||||||
# define client-specific parameters, such as the default server or #
|
|
||||||
# default encryption settings. #
|
|
||||||
# #
|
|
||||||
########################################################################
|
|
||||||
|
|
||||||
Encryption Never
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
########################################################################
|
|
||||||
# #
|
|
||||||
# This is the CUPS configuration file. If you are familiar with #
|
|
||||||
# Apache or any of the other popular web servers, we've followed the #
|
|
||||||
# same format. Any configuration variable used here has the same #
|
|
||||||
# semantics as the corresponding variable in Apache. If we need #
|
|
||||||
# different functionality then a different name is used to avoid #
|
|
||||||
# confusion... #
|
|
||||||
# #
|
|
||||||
########################################################################
|
|
||||||
|
|
||||||
|
|
||||||
AccessLog syslog
|
|
||||||
ErrorLog syslog
|
|
||||||
LogLevel info
|
|
||||||
PageLog syslog
|
|
||||||
PreserveJobHistory No
|
|
||||||
PreserveJobFiles No
|
|
||||||
AutoPurgeJobs Yes
|
|
||||||
MaxJobs 25
|
|
||||||
MaxPrinterHistory 10
|
|
||||||
#Printcap /etc/printcap
|
|
||||||
#PrintcapFormat BSD
|
|
||||||
RequestRoot /var/cups
|
|
||||||
#RemoteRoot remroot
|
|
||||||
#User nobody
|
|
||||||
#Group nogroup
|
|
||||||
# root permissions required to make cups work with the usb backend
|
|
||||||
User root
|
|
||||||
Group root
|
|
||||||
RIPCache auto
|
|
||||||
TempDir /var/cups
|
|
||||||
Port 631
|
|
||||||
HostNameLookups On
|
|
||||||
KeepAlive On
|
|
||||||
# No: "BrowseOrder" "BrowseAllow" "BrowseRemoteProtocols"
|
|
||||||
Browsing Yes
|
|
||||||
BrowsingWebIF Yes
|
|
||||||
BrowseLocalProtocols DNSSD
|
|
||||||
DefaultShared Yes
|
|
||||||
WebInterface no
|
|
||||||
Listen /var/run/cups/cups.sock
|
|
||||||
|
|
||||||
ServerAlias *
|
|
||||||
|
|
||||||
<Location />
|
|
||||||
Order Allow,Deny
|
|
||||||
Allow From 127.0.0.1
|
|
||||||
Allow From 192.168.1.0/24
|
|
||||||
</Location>
|
|
||||||
|
|
||||||
<Location /admin>
|
|
||||||
AuthType Basic
|
|
||||||
AuthClass System
|
|
||||||
Order Allow,Deny
|
|
||||||
Allow From 127.0.0.1
|
|
||||||
Allow From 192.168.1.0/24
|
|
||||||
</Location>
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
<DefaultPrinter USB>
|
|
||||||
Info USB Printer
|
|
||||||
Location
|
|
||||||
DeviceURI usb:/dev/usb/lp0
|
|
||||||
State Idle
|
|
||||||
Accepting Yes
|
|
||||||
JobSheets none none
|
|
||||||
QuotaPeriod 0
|
|
||||||
PageLimit 0
|
|
||||||
KLimit 0
|
|
||||||
</Printer>
|
|
||||||
|
|
||||||
<Printer LP>
|
|
||||||
Info Parallel Port Printer
|
|
||||||
Location
|
|
||||||
DeviceURI parallel:/dev/printers/0
|
|
||||||
State Idle
|
|
||||||
Accepting Yes
|
|
||||||
JobSheets none none
|
|
||||||
QuotaPeriod 0
|
|
||||||
PageLimit 0
|
|
||||||
KLimit 0
|
|
||||||
</Printer>
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
--- a/configure
|
|
||||||
+++ b/configure
|
|
||||||
@@ -5896,7 +5896,7 @@ fi
|
|
||||||
|
|
||||||
case "$COMPONENTS" in
|
|
||||||
all)
|
|
||||||
- BUILDDIRS="filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates"
|
|
||||||
+ BUILDDIRS="filter backend berkeley cgi-bin monitor ppdc scheduler systemv conf data desktop locale doc examples templates"
|
|
||||||
;;
|
|
||||||
|
|
||||||
core)
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
--- a/configure
|
|
||||||
+++ b/configure
|
|
||||||
@@ -1966,7 +1966,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-uname=`uname`
|
|
||||||
+uname=${UNAME:-`uname`}
|
|
||||||
uversion=`uname -r | sed -e '1,$s/^[^0-9]*\([0-9]*\)\.\([0-9]*\).*/\1\2/'`
|
|
||||||
uarch=`uname -m`
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
--- a/config-scripts/cups-directories.m4
|
|
||||||
+++ b/config-scripts/cups-directories.m4
|
|
||||||
@@ -104,7 +104,7 @@ if test "$libdir" = "\${exec_prefix}/lib
|
|
||||||
case "$uname" in
|
|
||||||
Linux*)
|
|
||||||
if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
|
|
||||||
- libdir="$exec_prefix/lib64"
|
|
||||||
+ libdir="$exec_prefix/lib"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
--- a/configure
|
|
||||||
+++ b/configure
|
|
||||||
@@ -5998,7 +5998,7 @@ if test "$libdir" = "\${exec_prefix}/lib
|
|
||||||
case "$uname" in
|
|
||||||
Linux*)
|
|
||||||
if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
|
|
||||||
- libdir="$exec_prefix/lib64"
|
|
||||||
+ libdir="$exec_prefix/lib"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
--- a/cups-config.in
|
|
||||||
+++ b/cups-config.in
|
|
||||||
@@ -50,7 +50,7 @@ else
|
|
||||||
CFLAGS="$CFLAGS -I$includedir"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- if test $libdir != /usr/lib -a $libdir != /usr/lib32 -a $libdir != /usr/lib64; then
|
|
||||||
+ if test $libdir != /usr/lib -a $libdir != /usr/lib -a $libdir != /usr/lib; then
|
|
||||||
LDFLAGS="$LDFLAGS -L$libdir"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
--- a/ppdc/Makefile
|
|
||||||
+++ b/ppdc/Makefile
|
|
||||||
@@ -238,13 +238,7 @@ framedhelp:
|
|
||||||
|
|
||||||
genstrings: genstrings.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) \
|
|
||||||
sample.drv ../data/media.defs
|
|
||||||
- echo Linking $@...
|
|
||||||
- $(CXX) $(ARCHFLAGS) $(LDFLAGS) -o genstrings genstrings.o \
|
|
||||||
- libcupsppdc.a ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) \
|
|
||||||
- $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
|
|
||||||
- echo Generating localization strings...
|
|
||||||
- ./genstrings >sample.c
|
|
||||||
-
|
|
||||||
+ echo Not Linking $@...
|
|
||||||
|
|
||||||
#
|
|
||||||
# ppdc, the PPD compiler.
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# (https://immortalwrt.org)
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=cxxopts
|
|
||||||
PKG_VERSION:=2.2.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/jarro2783/cxxopts/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=984aa3c8917d649b14d7f6277104ce38dd142ce378a9198ec926f03302399681
|
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
CMAKE_INSTALL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(INCLUDE_DIR)/cmake.mk
|
|
||||||
|
|
||||||
CMAKE_OPTIONS+= -DCXXOPTS_ENABLE_INSTALL=ON \
|
|
||||||
-DCXXOPTS_BUILD_EXAMPLES=OFF \
|
|
||||||
-DCXXOPTS_BUILD_TESTS=OFF
|
|
||||||
|
|
||||||
define Package/cxxopts
|
|
||||||
SECTION:=lib
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
URL:=https://github.com/jarro2783/cxxopts
|
|
||||||
TITLE:=Lightweight C++ command line option parser
|
|
||||||
DEPENDS:=+libc
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/cxxopts/description
|
|
||||||
This is a lightweight C++ option parser library, supporting the standard GNU style syntax for options.
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,cxxopts))
|
|
||||||
@ -1,91 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2019 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:=duktape
|
|
||||||
PKG_VERSION:=2.99.99-19cc8f5
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://github.com/svaarala/duktape.git
|
|
||||||
PKG_MIRROR_HASH:=7e9caaf9c7e82bc01f859019359b3a13fa038f0e5e82a6541687a30c1ccfa604
|
|
||||||
PKG_SOURCE_VERSION:=19cc8f5bb855791ff55cbf60d2cea72df485e86f
|
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=node/host
|
|
||||||
|
|
||||||
PKG_FIXUP:=autoreconf
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/duktape
|
|
||||||
SECTION:=utils
|
|
||||||
CATEGORY:=Utilities
|
|
||||||
URL:=https://github.com/svaarala/duktape
|
|
||||||
TITLE:=Duktape is an embeddable Javascript engine, with a focus on portability and compact footprint.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libduktape
|
|
||||||
$(call Package/duktape)
|
|
||||||
SECTION:=lib
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
TITLE+= (Libraries)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/duktape/description
|
|
||||||
Duktape is easy to integrate into a C/C++ project: add duktape.c,
|
|
||||||
duktape.h, and duk_config.h to your build, and use the Duktape API
|
|
||||||
to call ECMAScript functions from C code and vice versa.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libduktape/description
|
|
||||||
$(call Package/duktape/description)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
( \
|
|
||||||
cd $(PKG_BUILD_DIR); \
|
|
||||||
make -C src-tools; \
|
|
||||||
mkdir -p dist; \
|
|
||||||
node src-tools/index.js dist --output-directory dist/source; \
|
|
||||||
cd dist/source/src; \
|
|
||||||
$(TARGET_CC) -c -O3 -o duktape.o duktape.c; \
|
|
||||||
$(TARGET_CC) -c -O3 -o duk_module_node.o -I. ../extras/module-node/duk_module_node.c; \
|
|
||||||
$(TARGET_AR) cr libduktape.a duktape.o; \
|
|
||||||
$(TARGET_AR) cr libduktape_module.a duk_module_node.o; \
|
|
||||||
env $(call Build/Compile/Default) \
|
|
||||||
)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/InstallDev
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib $(1)/usr/include
|
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/dist/source/src/*.a $(1)/usr/lib/
|
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/dist/source/src/duk*.h $(1)/usr/include/
|
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/dist/source/extras/module-node/duk_module_node.h $(1)/usr/include/
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/duktape/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/build/duk $(1)/usr/bin/duk
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libduktape/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/dist/source/src/*.a $(1)/usr/lib/
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,duktape))
|
|
||||||
$(eval $(call BuildPackage,libduktape))
|
|
||||||
@ -1,89 +0,0 @@
|
|||||||
From 436c0a70d7fd4628f30b860f9f2f18f65982d72d Mon Sep 17 00:00:00 2001
|
|
||||||
From: CN_SZTL <cnsztl@project-openwrt.eu.org>
|
|
||||||
Date: Wed, 12 Aug 2020 08:31:27 +0000
|
|
||||||
Subject: [PATCH] Makefile: use Node.js tool to generate files
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile | 34 +++++++++++++++++-----------------
|
|
||||||
1 file changed, 17 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index 92ec2110..9eba5234 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -283,55 +283,55 @@ prep:
|
|
||||||
@mkdir -p prep
|
|
||||||
prep/nondebug: prep
|
|
||||||
@rm -rf ./prep/nondebug
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/nondebug --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/nondebug --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG) --line-directives
|
|
||||||
prep/nondebug-scanbuild: prep
|
|
||||||
@rm -rf ./prep/nondebug-scanbuild
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/nondebug-scanbuild --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_SCANBUILD) --separate-sources --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/nondebug-scanbuild --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_SCANBUILD) --separate-sources --line-directives
|
|
||||||
prep/nondebug-perf: prep
|
|
||||||
@rm -rf ./prep/nondebug-perf
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/nondebug-perf --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_PERF) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/nondebug-perf --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_PERF) --line-directives
|
|
||||||
prep/nondebug-size: prep
|
|
||||||
@rm -rf ./prep/nondebug-size
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/nondebug-size --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_SIZE) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/nondebug-size --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_SIZE) --line-directives
|
|
||||||
prep/nondebug-rom: prep
|
|
||||||
@rm -rf ./prep/nondebug-rom
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/nondebug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_ROM) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/nondebug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_ROM) --line-directives
|
|
||||||
prep/debug: prep
|
|
||||||
@rm -rf ./prep/debug
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/debug --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/debug --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG) --line-directives
|
|
||||||
prep/fuzz: prep
|
|
||||||
@rm -rf ./prep/fuzz
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/fuzz --source-directory src-input --config-metadata config $(CONFIGOPTS_FUZZ) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/fuzz --source-directory src-input --config-metadata config $(CONFIGOPTS_FUZZ) --line-directives
|
|
||||||
prep/debug-scanbuild: prep
|
|
||||||
@rm -rf ./prep/debug-scanbuild
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/debug-scanbuild --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_SCANBUILD) --separate-sources --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/debug-scanbuild --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_SCANBUILD) --separate-sources --line-directives
|
|
||||||
prep/debug-rom: prep
|
|
||||||
@rm -rf ./prep/debug-rom
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/debug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_ROM) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/debug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_ROM) --line-directives
|
|
||||||
prep/emduk: prep
|
|
||||||
@rm -rf ./prep/emduk
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/emduk --source-directory src-input --config-metadata config $(CONFIGOPTS_EMDUK) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/emduk --source-directory src-input --config-metadata config $(CONFIGOPTS_EMDUK) --line-directives
|
|
||||||
prep/dukweb: prep
|
|
||||||
@rm -rf ./prep/dukweb
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/dukweb --source-directory src-input --config-metadata config $(CONFIGOPTS_DUKWEB) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/dukweb --source-directory src-input --config-metadata config $(CONFIGOPTS_DUKWEB) --line-directives
|
|
||||||
prep/duklow-nondebug: prep
|
|
||||||
@rm -rf ./prep/duklow-nondebug
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/duklow-nondebug --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_DUKLOW) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/duklow-nondebug --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_DUKLOW) --line-directives
|
|
||||||
prep/duklow-debug: prep
|
|
||||||
@rm -rf ./prep/duklow-debug
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/duklow-debug --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_DUKLOW) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/duklow-debug --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_DUKLOW) --line-directives
|
|
||||||
prep/duklow-nondebug-rom: prep
|
|
||||||
@rm -rf ./prep/duklow-nondebug-rom
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/duklow-nondebug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_DUKLOW_ROM) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/duklow-nondebug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_DUKLOW_ROM) --line-directives
|
|
||||||
prep/duklow-debug-rom: prep
|
|
||||||
@rm -rf ./prep/duklow-debug-rom
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/duklow-debug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_DUKLOW_ROM) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/duklow-debug-rom --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_DUKLOW_ROM) --line-directives
|
|
||||||
prep/duklow-nondebug-norefc: prep
|
|
||||||
@rm -rf ./prep/duklow-nondebug-norefc
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/duklow-nondebug-norefc --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_DUKLOW_NOREFC) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/duklow-nondebug-norefc --source-directory src-input --config-metadata config $(CONFIGOPTS_NONDEBUG_DUKLOW_NOREFC) --line-directives
|
|
||||||
prep/duklow-debug-norefc: prep
|
|
||||||
@rm -rf ./prep/duklow-debug-norefc
|
|
||||||
- $(PYTHON) tools/configure.py --output-directory ./prep/duklow-debug-norefc --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_DUKLOW_NOREFC) --line-directives
|
|
||||||
+ $(NODE) src-tools/index.js configure --output-directory ./prep/duklow-debug-norefc --source-directory src-input --config-metadata config $(CONFIGOPTS_DEBUG_DUKLOW_NOREFC) --line-directives
|
|
||||||
|
|
||||||
# Library targets.
|
|
||||||
build/libduktape.so.1.0.0: prep/nondebug | build
|
|
||||||
--
|
|
||||||
2.17.1
|
|
||||||
|
|
||||||
@ -1,91 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE.txt for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=filebrowser
|
|
||||||
PKG_VERSION:=2.13.0
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_VERSION:=e1f6586
|
|
||||||
PKG_SOURCE_URL:=https://github.com/filebrowser/filebrowser
|
|
||||||
PKG_MIRROR_HASH:=d2b9af0b58442f2e214a957cef455b9852e34203e813870f6e2166ea7cf407c7
|
|
||||||
|
|
||||||
PKG_LICENSE:=Apache-2.0
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host node/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_FILEBROWSER_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_FILEBROWSER_COMPRESS_UPX
|
|
||||||
|
|
||||||
GO_PKG:=github.com/filebrowser/filebrowser
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
GO_PKG_LDFLAGS_X:= \
|
|
||||||
$(GO_PKG)/v2/version.CommitSHA=$(PKG_SOURCE_VERSION) \
|
|
||||||
$(GO_PKG)/v2/version.Version=$(PKG_VERSION)
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/filebrowser
|
|
||||||
SECTION:=utils
|
|
||||||
CATEGORY:=Utilities
|
|
||||||
TITLE:=Web File Browser
|
|
||||||
URL:=https://github.com/filebrowser/filebrowser
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/filebrowser/description
|
|
||||||
filebrowser provides a file managing interface within a specified directory
|
|
||||||
and it can be used to upload, delete, preview, rename and edit your files.
|
|
||||||
It allows the creation of multiple users and each user can have its own directory.
|
|
||||||
It can be used as a standalone app or as a middleware.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/filebrowser/config
|
|
||||||
config FILEBROWSER_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config FILEBROWSER_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_FILEBROWSER_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
( \
|
|
||||||
cd $(PKG_BUILD_DIR)/frontend ; \
|
|
||||||
npm ci; \
|
|
||||||
npm run lint ; \
|
|
||||||
npm run build ; \
|
|
||||||
$(call GoPackage/Build/Compile) ; \
|
|
||||||
)
|
|
||||||
ifeq ($(CONFIG_FILEBROWSER_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/filebrowser
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/filebrowser/install
|
|
||||||
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
|
||||||
$(INSTALL_DIR) $(1)/etc/config/ $(1)/etc/init.d/ $(1)/usr/bin/
|
|
||||||
$(INSTALL_CONF) $(CURDIR)/files/filebrowser.config $(1)/etc/config/filebrowser
|
|
||||||
$(INSTALL_BIN) $(CURDIR)/files/filebrowser.init $(1)/etc/init.d/filebrowser
|
|
||||||
$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/filebrowser $(1)/usr/bin/filebrowser
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,filebrowser))
|
|
||||||
$(eval $(call BuildPackage,filebrowser))
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
config filebrowser 'config'
|
|
||||||
option addr_type 'lan'
|
|
||||||
option db_dir '/etc'
|
|
||||||
option db_name 'filebrowser.db'
|
|
||||||
option enabled '0'
|
|
||||||
option port '8989'
|
|
||||||
option root_dir '/'
|
|
||||||
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
|
|
||||||
. /lib/functions.sh
|
|
||||||
. /lib/functions/procd.sh
|
|
||||||
|
|
||||||
USE_PROCD=1
|
|
||||||
|
|
||||||
START=90
|
|
||||||
STOP=10
|
|
||||||
|
|
||||||
init_conf() {
|
|
||||||
config_load "filebrowser"
|
|
||||||
config_get "addr_type" "config" "addr_type" "lan"
|
|
||||||
config_get "db_dir" "config" "db_dir" "/etc"
|
|
||||||
[ "${db_dir}" == "/" ] || db_dir="${db_dir%*/}"
|
|
||||||
config_get "db_name" "config" "db_name" "filebrowser.db"
|
|
||||||
db_name="$(uci get filebrowser.config.db_name| sed 's#/##g')"
|
|
||||||
config_get "enabled" "config" "enabled" "0"
|
|
||||||
config_get "port" "config" "port" "8989"
|
|
||||||
config_get "root_dir" "config" "root_dir" "/"
|
|
||||||
}
|
|
||||||
|
|
||||||
start_service() {
|
|
||||||
init_conf
|
|
||||||
[ "${enabled}" == "1" ] || exit 0
|
|
||||||
procd_open_instance filebrowser
|
|
||||||
mkdir -p "${root_dir}"
|
|
||||||
mkdir -p "${db_dir}"
|
|
||||||
|
|
||||||
if [ "${addr_type}" == "local" ];then
|
|
||||||
addr="127.0.0.1"
|
|
||||||
elif [ "${addr_type}" == "lan" ];then
|
|
||||||
addr="$(uci get network.lan.ipaddr)"
|
|
||||||
elif [ "${addr_type}" == "wan" ];then
|
|
||||||
addr="0.0.0.0"
|
|
||||||
fi
|
|
||||||
|
|
||||||
procd_set_param command filebrowser
|
|
||||||
procd_append_param command -a "${addr}"
|
|
||||||
procd_append_param command -d "${db_dir}/${db_name}"
|
|
||||||
procd_append_param command -p "${port}"
|
|
||||||
procd_append_param command -r "${root_dir}"
|
|
||||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
|
||||||
procd_close_instance
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_service(){
|
|
||||||
init_conf
|
|
||||||
echo "${db_dir}/${db_name}" > "/lib/upgrade/keep.d/filebrowser"
|
|
||||||
}
|
|
||||||
|
|
||||||
reload_service()
|
|
||||||
{
|
|
||||||
stop
|
|
||||||
start
|
|
||||||
}
|
|
||||||
|
|
||||||
service_triggers() {
|
|
||||||
procd_add_reload_trigger "filebrowser"
|
|
||||||
}
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=go-nats
|
|
||||||
PKG_VERSION:=0.0.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://github.com/enobufs/go-nats.git
|
|
||||||
PKG_SOURCE_DATE:=2019-09-23
|
|
||||||
PKG_SOURCE_VERSION:=4effc32e0f4006da0636b24f4468cf32ce494d71
|
|
||||||
PKG_MIRROR_HASH:=52156d096ba21fdc18316040749b20868e500d7bd785a0d33533610ba7f7169b
|
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_GO_NATS_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_GO_NATS_COMPRESS_UPX
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
GO_PKG:=github.com/enobufs/go-nats
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/go-nats
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=A NAT type discovery tool
|
|
||||||
URL:=https://github.com/enobufs/go-nats
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/go-nats/description
|
|
||||||
A NAT type discovery tool using STUN written purely in Go.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/go-nats/config
|
|
||||||
config GO_NATS_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config GO_NATS_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_GO_NATS_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_GO_NATS_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/go-nats
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,go-nats))
|
|
||||||
$(eval $(call BuildPackage,go-nats))
|
|
||||||
@ -1,85 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=gost
|
|
||||||
PKG_VERSION:=2.11.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/ginuerzh/gost/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=d94b570a7a84094376b8c299d740528f51b540d9162f1db562247a15a89340bf
|
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_GOST_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_GOST_COMPRESS_UPX
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
GO_PKG:=github.com/ginuerzh/gost
|
|
||||||
GO_PKG_BUILD_PKG:=github.com/ginuerzh/gost/cmd/gost
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/gost
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=GO Simple Tunnel
|
|
||||||
URL:=https://github.com/ginuerzh/gost
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gost/description
|
|
||||||
A simple security tunnel written in Golang
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gost/config
|
|
||||||
config GOST_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config GOST_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_GOST_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_GOST_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/gost
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gost/install
|
|
||||||
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gost $(1)/usr/bin/gost
|
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/etc/config
|
|
||||||
$(INSTALL_CONF) $(CURDIR)/files/gost.config $(1)/etc/config/gost
|
|
||||||
$(INSTALL_DIR) $(1)/etc/init.d
|
|
||||||
$(INSTALL_BIN) $(CURDIR)/files/gost.init $(1)/etc/init.d/gost
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,gost))
|
|
||||||
$(eval $(call BuildPackage,gost))
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
|
|
||||||
config gost
|
|
||||||
option enable '0'
|
|
||||||
option run_command ''
|
|
||||||
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
# Created By ImmortalWrt
|
|
||||||
# https://github.com/project-openwrt
|
|
||||||
|
|
||||||
START=99
|
|
||||||
STOP=10
|
|
||||||
|
|
||||||
USE_PROCD=1
|
|
||||||
|
|
||||||
enable="$(uci get gost.@gost[0].enable)"
|
|
||||||
run_command="$(uci get gost.@gost[0].run_command)"
|
|
||||||
|
|
||||||
start_service() {
|
|
||||||
[ "${enable}" -ne "1" ] && exit 0
|
|
||||||
procd_open_instance gost
|
|
||||||
procd_set_param command /usr/bin/gost
|
|
||||||
procd_append_param command ${run_command}
|
|
||||||
|
|
||||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
|
||||||
|
|
||||||
procd_set_param limits core="unlimited"
|
|
||||||
procd_set_param stdout 1
|
|
||||||
procd_set_param stderr 1
|
|
||||||
procd_close_instance
|
|
||||||
}
|
|
||||||
|
|
||||||
reload_service()
|
|
||||||
{
|
|
||||||
stop
|
|
||||||
start
|
|
||||||
}
|
|
||||||
|
|
||||||
service_triggers()
|
|
||||||
{
|
|
||||||
procd_add_reload_trigger "gost"
|
|
||||||
}
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=gotop
|
|
||||||
PKG_VERSION:=4.1.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/xxxserxxx/gotop/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=314dcfc4b0faa0bb735e5fa84b2406492bf94f7948af43e2b9d2982d69d542ed
|
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_GOTOP_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_GOTOP_COMPRESS_UPX
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
GO_PKG:=github.com/xxxserxxx/gotop
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
GO_PKG_LDFLAGS_X:=main.Version=$(PKG_VERSION)
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/gotop
|
|
||||||
SECTION:=admin
|
|
||||||
CATEGORY:=Administration
|
|
||||||
TITLE:=A terminal based graphical activity monitor
|
|
||||||
URL:=https://github.com/xxxserxxx/gotop
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gotop/description
|
|
||||||
Another terminal based graphical activity monitor,
|
|
||||||
inspired by gtop and vtop, this time written in Go!
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gotop/config
|
|
||||||
config GOTOP_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config GOTOP_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_GOTOP_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_GOTOP_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/gotop
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,gotop))
|
|
||||||
$(eval $(call BuildPackage,gotop))
|
|
||||||
@ -1,83 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=gowebdav
|
|
||||||
PKG_VERSION:=0.0.2
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/1715173329/gowebdav/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=0a6a2af4f24905ffea247b6044d01129d938af4b3a256bf19b42c52bb452f947
|
|
||||||
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
|
||||||
CONFIG_GOWEBDAV_COMPRESS_GOPROXY \
|
|
||||||
CONFIG_GOWEBDAV_COMPRESS_UPX
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_USE_MIPS16:=0
|
|
||||||
|
|
||||||
GO_PKG:=github.com/1715173329/gowebdav
|
|
||||||
GO_PKG_LDFLAGS:=-s -w
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
|
||||||
|
|
||||||
define Package/gowebdav
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
SUBMENU:=File Transfer
|
|
||||||
TITLE:=A simple WebDav server written in Golang.
|
|
||||||
URL:=https://github.com/1715173329/gowebdav
|
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gowebdav/description
|
|
||||||
A simple WebDav server written in Golang.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gowebdav/config
|
|
||||||
config GOWEBDAV_COMPRESS_GOPROXY
|
|
||||||
bool "Compiling with GOPROXY proxy"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config GOWEBDAV_COMPRESS_UPX
|
|
||||||
bool "Compress executable files with UPX"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_GOWEBDAV_COMPRESS_GOPROXY),y)
|
|
||||||
export GO111MODULE=on
|
|
||||||
export GOPROXY=https://goproxy.io
|
|
||||||
endif
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call GoPackage/Build/Compile)
|
|
||||||
ifeq ($(CONFIG_GOWEBDAV_COMPRESS_UPX),y)
|
|
||||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/gowebdav
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gowebdav/install
|
|
||||||
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gowebdav $(1)/usr/bin/gowebdav
|
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/etc/config
|
|
||||||
$(INSTALL_CONF) $(CURDIR)/files/gowebdav.config $(1)/etc/config/gowebdav
|
|
||||||
$(INSTALL_DIR) $(1)/etc/init.d
|
|
||||||
$(INSTALL_BIN) $(CURDIR)/files/gowebdav.init $(1)/etc/init.d/gowebdav
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call GoBinPackage,gowebdav))
|
|
||||||
$(eval $(call BuildPackage,gowebdav))
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
config gowebdav 'config'
|
|
||||||
option enable '0'
|
|
||||||
option listen_port '6086'
|
|
||||||
option username 'user'
|
|
||||||
option password 'pass'
|
|
||||||
option root_dir '/mnt'
|
|
||||||
option read_only '0'
|
|
||||||
option allow_wan '0'
|
|
||||||
option use_https '0'
|
|
||||||
option cert_cer ''
|
|
||||||
option cert_key ''
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
|
|
||||||
START=99
|
|
||||||
STOP=10
|
|
||||||
|
|
||||||
init_conf() {
|
|
||||||
config_load "gowebdav"
|
|
||||||
config_get "enable" "config" "enable" "0"
|
|
||||||
config_get "listen_port" "config" "listen_port" "6086"
|
|
||||||
config_get "username" "config" "username"
|
|
||||||
config_get "password" "config" "password"
|
|
||||||
config_get "root_dir" "config" "root_dir" "/mnt"
|
|
||||||
config_get "read_only" "config" "read_only" "0"
|
|
||||||
config_get "allow_wan" "config" "allow_wan" "0"
|
|
||||||
config_get "use_https" "config" "use_https" "0"
|
|
||||||
config_get "cert_cer" "config" "cert_cer"
|
|
||||||
config_get "cert_key" "config" "cert_key"
|
|
||||||
|
|
||||||
config_load "network"
|
|
||||||
config_get "lan_addr" "lan" "ipaddr" "192.168.1.1"
|
|
||||||
}
|
|
||||||
|
|
||||||
set_firewall() {
|
|
||||||
if [ "${set_type}" = "start" ]; then
|
|
||||||
mkdir -p "/var/etc/"
|
|
||||||
iptables -I INPUT -p tcp --dport "${listen_port}" -j ACCEPT
|
|
||||||
echo "iptables -I INPUT -p tcp --dport "${listen_port}" -j ACCEPT" > "/var/etc/gowebdav.include"
|
|
||||||
elif [ "${set_type}" = "stop" ]; then
|
|
||||||
iptables -D INPUT -p tcp --dport "${listen_port}" -j ACCEPT
|
|
||||||
echo "" > "/var/etc/gowebdav.include"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
start() {
|
|
||||||
init_conf
|
|
||||||
|
|
||||||
stop
|
|
||||||
|
|
||||||
[ "${enable}" -ne "1" ] && exit 0
|
|
||||||
|
|
||||||
mkdir -p "${root_dir}"
|
|
||||||
|
|
||||||
[ "${allow_wan}" -ne "1" ] && listen_addr="${lan_addr}" || { listen_addr="0.0.0.0"; set_type="start" && set_firewall 2>"/dev/null"; }
|
|
||||||
{ [ -n "${username}" ] && [ -n "${password}" ]; } && auth_arg="-user ${username} -password ${password}"
|
|
||||||
[ "${read_only}" -eq "1" ] && readonly_arg="-read-only"
|
|
||||||
{ [ "${use_https}" -eq "1" ] && [ -e "${cert_cer}" ] && [ -e "${cert_key}" ]; } && https_arg="-https-mode -https-cert-file ${cert_cer} -https-key-file ${cert_key}"
|
|
||||||
/usr/bin/gowebdav -dir "${root_dir}" -http "${listen_addr}:${listen_port}" ${auth_arg} ${readonly_arg} ${https_arg} &
|
|
||||||
}
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
init_conf
|
|
||||||
|
|
||||||
set_type="stop" && set_firewall 2>"/dev/null"
|
|
||||||
killall "gowebdav" 2>"/dev/null"
|
|
||||||
}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=ipt2socks-alt
|
|
||||||
PKG_VERSION:=1.0.2
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/zfl9/ipt2socks/tar.gz/v$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=f247d72b61b1f40ce347904c43523bff257fc9f00ff269ecccf06f1d0f4b9d5e
|
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(firstword $(subst -, ,$(PKG_NAME)))-$(PKG_VERSION)
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_INSTALL:=1
|
|
||||||
|
|
||||||
PKG_LICENSE:=AGPL-3.0
|
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/ipt2socks-alt
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=Utility for converting iptables (REDIRECT/TPROXY) to SOCKS5
|
|
||||||
URL:=https://github.com/zfl9/ipt2socks
|
|
||||||
DEPENDS:=+libpthread +libuv
|
|
||||||
endef
|
|
||||||
|
|
||||||
TARGET_CFLAGS += $(FPIC) -flto
|
|
||||||
TARGET_LDFLAGS += -flto
|
|
||||||
|
|
||||||
define Package/ipt2socks-alt/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/ipt2socks $(1)/usr/bin/ipt2socks-alt
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,ipt2socks-alt))
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
# Copyright 2019 Shun Li <riverscn@gmail.com>
|
|
||||||
#
|
|
||||||
# Licensed to the public under the GNU General Public License v3.
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=iptvhelper
|
|
||||||
PKG_VERSION:=0.1.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_MAINTAINER:=Shun Li <riverscn@gmail.com>
|
|
||||||
PKG_LICENSE:=GPL-3.0
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/iptvhelper
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
SUBMENU:=Routing and Redirection
|
|
||||||
DEPENDS:= +ipset +iptables
|
|
||||||
TITLE:=Scripts for configure IPTV easily
|
|
||||||
MAINTAINER:=Shun Li <riverscn@gmail.com>
|
|
||||||
PKGARCH:=all
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/iptvhelper/description
|
|
||||||
Scripts for configure IPTV easily
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/iptvhelper/conffiles
|
|
||||||
/etc/config/iptvhelper
|
|
||||||
/etc/firewall.iptvhelper
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/iptvhelper/install
|
|
||||||
$(CP) ./files/* $(1)
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,iptvhelper))
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
config tvbox 'default'
|
|
||||||
option disabled '1'
|
|
||||||
option respawn '1'
|
|
||||||
option mac '00:00:00:00:00:00'
|
|
||||||
option ipset '1'
|
|
||||||
option dns_redir '1'
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
test -s "/etc/init.d/iptvhelper" && /etc/init.d/iptvhelper reload
|
|
||||||
@ -1,127 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
# Copyright 2019 Shun Li <riverscn@gmail.com>
|
|
||||||
# Licensed to the public under the GNU General Public License v3.
|
|
||||||
|
|
||||||
START=95
|
|
||||||
USE_PROCD=1
|
|
||||||
|
|
||||||
_ipt() {
|
|
||||||
cmd="$(echo "$@" | sed 's|-A|-D|g;s|-I|-D|g')"
|
|
||||||
while iptables $cmd &>/dev/null; do
|
|
||||||
:
|
|
||||||
done
|
|
||||||
iptables $@
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy_iptv_ipset() {
|
|
||||||
for ip_set in $(ipset list | awk '/iptvhelper/ {print $2}'); do ipset destroy $ip_set; done
|
|
||||||
}
|
|
||||||
|
|
||||||
clear_iptv_rules() {
|
|
||||||
iptables-save --counters | grep -v "iptvhelper-rule" | iptables-restore --counters
|
|
||||||
}
|
|
||||||
|
|
||||||
append_arg() {
|
|
||||||
local cfg="$1"
|
|
||||||
local var="$2"
|
|
||||||
local opt="$3"
|
|
||||||
local def="$4"
|
|
||||||
local val
|
|
||||||
|
|
||||||
config_get val "$cfg" "$var"
|
|
||||||
[ -n "$val" -o -n "$def" ] && procd_append_param command $opt "${val:-$def}"
|
|
||||||
}
|
|
||||||
|
|
||||||
append_bool() {
|
|
||||||
local cfg="$1"
|
|
||||||
local var="$2"
|
|
||||||
local opt="$3"
|
|
||||||
local def="$4"
|
|
||||||
local val
|
|
||||||
|
|
||||||
config_get_bool val "$cfg" "$var" "$def"
|
|
||||||
[ "$val" = 1 ] && procd_append_param command "$opt"
|
|
||||||
}
|
|
||||||
|
|
||||||
start_instance() {
|
|
||||||
local cfg="$1"
|
|
||||||
local aux
|
|
||||||
|
|
||||||
config_get_bool aux "$cfg" 'disabled' '0'
|
|
||||||
[ "$aux" = 1 ] && return 1
|
|
||||||
|
|
||||||
logger "iptvhelper.$cfg: instance starting"
|
|
||||||
|
|
||||||
local IPTV_MAC
|
|
||||||
local IPTV_DNS_REDIR
|
|
||||||
local IPTV_IPSET
|
|
||||||
|
|
||||||
config_get IPTV_MAC $cfg mac
|
|
||||||
config_get IPTV_DNS_REDIR $cfg dns_redir
|
|
||||||
config_get IPTV_IPSET $cfg ipset
|
|
||||||
logger "iptvhelper.$cfg: topbox mac=$IPTV_MAC"
|
|
||||||
|
|
||||||
if [[ $IPTV_DNS_REDIR == '1' ]]; then
|
|
||||||
logger "iptvhelper.$cfg: topbox DNS redierct enabled"
|
|
||||||
_ipt -t nat -A PREROUTING -m mac --mac-source $IPTV_MAC -m comment --comment "iptvhelper-rule" -p udp --dport 53 -j REDIRECT --to-ports 53
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $IPTV_IPSET='1' ]]; then
|
|
||||||
logger "iptvhelper.$cfg: topbox ipset enabled"
|
|
||||||
if ! ipset -q list iptvhelper_$cfg >/dev/null; then
|
|
||||||
ipset create iptvhelper_$cfg nethash
|
|
||||||
fi
|
|
||||||
_ipt -t nat -I PREROUTING -m mac --mac-source $IPTV_MAC -m comment --comment "iptvhelper-rule" -m set ! --match-set iptvhelper_$cfg dst -m conntrack --ctstate NEW -j LOG --log-prefix "iptvhelper.$cfg:"
|
|
||||||
procd_open_instance
|
|
||||||
procd_set_param command /usr/sbin/iptvhelper.sh $cfg
|
|
||||||
config_get_bool aux "$cfg" 'respawn' '0'
|
|
||||||
[ "$aux" = 1 ] && procd_set_param respawn
|
|
||||||
procd_set_param pidfile /var/run/iptvhelper_$cfg.pid
|
|
||||||
procd_close_instance
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
service_triggers() {
|
|
||||||
procd_add_reload_trigger "iptvhelper"
|
|
||||||
}
|
|
||||||
|
|
||||||
start_service() {
|
|
||||||
logger "iptvhelper: starting"
|
|
||||||
echo "iptvhelper: starting"
|
|
||||||
config_load iptvhelper
|
|
||||||
config_foreach start_instance tvbox
|
|
||||||
if uci -q show firewall >/dev/null; then
|
|
||||||
if ! uci -q get firewall.iptvhelper >/dev/null; then
|
|
||||||
uci -q batch <<-EOF >/dev/null
|
|
||||||
set firewall.iptvhelper=include
|
|
||||||
set firewall.iptvhelper.type='script'
|
|
||||||
set firewall.iptvhelper.path='/etc/firewall.iptvhelper'
|
|
||||||
set firewall.iptvhelper.family='any'
|
|
||||||
set firewall.iptvhelper.reload='1'
|
|
||||||
commit firewall
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_service() {
|
|
||||||
if uci -q show firewall >/dev/null; then
|
|
||||||
if uci -q get firewall.iptvhelper >/dev/null; then
|
|
||||||
uci delete firewall.iptvhelper
|
|
||||||
uci commit firewall
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
for pid in $(ps | grep -v awk | awk '/iptvhelper.sh/ {print $1}'); do kill -9 $pid; done
|
|
||||||
for pid in $(ps | grep -v awk | awk '/logread -e iptvhelper/ {print $1}'); do kill -9 $pid; done
|
|
||||||
clear_iptv_rules
|
|
||||||
destroy_iptv_ipset
|
|
||||||
logger "iptvhelper: stopped"
|
|
||||||
echo "iptvhelper: stopped"
|
|
||||||
}
|
|
||||||
|
|
||||||
reload_service() {
|
|
||||||
logger "iptvhelper: reloading"
|
|
||||||
echo "iptvhelper: reloading"
|
|
||||||
stop
|
|
||||||
start
|
|
||||||
}
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Copyright 2019 Shun Li <riverscn@gmail.com>
|
|
||||||
# Licensed to the public under the GNU General Public License v3.
|
|
||||||
|
|
||||||
add_to_set() {
|
|
||||||
local ip=$1
|
|
||||||
local cfg=$2
|
|
||||||
local subnet=$ip/24
|
|
||||||
ping -W1 -c1 $ip &>/dev/null && return
|
|
||||||
if ! ipset -q test iptvhelper_$cfg $subnet; then
|
|
||||||
ipset add iptvhelper_$cfg $subnet
|
|
||||||
echo added $subnet to set iptvhelper_$cfg
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
echo $1
|
|
||||||
|
|
||||||
logread -e "iptvhelper\.$1" -f |
|
|
||||||
while read line; do
|
|
||||||
ip=$(echo "$line" | sed -r 's|.*DST=([0-9.]+).*|\1|')
|
|
||||||
echo requested $ip
|
|
||||||
add_to_set $ip $1 &
|
|
||||||
done
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# (https://immortalwrt.org)
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=jpcre2
|
|
||||||
PKG_VERSION:=10.32.01
|
|
||||||
PKG_RELEASE:=2
|
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
||||||
PKG_SOURCE_URL:=@GHCODELOAD/jpcre2/jpcre2/tar.gz/$(PKG_VERSION)?
|
|
||||||
PKG_HASH:=668cbc6d2c0a065bb6abe8494d5a1bb3549a14cd956a44a2df9095045623ea47
|
|
||||||
|
|
||||||
PKG_LICENSE:=BSD 3-Clause
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=CN_SZTL <cnsztl@immortalwrt.org>
|
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=pcre2
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_INSTALL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/jpcre2
|
|
||||||
SECTION:=lib
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
TITLE:=C++ wrapper for PCRE2 Library
|
|
||||||
URL:=https://github.com/jpcre2/jpcre2
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/jpcre2/description
|
|
||||||
This provides some C++ wrapper classes/functions to perform
|
|
||||||
regex operations such as regex match and regex replace.
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/InstallDev
|
|
||||||
$(INSTALL_DIR) $(1)/usr/include
|
|
||||||
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/jpcre2.hpp $(1)/usr/include/jpcre2.hpp
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,jpcre2))
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
####
|
|
||||||
# File: /Makefile
|
|
||||||
# Project: libtar
|
|
||||||
# File Created: Saturday, 7th March 2020 6:57:51 pm
|
|
||||||
# Author: ElonH[EH](elonhhuang@gmail.com)
|
|
||||||
# License: GNU General Public License v3.0 or later(http://www.gnu.org/licenses/gpl-3.0-standalone.html)
|
|
||||||
# Copyright (C) 2020 [ElonH]
|
|
||||||
####
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=libtar
|
|
||||||
PKG_VERSION:=1.2.20
|
|
||||||
PKG_RELEASE:=4
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://github.com/ElonH/libtar.git
|
|
||||||
PKG_SOURCE_DATE:=2020-03-08
|
|
||||||
PKG_SOURCE_VERSION:=987a29eaf8c68f8a502dd3880c58e0e1ef99d6a7
|
|
||||||
PKG_MIRROR_HASH:=7d9d7d8d33d39ac1e6a586361247f53a33ad0063c3940521b431a7d9b6170eac
|
|
||||||
|
|
||||||
PKG_LICENSE:=GPLv3
|
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
|
||||||
PKG_MAINTAINER:=ElonH <elonhhuang@gmail.com>
|
|
||||||
|
|
||||||
PKG_FIXUP:=autoreconf
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_INSTALL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
CONFIGURE_ARGS+= --enable-shared=yes --enable-static=no
|
|
||||||
|
|
||||||
define Package/libtar
|
|
||||||
SECTION:=lib
|
|
||||||
CATEGORY:=Libraries
|
|
||||||
URL:=https://github.com/ElonH/libtar
|
|
||||||
TITLE:=libtar - C library for manipulating tar files
|
|
||||||
DEPENDS:=+zlib
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libtar/description
|
|
||||||
libtar is a library for manipulating tar files from within C programs.
|
|
||||||
|
|
||||||
Here are some of its features:
|
|
||||||
* Handles both POSIX tar file format and the GNU extensions.
|
|
||||||
* API provides functions for easy use, such as tar_extract_all().
|
|
||||||
* Also provides functions for more granular use, such as
|
|
||||||
tar_append_regfile().
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/InstallDev
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib $(1)/usr/include $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libtar $(1)/usr/bin
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/libtar/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libtar $(1)/usr/bin
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,libtar))
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 3ebdf51..e8db2c2 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -107,6 +107,7 @@ AC_FUNC_STRFTIME
|
|
||||||
COMPAT_FUNC_STRLCPY
|
|
||||||
COMPAT_FUNC_STRMODE
|
|
||||||
COMPAT_FUNC_STRSEP
|
|
||||||
+AC_DEFINE([_FORTIFY_STDIO_H], [1], [disable fortify])
|
|
||||||
|
|
||||||
dnl ### Check for libraries. #######################################
|
|
||||||
AC_ARG_WITH([zlib],
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
diff --git a/libtar/libtar.c b/libtar/libtar.c
|
|
||||||
index 23f8741..e8d9d73 100644
|
|
||||||
--- a/libtar/libtar.c
|
|
||||||
+++ b/libtar/libtar.c
|
|
||||||
@@ -10,6 +10,9 @@
|
|
||||||
** University of Illinois at Urbana-Champaign
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#include <stdio.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+
|
|
||||||
#include <config.h>
|
|
||||||
#include <libtar.h>
|
|
||||||
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
diff --git a/libtar/Makefile.in b/libtar/Makefile.in
|
|
||||||
index 7c6f1bc..80bb8d9 100644
|
|
||||||
--- a/libtar/Makefile.in
|
|
||||||
+++ b/libtar/Makefile.in
|
|
||||||
@@ -20,7 +20,7 @@ SHELL = @SHELL@
|
|
||||||
|
|
||||||
### Installation programs and flags
|
|
||||||
INSTALL = @INSTALL@
|
|
||||||
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ -s
|
|
||||||
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
MKDIR = @MKDIR@
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2020 jerryk <jerrykuku@qq.com>
|
|
||||||
#
|
|
||||||
# Copyright (C) 2021 ImmortalWrt
|
|
||||||
# <https://immortalwrt.org>
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=lua-maxminddb
|
|
||||||
PKG_VERSION:=0.2
|
|
||||||
PKG_RELEASE:=2
|
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
|
||||||
PKG_SOURCE_URL:=https://github.com/fabled/lua-maxminddb.git
|
|
||||||
PKG_SOURCE_DATE:=2019-03-14
|
|
||||||
PKG_SOURCE_VERSION:=93da9f4e6c814c3a23044dd2cdd22d4a6b4f665b
|
|
||||||
PKG_MIRROR_HASH:=b99ef18516b705b3e73b15a9d5ddc99add359299b52639fe3c81dd761591d9d9
|
|
||||||
|
|
||||||
PKG_LICENSE:=MIT
|
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
|
||||||
PKG_MAINTAINER:=fabled
|
|
||||||
|
|
||||||
PKG_BUILD_PARALLEL:=1
|
|
||||||
PKG_INSTALL:=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/lua-maxminddb
|
|
||||||
SUBMENU:=Lua
|
|
||||||
SECTION:=lang
|
|
||||||
CATEGORY:=Languages
|
|
||||||
TITLE:=libmaxminddb bindings for lua
|
|
||||||
URL:=https://github.com/jerrykuku/lua-maxminddb
|
|
||||||
DEPENDS:=+lua +libmaxminddb
|
|
||||||
endef
|
|
||||||
|
|
||||||
TARGET_CFLAGS += $(FPIC)
|
|
||||||
|
|
||||||
define Package/lua-maxminddb/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/lua
|
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/maxminddb.so $(1)/usr/lib/lua/
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,lua-maxminddb))
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
# Copyright (C) 2018-2019 Lienol
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=luci-app-adguardhome
|
|
||||||
PKG_VERSION:=1.8
|
|
||||||
PKG_RELEASE:=12
|
|
||||||
PKG_MAINTAINER:=<https://github.com/rufengsuixing/luci-app-adguardhome>
|
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI app for AdGuardHome
|
|
||||||
LUCI_PKGARCH:=all
|
|
||||||
LUCI_DEPENDS:=+ca-certs +curl +wget-ssl +PACKAGE_$(PKG_NAME)_INCLUDE_binary:adguardhome
|
|
||||||
LUCI_DESCRIPTION:=LuCI support for AdGuardHome
|
|
||||||
|
|
||||||
define Package/$(PKG_NAME)/config
|
|
||||||
config PACKAGE_$(PKG_NAME)_INCLUDE_binary
|
|
||||||
bool "Include Binary File"
|
|
||||||
default y
|
|
||||||
endef
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_binary
|
|
||||||
|
|
||||||
define Package/luci-app-adguardhome/conffiles
|
|
||||||
/usr/share/AdGuardHome/links.txt
|
|
||||||
/etc/config/AdGuardHome
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/luci-app-adguardhome/postinst
|
|
||||||
#!/bin/sh
|
|
||||||
/etc/init.d/AdGuardHome enable >/dev/null 2>&1
|
|
||||||
enable=$(uci get AdGuardHome.AdGuardHome.enabled 2>/dev/null)
|
|
||||||
if [ "$enable" == "1" ]; then
|
|
||||||
/etc/init.d/AdGuardHome reload
|
|
||||||
fi
|
|
||||||
rm -f /tmp/luci-indexcache
|
|
||||||
rm -f /tmp/luci-modulecache/*
|
|
||||||
exit 0
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/luci-app-adguardhome/prerm
|
|
||||||
#!/bin/sh
|
|
||||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
|
||||||
/etc/init.d/AdGuardHome disable
|
|
||||||
/etc/init.d/AdGuardHome stop
|
|
||||||
uci -q batch <<-EOF >/dev/null 2>&1
|
|
||||||
delete ucitrack.@AdGuardHome[-1]
|
|
||||||
commit ucitrack
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
endef
|
|
||||||
|
|
||||||
include $(TOPDIR)/feeds/luci/luci.mk
|
|
||||||
|
|
||||||
# call BuildPackage - OpenWrt buildroot signature
|
|
||||||
@ -1,127 +0,0 @@
|
|||||||
module("luci.controller.AdGuardHome",package.seeall)
|
|
||||||
local fs=require"nixio.fs"
|
|
||||||
local http=require"luci.http"
|
|
||||||
local uci=require"luci.model.uci".cursor()
|
|
||||||
function index()
|
|
||||||
entry({"admin", "services", "AdGuardHome"},alias("admin", "services", "AdGuardHome", "base"),_("AdGuard Home"), 10).dependent = true
|
|
||||||
entry({"admin","services","AdGuardHome","base"},cbi("AdGuardHome/base"),_("Base Setting"),1).leaf = true
|
|
||||||
entry({"admin","services","AdGuardHome","log"},form("AdGuardHome/log"),_("Log"),2).leaf = true
|
|
||||||
entry({"admin","services","AdGuardHome","manual"},cbi("AdGuardHome/manual"),_("Manual Config"),3).leaf = true
|
|
||||||
entry({"admin","services","AdGuardHome","status"},call("act_status")).leaf=true
|
|
||||||
entry({"admin", "services", "AdGuardHome", "check"}, call("check_update"))
|
|
||||||
entry({"admin", "services", "AdGuardHome", "doupdate"}, call("do_update"))
|
|
||||||
entry({"admin", "services", "AdGuardHome", "getlog"}, call("get_log"))
|
|
||||||
entry({"admin", "services", "AdGuardHome", "dodellog"}, call("do_dellog"))
|
|
||||||
entry({"admin", "services", "AdGuardHome", "reloadconfig"}, call("reload_config"))
|
|
||||||
entry({"admin", "services", "AdGuardHome", "gettemplateconfig"}, call("get_template_config"))
|
|
||||||
end
|
|
||||||
function get_template_config()
|
|
||||||
local b
|
|
||||||
local d=""
|
|
||||||
for cnt in io.lines("/tmp/resolv.conf.d/resolv.conf.auto") do
|
|
||||||
b=string.match (cnt,"^[^#]*nameserver%s+([^%s]+)$")
|
|
||||||
if (b~=nil) then
|
|
||||||
d=d.." - "..b.."\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local f=io.open("/usr/share/AdGuardHome/AdGuardHome_template.yaml", "r+")
|
|
||||||
local tbl = {}
|
|
||||||
local a=""
|
|
||||||
while (1) do
|
|
||||||
a=f:read("*l")
|
|
||||||
if (a=="#bootstrap_dns") then
|
|
||||||
a=d
|
|
||||||
elseif (a=="#upstream_dns") then
|
|
||||||
a=d
|
|
||||||
elseif (a==nil) then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
table.insert(tbl, a)
|
|
||||||
end
|
|
||||||
f:close()
|
|
||||||
http.prepare_content("text/plain; charset=utf-8")
|
|
||||||
http.write(table.concat(tbl, "\n"))
|
|
||||||
end
|
|
||||||
function reload_config()
|
|
||||||
fs.remove("/tmp/AdGuardHometmpconfig.yaml")
|
|
||||||
http.prepare_content("application/json")
|
|
||||||
http.write('')
|
|
||||||
end
|
|
||||||
function act_status()
|
|
||||||
local e={}
|
|
||||||
local binpath=uci:get("AdGuardHome","AdGuardHome","binpath")
|
|
||||||
e.running=luci.sys.call("pgrep "..binpath.." >/dev/null")==0
|
|
||||||
e.redirect=(fs.readfile("/var/run/AdGredir")=="1")
|
|
||||||
http.prepare_content("application/json")
|
|
||||||
http.write_json(e)
|
|
||||||
end
|
|
||||||
function do_update()
|
|
||||||
fs.writefile("/var/run/lucilogpos","0")
|
|
||||||
http.prepare_content("application/json")
|
|
||||||
http.write('')
|
|
||||||
local arg
|
|
||||||
if luci.http.formvalue("force") == "1" then
|
|
||||||
arg="force"
|
|
||||||
else
|
|
||||||
arg=""
|
|
||||||
end
|
|
||||||
if fs.access("/var/run/update_core") then
|
|
||||||
if arg=="force" then
|
|
||||||
luci.sys.exec("kill $(pgrep /usr/share/AdGuardHome/update_core.sh) ; sh /usr/share/AdGuardHome/update_core.sh "..arg.." >/tmp/AdGuardHome_update.log 2>&1 &")
|
|
||||||
end
|
|
||||||
else
|
|
||||||
luci.sys.exec("sh /usr/share/AdGuardHome/update_core.sh "..arg.." >/tmp/AdGuardHome_update.log 2>&1 &")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function get_log()
|
|
||||||
local logfile=uci:get("AdGuardHome","AdGuardHome","logfile")
|
|
||||||
if (logfile==nil) then
|
|
||||||
http.write("no log available\n")
|
|
||||||
return
|
|
||||||
elseif (logfile=="syslog") then
|
|
||||||
if not fs.access("/var/run/AdGuardHomesyslog") then
|
|
||||||
luci.sys.exec("(/usr/share/AdGuardHome/getsyslog.sh &); sleep 1;")
|
|
||||||
end
|
|
||||||
logfile="/tmp/AdGuardHometmp.log"
|
|
||||||
fs.writefile("/var/run/AdGuardHomesyslog","1")
|
|
||||||
elseif not fs.access(logfile) then
|
|
||||||
http.write("")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
http.prepare_content("text/plain; charset=utf-8")
|
|
||||||
local fdp
|
|
||||||
if fs.access("/var/run/lucilogreload") then
|
|
||||||
fdp=0
|
|
||||||
fs.remove("/var/run/lucilogreload")
|
|
||||||
else
|
|
||||||
fdp=tonumber(fs.readfile("/var/run/lucilogpos")) or 0
|
|
||||||
end
|
|
||||||
local f=io.open(logfile, "r+")
|
|
||||||
f:seek("set",fdp)
|
|
||||||
local a=f:read(2048000) or ""
|
|
||||||
fdp=f:seek()
|
|
||||||
fs.writefile("/var/run/lucilogpos",tostring(fdp))
|
|
||||||
f:close()
|
|
||||||
http.write(a)
|
|
||||||
end
|
|
||||||
function do_dellog()
|
|
||||||
local logfile=uci:get("AdGuardHome","AdGuardHome","logfile")
|
|
||||||
fs.writefile(logfile,"")
|
|
||||||
http.prepare_content("application/json")
|
|
||||||
http.write('')
|
|
||||||
end
|
|
||||||
function check_update()
|
|
||||||
http.prepare_content("text/plain; charset=utf-8")
|
|
||||||
local fdp=tonumber(fs.readfile("/var/run/lucilogpos")) or 0
|
|
||||||
local f=io.open("/tmp/AdGuardHome_update.log", "r+")
|
|
||||||
f:seek("set",fdp)
|
|
||||||
local a=f:read(2048000) or ""
|
|
||||||
fdp=f:seek()
|
|
||||||
fs.writefile("/var/run/lucilogpos",tostring(fdp))
|
|
||||||
f:close()
|
|
||||||
if fs.access("/var/run/update_core") then
|
|
||||||
http.write(a)
|
|
||||||
else
|
|
||||||
http.write(a.."\0")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@ -1,304 +0,0 @@
|
|||||||
require("luci.sys")
|
|
||||||
require("luci.util")
|
|
||||||
require("io")
|
|
||||||
local m,s,o,o1
|
|
||||||
local fs=require"nixio.fs"
|
|
||||||
local uci=require"luci.model.uci".cursor()
|
|
||||||
local configpath=uci:get("AdGuardHome","AdGuardHome","configpath") or "/etc/AdGuardHome.yaml"
|
|
||||||
local binpath=uci:get("AdGuardHome","AdGuardHome","binpath") or "/usr/bin/AdGuardHome"
|
|
||||||
httpport=uci:get("AdGuardHome","AdGuardHome","httpport") or "3000"
|
|
||||||
m = Map("AdGuardHome", "AdGuard Home")
|
|
||||||
m.description = translate("Free and open source, powerful network-wide ads & trackers blocking DNS server.")
|
|
||||||
m:section(SimpleSection).template = "AdGuardHome/AdGuardHome_status"
|
|
||||||
|
|
||||||
s = m:section(TypedSection, "AdGuardHome")
|
|
||||||
s.anonymous=true
|
|
||||||
s.addremove=false
|
|
||||||
---- enable
|
|
||||||
o = s:option(Flag, "enabled", translate("Enable"))
|
|
||||||
o.default = 0
|
|
||||||
o.optional = false
|
|
||||||
---- httpport
|
|
||||||
o =s:option(Value,"httpport",translate("Browser management port"))
|
|
||||||
o.placeholder=3000
|
|
||||||
o.default=3000
|
|
||||||
o.datatype="port"
|
|
||||||
o.optional = false
|
|
||||||
o.description = translate("<input type=\"button\" style=\"width:210px;border-color:Teal; text-align:center;font-weight:bold;color:Green;\" value=\"AdGuardHome Web:"..httpport.."\" onclick=\"window.open('http://'+window.location.hostname+':"..httpport.."/')\"/>")
|
|
||||||
---- update warning not safe
|
|
||||||
local binmtime=uci:get("AdGuardHome","AdGuardHome","binmtime") or "0"
|
|
||||||
local e=""
|
|
||||||
if not fs.access(configpath) then
|
|
||||||
e=e.." "..translate("no config")
|
|
||||||
end
|
|
||||||
if not fs.access(binpath) then
|
|
||||||
e=e.." "..translate("no core")
|
|
||||||
else
|
|
||||||
local version=uci:get("AdGuardHome","AdGuardHome","version")
|
|
||||||
local testtime=fs.stat(binpath,"mtime")
|
|
||||||
if testtime~=tonumber(binmtime) or version==nil then
|
|
||||||
local tmp=luci.sys.exec(binpath.." --version | grep -m 1 -E 'v[0-9.]+' -o ")
|
|
||||||
version=string.sub(tmp, 1)
|
|
||||||
if version=="" then version="core error" end
|
|
||||||
uci:set("AdGuardHome","AdGuardHome","version",version)
|
|
||||||
uci:set("AdGuardHome","AdGuardHome","binmtime",testtime)
|
|
||||||
uci:save("AdGuardHome")
|
|
||||||
end
|
|
||||||
e=version..e
|
|
||||||
end
|
|
||||||
o=s:option(Button,"restart",translate("Update"))
|
|
||||||
o.inputtitle=translate("Update core version")
|
|
||||||
o.template = "AdGuardHome/AdGuardHome_check"
|
|
||||||
o.showfastconfig=(not fs.access(configpath))
|
|
||||||
o.description=string.format(translate("core version:").."<strong><font id=\"updateversion\" color=\"green\">%s </font></strong>",e)
|
|
||||||
---- port warning not safe
|
|
||||||
local port=luci.sys.exec("awk '/ port:/{printf($2);exit;}' "..configpath.." 2>nul")
|
|
||||||
if (port=="") then port="?" end
|
|
||||||
---- Redirect
|
|
||||||
o = s:option(ListValue, "redirect", port..translate("Redirect"), translate("AdGuardHome redirect mode"))
|
|
||||||
o.placeholder = "none"
|
|
||||||
o:value("none", translate("none"))
|
|
||||||
o:value("dnsmasq-upstream", translate("Run as dnsmasq upstream server"))
|
|
||||||
o:value("redirect", translate("Redirect 53 port to AdGuardHome"))
|
|
||||||
o:value("exchange", translate("Use port 53 replace dnsmasq"))
|
|
||||||
o.default = "none"
|
|
||||||
o.optional = true
|
|
||||||
---- bin path
|
|
||||||
o = s:option(Value, "binpath", translate("Bin Path"), translate("AdGuardHome Bin path if no bin will auto download"))
|
|
||||||
o.default = "/usr/bin/AdGuardHome"
|
|
||||||
o.datatype = "string"
|
|
||||||
o.optional = false
|
|
||||||
o.rmempty=false
|
|
||||||
o.validate=function(self, value)
|
|
||||||
if value=="" then return nil end
|
|
||||||
if fs.stat(value,"type")=="dir" then
|
|
||||||
fs.rmdir(value)
|
|
||||||
end
|
|
||||||
if fs.stat(value,"type")=="dir" then
|
|
||||||
if (m.message) then
|
|
||||||
m.message =m.message.."\nerror!bin path is a dir"
|
|
||||||
else
|
|
||||||
m.message ="error!bin path is a dir"
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
--- upx
|
|
||||||
o = s:option(ListValue, "upxflag", translate("use upx to compress bin after download"))
|
|
||||||
o:value("", translate("none"))
|
|
||||||
o:value("-1", translate("compress faster"))
|
|
||||||
o:value("-9", translate("compress better"))
|
|
||||||
o:value("--best", translate("compress best(can be slow for big files)"))
|
|
||||||
o:value("--brute", translate("try all available compression methods & filters [slow]"))
|
|
||||||
o:value("--ultra-brute", translate("try even more compression variants [very slow]"))
|
|
||||||
o.default = ""
|
|
||||||
o.description=translate("bin use less space,but may have compatibility issues")
|
|
||||||
o.rmempty = true
|
|
||||||
---- config path
|
|
||||||
o = s:option(Value, "configpath", translate("Config Path"), translate("AdGuardHome config path"))
|
|
||||||
o.default = "/etc/AdGuardHome.yaml"
|
|
||||||
o.datatype = "string"
|
|
||||||
o.optional = false
|
|
||||||
o.rmempty=false
|
|
||||||
o.validate=function(self, value)
|
|
||||||
if value==nil then return nil end
|
|
||||||
if fs.stat(value,"type")=="dir" then
|
|
||||||
fs.rmdir(value)
|
|
||||||
end
|
|
||||||
if fs.stat(value,"type")=="dir" then
|
|
||||||
if m.message then
|
|
||||||
m.message =m.message.."\nerror!config path is a dir"
|
|
||||||
else
|
|
||||||
m.message ="error!config path is a dir"
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
---- work dir
|
|
||||||
o = s:option(Value, "workdir", translate("Work dir"), translate("AdGuardHome work dir include rules,audit log and database"))
|
|
||||||
o.default = "/etc/AdGuardHome"
|
|
||||||
o.datatype = "string"
|
|
||||||
o.optional = false
|
|
||||||
o.rmempty=false
|
|
||||||
o.validate=function(self, value)
|
|
||||||
if value=="" then return nil end
|
|
||||||
if fs.stat(value,"type")=="reg" then
|
|
||||||
if m.message then
|
|
||||||
m.message =m.message.."\nerror!work dir is a file"
|
|
||||||
else
|
|
||||||
m.message ="error!work dir is a file"
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
if string.sub(value, -1)=="/" then
|
|
||||||
return string.sub(value, 1, -2)
|
|
||||||
else
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
---- log file
|
|
||||||
o = s:option(Value, "logfile", translate("Runtime log file"), translate("AdGuardHome runtime Log file if 'syslog': write to system log;if empty no log"))
|
|
||||||
o.datatype = "string"
|
|
||||||
o.rmempty = true
|
|
||||||
o.validate=function(self, value)
|
|
||||||
if fs.stat(value,"type")=="dir" then
|
|
||||||
fs.rmdir(value)
|
|
||||||
end
|
|
||||||
if fs.stat(value,"type")=="dir" then
|
|
||||||
if m.message then
|
|
||||||
m.message =m.message.."\nerror!log file is a dir"
|
|
||||||
else
|
|
||||||
m.message ="error!log file is a dir"
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
---- debug
|
|
||||||
o = s:option(Flag, "verbose", translate("Verbose log"))
|
|
||||||
o.default = 0
|
|
||||||
o.optional = true
|
|
||||||
---- gfwlist
|
|
||||||
local a=luci.sys.call("grep -m 1 -q programadd "..configpath)
|
|
||||||
if (a==0) then
|
|
||||||
a="Added"
|
|
||||||
else
|
|
||||||
a="Not added"
|
|
||||||
end
|
|
||||||
o=s:option(Button,"gfwdel",translate("Del gfwlist"),translate(a))
|
|
||||||
o.optional = true
|
|
||||||
o.inputtitle=translate("Del")
|
|
||||||
o.write=function()
|
|
||||||
luci.sys.exec("sh /usr/share/AdGuardHome/gfw2adg.sh del 2>&1")
|
|
||||||
luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome"))
|
|
||||||
end
|
|
||||||
o=s:option(Button,"gfwadd",translate("Add gfwlist"),translate(a))
|
|
||||||
o.optional = true
|
|
||||||
o.inputtitle=translate("Add")
|
|
||||||
o.write=function()
|
|
||||||
luci.sys.exec("sh /usr/share/AdGuardHome/gfw2adg.sh 2>&1")
|
|
||||||
luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome"))
|
|
||||||
end
|
|
||||||
o = s:option(Value, "gfwupstream", translate("Gfwlist upstream dns server"), translate("Gfwlist domain upstream dns service")..translate(a))
|
|
||||||
o.default = "tcp://208.67.220.220:5353"
|
|
||||||
o.datatype = "string"
|
|
||||||
o.optional = true
|
|
||||||
---- chpass
|
|
||||||
o = s:option(Value, "hashpass", translate("Change browser management password"), translate("Press load culculate model and culculate finally save/apply"))
|
|
||||||
o.default = ""
|
|
||||||
o.datatype = "string"
|
|
||||||
o.template = "AdGuardHome/AdGuardHome_chpass"
|
|
||||||
o.optional = true
|
|
||||||
---- upgrade protect
|
|
||||||
o = s:option(MultiValue, "upprotect", translate("Keep files when system upgrade"))
|
|
||||||
o:value("$binpath",translate("core bin"))
|
|
||||||
o:value("$configpath",translate("config file"))
|
|
||||||
o:value("$logfile",translate("log file"))
|
|
||||||
o:value("$workdir/data/sessions.db",translate("sessions.db"))
|
|
||||||
o:value("$workdir/data/stats.db",translate("stats.db"))
|
|
||||||
o:value("$workdir/data/querylog.json",translate("querylog.json"))
|
|
||||||
o:value("$workdir/data/filters",translate("filters"))
|
|
||||||
o.widget = "checkbox"
|
|
||||||
o.default = nil
|
|
||||||
o.optional=true
|
|
||||||
---- wait net on boot
|
|
||||||
o = s:option(Flag, "waitonboot", translate("On boot when network ok restart"))
|
|
||||||
o.default = 1
|
|
||||||
o.optional = true
|
|
||||||
---- backup workdir on shutdown
|
|
||||||
local workdir=uci:get("AdGuardHome","AdGuardHome","workdir") or "/etc/AdGuardHome"
|
|
||||||
o = s:option(MultiValue, "backupfile", translate("Backup workdir files when shutdown"))
|
|
||||||
o1 = s:option(Value, "backupwdpath", translate("Backup workdir path"))
|
|
||||||
local name
|
|
||||||
o:value("filters","filters")
|
|
||||||
o:value("stats.db","stats.db")
|
|
||||||
o:value("querylog.json","querylog.json")
|
|
||||||
o:value("sessions.db","sessions.db")
|
|
||||||
o1:depends ("backupfile", "filters")
|
|
||||||
o1:depends ("backupfile", "stats.db")
|
|
||||||
o1:depends ("backupfile", "querylog.json")
|
|
||||||
o1:depends ("backupfile", "sessions.db")
|
|
||||||
for name in fs.glob(workdir.."/data/*")
|
|
||||||
do
|
|
||||||
name=fs.basename (name)
|
|
||||||
if name~="filters" and name~="stats.db" and name~="querylog.json" and name~="sessions.db" then
|
|
||||||
o:value(name,name)
|
|
||||||
o1:depends ("backupfile", name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
o.widget = "checkbox"
|
|
||||||
o.default = nil
|
|
||||||
o.optional=false
|
|
||||||
o.description=translate("Will be restore when workdir/data is empty")
|
|
||||||
----backup workdir path
|
|
||||||
|
|
||||||
o1.default = "/etc/AdGuardHome"
|
|
||||||
o1.datatype = "string"
|
|
||||||
o1.optional = false
|
|
||||||
o1.validate=function(self, value)
|
|
||||||
if fs.stat(value,"type")=="reg" then
|
|
||||||
if m.message then
|
|
||||||
m.message =m.message.."\nerror!backup dir is a file"
|
|
||||||
else
|
|
||||||
m.message ="error!backup dir is a file"
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
if string.sub(value,-1)=="/" then
|
|
||||||
return string.sub(value, 1, -2)
|
|
||||||
else
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
----Crontab
|
|
||||||
o = s:option(MultiValue, "crontab", translate("Crontab task"),translate("Please change time and args in crontab"))
|
|
||||||
o:value("autoupdate",translate("Auto update core"))
|
|
||||||
o:value("cutquerylog",translate("Auto tail querylog"))
|
|
||||||
o:value("cutruntimelog",translate("Auto tail runtime log"))
|
|
||||||
o:value("autohost",translate("Auto update ipv6 hosts and restart adh"))
|
|
||||||
o:value("autogfw",translate("Auto update gfwlist and restart adh"))
|
|
||||||
o.widget = "checkbox"
|
|
||||||
o.default = nil
|
|
||||||
o.optional=true
|
|
||||||
|
|
||||||
----downloadpath
|
|
||||||
o = s:option(TextValue, "downloadlinks",translate("Download links for update"))
|
|
||||||
o.optional = false
|
|
||||||
o.rows = 4
|
|
||||||
o.wrap = "soft"
|
|
||||||
o.cfgvalue = function(self, section)
|
|
||||||
return fs.readfile("/usr/share/AdGuardHome/links.txt")
|
|
||||||
end
|
|
||||||
o.write = function(self, section, value)
|
|
||||||
fs.writefile("/usr/share/AdGuardHome/links.txt", value:gsub("\r\n", "\n"))
|
|
||||||
end
|
|
||||||
fs.writefile("/var/run/lucilogpos","0")
|
|
||||||
function m.on_commit(map)
|
|
||||||
if (fs.access("/var/run/AdGserverdis")) then
|
|
||||||
io.popen("/etc/init.d/AdGuardHome reload &")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local ucitracktest=uci:get("AdGuardHome","AdGuardHome","ucitracktest")
|
|
||||||
if ucitracktest=="1" then
|
|
||||||
return
|
|
||||||
elseif ucitracktest=="0" then
|
|
||||||
io.popen("/etc/init.d/AdGuardHome reload &")
|
|
||||||
else
|
|
||||||
if (fs.access("/var/run/AdGlucitest")) then
|
|
||||||
uci:set("AdGuardHome","AdGuardHome","ucitracktest","0")
|
|
||||||
io.popen("/etc/init.d/AdGuardHome reload &")
|
|
||||||
else
|
|
||||||
fs.writefile("/var/run/AdGlucitest","")
|
|
||||||
if (ucitracktest=="2") then
|
|
||||||
uci:set("AdGuardHome","AdGuardHome","ucitracktest","1")
|
|
||||||
else
|
|
||||||
uci:set("AdGuardHome","AdGuardHome","ucitracktest","2")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
uci:save("AdGuardHome")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return m
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
local fs=require"nixio.fs"
|
|
||||||
local uci=require"luci.model.uci".cursor()
|
|
||||||
local f,t
|
|
||||||
f=SimpleForm("logview")
|
|
||||||
f.reset = false
|
|
||||||
f.submit = false
|
|
||||||
t=f:field(TextValue,"conf")
|
|
||||||
t.rmempty=true
|
|
||||||
t.rows=20
|
|
||||||
t.template="AdGuardHome/log"
|
|
||||||
t.readonly="readonly"
|
|
||||||
local logfile=uci:get("AdGuardHome","AdGuardHome","logfile") or ""
|
|
||||||
t.timereplace=(logfile~="syslog" and logfile~="" )
|
|
||||||
t.pollcheck=logfile~=""
|
|
||||||
fs.writefile("/var/run/lucilogreload","")
|
|
||||||
return f
|
|
||||||
@ -1,97 +0,0 @@
|
|||||||
local m, s, o
|
|
||||||
local fs = require "nixio.fs"
|
|
||||||
local uci=require"luci.model.uci".cursor()
|
|
||||||
local sys=require"luci.sys"
|
|
||||||
require("string")
|
|
||||||
require("io")
|
|
||||||
require("table")
|
|
||||||
function gen_template_config()
|
|
||||||
local b
|
|
||||||
local d=""
|
|
||||||
for cnt in io.lines("/tmp/resolv.conf.d/resolv.conf.auto") do
|
|
||||||
b=string.match (cnt,"^[^#]*nameserver%s+([^%s]+)$")
|
|
||||||
if (b~=nil) then
|
|
||||||
d=d.." - "..b.."\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local f=io.open("/usr/share/AdGuardHome/AdGuardHome_template.yaml", "r+")
|
|
||||||
local tbl = {}
|
|
||||||
local a=""
|
|
||||||
while (1) do
|
|
||||||
a=f:read("*l")
|
|
||||||
if (a=="#bootstrap_dns") then
|
|
||||||
a=d
|
|
||||||
elseif (a=="#upstream_dns") then
|
|
||||||
a=d
|
|
||||||
elseif (a==nil) then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
table.insert(tbl, a)
|
|
||||||
end
|
|
||||||
f:close()
|
|
||||||
return table.concat(tbl, "\n")
|
|
||||||
end
|
|
||||||
m = Map("AdGuardHome")
|
|
||||||
local configpath = uci:get("AdGuardHome","AdGuardHome","configpath")
|
|
||||||
local binpath = uci:get("AdGuardHome","AdGuardHome","binpath")
|
|
||||||
s = m:section(TypedSection, "AdGuardHome")
|
|
||||||
s.anonymous=true
|
|
||||||
s.addremove=false
|
|
||||||
--- config
|
|
||||||
o = s:option(TextValue, "escconf")
|
|
||||||
o.rows = 66
|
|
||||||
o.wrap = "off"
|
|
||||||
o.rmempty = true
|
|
||||||
o.cfgvalue = function(self, section)
|
|
||||||
return fs.readfile("/tmp/AdGuardHometmpconfig.yaml") or fs.readfile(configpath) or gen_template_config() or ""
|
|
||||||
end
|
|
||||||
o.validate=function(self, value)
|
|
||||||
fs.writefile("/tmp/AdGuardHometmpconfig.yaml", value:gsub("\r\n", "\n"))
|
|
||||||
if fs.access(binpath) then
|
|
||||||
if (sys.call(binpath.." -c /tmp/AdGuardHometmpconfig.yaml --check-config 2> /tmp/AdGuardHometest.log")==0) then
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome","manual"))
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
o.write = function(self, section, value)
|
|
||||||
fs.move("/tmp/AdGuardHometmpconfig.yaml",configpath)
|
|
||||||
end
|
|
||||||
o.remove = function(self, section, value)
|
|
||||||
fs.writefile(configpath, "")
|
|
||||||
end
|
|
||||||
--- js and reload button
|
|
||||||
o = s:option(DummyValue, "")
|
|
||||||
o.anonymous=true
|
|
||||||
o.template = "AdGuardHome/yamleditor"
|
|
||||||
if not fs.access(binpath) then
|
|
||||||
o.description=translate("WARNING!!! no bin found apply config will not be test")
|
|
||||||
end
|
|
||||||
--- log
|
|
||||||
if (fs.access("/tmp/AdGuardHometmpconfig.yaml")) then
|
|
||||||
local c=fs.readfile("/tmp/AdGuardHometest.log")
|
|
||||||
if (c~="") then
|
|
||||||
o = s:option(TextValue, "")
|
|
||||||
o.readonly=true
|
|
||||||
o.rows = 5
|
|
||||||
o.rmempty = true
|
|
||||||
o.name=""
|
|
||||||
o.cfgvalue = function(self, section)
|
|
||||||
return fs.readfile("/tmp/AdGuardHometest.log")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function m.on_commit(map)
|
|
||||||
local ucitracktest=uci:get("AdGuardHome","AdGuardHome","ucitracktest")
|
|
||||||
if ucitracktest=="1" then
|
|
||||||
return
|
|
||||||
elseif ucitracktest=="0" then
|
|
||||||
io.popen("/etc/init.d/AdGuardHome reload &")
|
|
||||||
else
|
|
||||||
fs.writefile("/var/run/AdGlucitest","")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return m
|
|
||||||
@ -1,78 +0,0 @@
|
|||||||
<%+cbi/valueheader%>
|
|
||||||
<%local fs=require"nixio.fs"%>
|
|
||||||
<input type="button" class="cbi-button cbi-button-apply" id="apply_update_button" value="<%:Update core version%>" onclick=" return apply_update() "/>
|
|
||||||
<input type="button" class="cbi-button cbi-button-apply" id="apply_forceupdate_button" value="<%:Force update%>" onclick=" return apply_forceupdate()" style="display:none"/>
|
|
||||||
<% if self.showfastconfig then %>
|
|
||||||
<input type="button" class="cbi-button cbi-button-apply" id="to_configpage" value="<%:Fast config%>" onclick="location.href='<%=url([[admin]], [[services]], [[AdGuardHome]], [[manual]])%>'"/>
|
|
||||||
<%end%>
|
|
||||||
<div id="logview" style="display:none">
|
|
||||||
<input type="checkbox" id="reversetag" value="reverse" onclick=" return reverselog()" style="vertical-align:middle;height: auto;"><%:reverse%></input>
|
|
||||||
<textarea id="cbid.logview.1.conf" class="cbi-input-textarea" style="width: 100%;display:block;" data-update="change" rows="5" cols="60" readonly="readonly" > </textarea>
|
|
||||||
</div>
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
var updatebtn = document.getElementById('apply_update_button');
|
|
||||||
var forceupdatebtn = document.getElementById('apply_forceupdate_button');
|
|
||||||
var islogreverse = false;
|
|
||||||
function apply_forceupdate(){
|
|
||||||
XHR.get('<%=url([[admin]], [[services]], [[AdGuardHome]], [[doupdate]])%>',{ force: 1 },function(x, data){}
|
|
||||||
);
|
|
||||||
updatebtn.disabled = true;
|
|
||||||
poll_check();
|
|
||||||
return
|
|
||||||
}
|
|
||||||
function reverselog(){
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
lv.innerHTML=lv.innerHTML.split('\n').reverse().join('\n')
|
|
||||||
if (islogreverse){
|
|
||||||
islogreverse=false;
|
|
||||||
}else{
|
|
||||||
islogreverse=true;
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
function apply_update(){
|
|
||||||
XHR.get('<%=url([[admin]], [[services]], [[AdGuardHome]], [[doupdate]])%>',null,function(x, data){}
|
|
||||||
);
|
|
||||||
updatebtn.disabled = true;
|
|
||||||
updatebtn.value = '<%:Check...%>';
|
|
||||||
forceupdatebtn.style.display="inline"
|
|
||||||
poll_check();
|
|
||||||
return
|
|
||||||
}
|
|
||||||
function poll_check(){
|
|
||||||
var tag = document.getElementById('logview');
|
|
||||||
tag.style.display="block"
|
|
||||||
XHR.poll(3, '<%=url([[admin]], [[services]], [[AdGuardHome]], [[check]])%>', null,
|
|
||||||
function(x, data) {
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
if (x.responseText && lv) {
|
|
||||||
if (x.responseText=="\u0000"){
|
|
||||||
for(j = 0,len=this.XHR._q.length; j < len; j++) {
|
|
||||||
if (this.XHR._q[j].url == '<%=url([[admin]], [[services]], [[AdGuardHome]], [[check]])%>'){
|
|
||||||
this.XHR._q.splice(j,1);
|
|
||||||
updatebtn.disabled = false;
|
|
||||||
updatebtn.value = '<%:Updated%>';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (islogreverse){
|
|
||||||
lv.innerHTML = x.responseText.split('\n').reverse().join('\n')+lv.innerHTML;
|
|
||||||
}else{
|
|
||||||
lv.innerHTML += x.responseText;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);}
|
|
||||||
<% if fs.access("/var/run/update_core") then %>
|
|
||||||
updatebtn.disabled = true;
|
|
||||||
updatebtn.value = '<%:Check...%>';
|
|
||||||
forceupdatebtn.style.display="inline"
|
|
||||||
poll_check();
|
|
||||||
<%elseif fs.access("/var/run/update_core_error") then %>
|
|
||||||
poll_check();
|
|
||||||
<%end%>
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
||||||
<%+cbi/valuefooter%>
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
<%+cbi/valueheader%>
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
function chpass(btn)
|
|
||||||
{
|
|
||||||
btn.disabled = true;
|
|
||||||
btn.value = '<%:loading...%>';
|
|
||||||
if (typeof bcryptloaded == 'undefined' ){
|
|
||||||
var theHead = document.getElementsByTagName('head').item(0);
|
|
||||||
//创建脚本的dom对象实例
|
|
||||||
var myScript = document.createElement('script');
|
|
||||||
myScript.src = '<%=resource%>/twin-bcrypt.min.js'; //指定脚本路径
|
|
||||||
myScript.type = 'text/javascript'; //指定脚本类型
|
|
||||||
myScript.defer = true; //程序下载完后再解析和执行
|
|
||||||
theHead.appendChild(myScript);
|
|
||||||
bcryptloaded=1;
|
|
||||||
btn.value = '<%:Culculate%>';
|
|
||||||
btn.disabled = false;
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var lv = document.getElementById('cbid.AdGuardHome.AdGuardHome.hashpass');
|
|
||||||
if (lv.value != ""){
|
|
||||||
var hash = TwinBcrypt.hashSync(lv.value);
|
|
||||||
lv.value=hash;
|
|
||||||
btn.value = '<%:Please save/apply%>';
|
|
||||||
}else{
|
|
||||||
btn.value = '<%:is empty%>';
|
|
||||||
btn.disabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
||||||
<input data-update="change"<%=
|
|
||||||
attr("id", cbid) ..
|
|
||||||
attr("name", cbid) ..
|
|
||||||
attr("type", self.password and "password" or "text") ..
|
|
||||||
attr("class", self.password and "cbi-input-password" or "cbi-input-text") ..
|
|
||||||
attr("value", self:cfgvalue(section) or self.default) ..
|
|
||||||
ifattr(self.size, "size") ..
|
|
||||||
ifattr(self.placeholder, "placeholder") ..
|
|
||||||
ifattr(self.readonly, "readonly") ..
|
|
||||||
ifattr(self.maxlength, "maxlength") ..
|
|
||||||
ifattr(self.datatype, "data-type", self.datatype) ..
|
|
||||||
ifattr(self.datatype, "data-optional", self.optional or self.rmempty) ..
|
|
||||||
ifattr(self.combobox_manual, "data-manual", self.combobox_manual) ..
|
|
||||||
ifattr(#self.keylist > 0, "data-choices", { self.keylist, self.vallist })
|
|
||||||
%> />
|
|
||||||
<% if self.password then %><img src="<%=resource%>/cbi/reload.gif" style="vertical-align:middle" title="<%:Reveal/hide password%>" onclick="var e = document.getElementById('<%=cbid%>'); e.type = (e.type=='password') ? 'text' : 'password';" /><% end %>
|
|
||||||
<input type="button" class="cbi-button cbi-button-apply" id="cbid.AdGuardHome.AdGuardHome.applychpass" value="<%:Load culculate model%>" onclick="return chpass(this)"/>
|
|
||||||
<%+cbi/valuefooter%>
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
XHR.poll(3, '<%=url([[admin]], [[services]], [[AdGuardHome]], [[status]])%>', null,
|
|
||||||
function(x, data) {
|
|
||||||
var tb = document.getElementById('AdGuardHome_status');
|
|
||||||
if (data && tb) {
|
|
||||||
if (data.running) {
|
|
||||||
tb.innerHTML = '<em><b><font color=green>AdGuardHome <%:RUNNING%></font></b></em>';
|
|
||||||
} else {
|
|
||||||
tb.innerHTML = '<em><b><font color=red>AdGuardHome <%:NOT RUNNING%></font></b></em>';
|
|
||||||
}
|
|
||||||
if (data.redirect)
|
|
||||||
{
|
|
||||||
tb.innerHTML+='<em><b><font color=green><%:Redirected%></font></b></em>'
|
|
||||||
} else {
|
|
||||||
tb.innerHTML+='<em><b><font color=red><%:Not redirect%></font></b></em>'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
||||||
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
|
|
||||||
<fieldset class="cbi-section">
|
|
||||||
<p id="AdGuardHome_status">
|
|
||||||
<em><%:Collecting data...%></em>
|
|
||||||
</p>
|
|
||||||
</fieldset>
|
|
||||||
@ -1,110 +0,0 @@
|
|||||||
<%+cbi/valueheader%>
|
|
||||||
<input type="checkbox" name="NAME" value="reverse" onclick=" return reverselog()" style="vertical-align:middle;height: auto;" checked><%:reverse%></input>
|
|
||||||
<%if self.timereplace then%>
|
|
||||||
<input type="checkbox" name="NAME" value="localtime" onclick=" return chlogtime()" style="vertical-align:middle;height: auto;" checked><%:localtime%></input><br>
|
|
||||||
<%end%>
|
|
||||||
<textarea id="cbid.logview.1.conf" class="cbi-input-textarea" style="width: 100%;display:inline" data-update="change" rows="32" cols="60" readonly="readonly" > </textarea>
|
|
||||||
<input type="button" class="cbi-button cbi-button-apply" id="apply_update_button" value="<%:dellog%>" onclick=" return apply_del_log() "/>
|
|
||||||
<input type="button" class="cbi-button cbi-button-apply" value="<%:download log%>" style=" display:inline;" onclick=" return download_log()" />
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
var islogreverse = true;
|
|
||||||
var isutc2local = <%=tostring(self.timereplace)%>;
|
|
||||||
function createAndDownloadFile(fileName, content) {
|
|
||||||
var aTag = document.createElement('a');
|
|
||||||
var blob = new Blob([content]);
|
|
||||||
aTag.download = fileName;
|
|
||||||
aTag.href = URL.createObjectURL(blob);
|
|
||||||
aTag.click();
|
|
||||||
URL.revokeObjectURL(blob);
|
|
||||||
}
|
|
||||||
function download_log(){
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
var dt = new Date();
|
|
||||||
var timestamp = (dt.getMonth()+1)+"-"+dt.getDate()+"-"+dt.getHours()+"_"+dt.getMinutes();
|
|
||||||
createAndDownloadFile("AdGuardHome"+timestamp+".log",lv.innerHTML)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
function apply_del_log(){
|
|
||||||
XHR.get('<%=url([[admin]], [[services]], [[AdGuardHome]], [[dodellog]])%>',null,function(x, data){
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
lv.innerHTML="";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return
|
|
||||||
}
|
|
||||||
function chlogtime(){
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
if (isutc2local){
|
|
||||||
lv.innerHTML=line_toUTC(lv.innerHTML).join('\n');
|
|
||||||
isutc2local=false;
|
|
||||||
}else{
|
|
||||||
lv.innerHTML=line_tolocal(lv.innerHTML).join('\n');
|
|
||||||
isutc2local=true;
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
function reverselog(){
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
lv.innerHTML=lv.innerHTML.split('\n').reverse().join('\n')
|
|
||||||
if (islogreverse){
|
|
||||||
islogreverse=false;
|
|
||||||
}else{
|
|
||||||
islogreverse=true;
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
function p(s) {
|
|
||||||
return s < 10 ? '0' + s: s;
|
|
||||||
}
|
|
||||||
function line_tolocal(str){
|
|
||||||
var strt=new Array();
|
|
||||||
str.trim().split('\n').forEach(function(v, i) {
|
|
||||||
var dt = new Date(v.substring(0,19)+" UTC");
|
|
||||||
if (dt != "Invalid Date"){
|
|
||||||
strt[i]=dt.getFullYear()+"/"+p(dt.getMonth()+1)+"/"+p(dt.getDate())+" "+p(dt.getHours())+":"+p(dt.getMinutes())+":"+p(dt.getSeconds())+v.substring(19);
|
|
||||||
}else{
|
|
||||||
strt[i]=v;}})
|
|
||||||
return strt
|
|
||||||
}
|
|
||||||
function line_toUTC(str){
|
|
||||||
var strt=new Array();
|
|
||||||
str.trim().split('\n').forEach(function(v, i) {
|
|
||||||
var dt = new Date(v.substring(0,19))
|
|
||||||
if (dt != "Invalid Date"){
|
|
||||||
strt[i]=dt.getUTCFullYear()+"/"+p(dt.getUTCMonth()+1)+"/"+p(dt.getUTCDate())+" "+p(dt.getUTCHours())+":"+p(dt.getUTCMinutes())+":"+p(dt.getUTCSeconds())+v.substring(19);
|
|
||||||
}else{
|
|
||||||
strt[i]=v;}})
|
|
||||||
return strt
|
|
||||||
}
|
|
||||||
function poll_check(){
|
|
||||||
XHR.poll(3, '<%=url([[admin]], [[services]], [[AdGuardHome]], [[getlog]])%>', null,
|
|
||||||
function(x, data) {
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
if (x.responseText && lv) {
|
|
||||||
if (isutc2local)
|
|
||||||
{
|
|
||||||
var lines=line_tolocal(x.responseText);
|
|
||||||
if (islogreverse){
|
|
||||||
lv.innerHTML = lines.reverse().join('\n')+lv.innerHTML;
|
|
||||||
}else{
|
|
||||||
lv.innerHTML += lines.join('\n');
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
if (islogreverse){
|
|
||||||
lv.innerHTML = x.responseText.split('\n').reverse().join('\n')+lv.innerHTML;
|
|
||||||
}else{
|
|
||||||
lv.innerHTML += x.responseText;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);}
|
|
||||||
<%if self.pollcheck then%>
|
|
||||||
poll_check();
|
|
||||||
<%else%>
|
|
||||||
var lv = document.getElementById('cbid.logview.1.conf');
|
|
||||||
lv.innerHTML="<%:Please add log path in config to enable log%>"
|
|
||||||
<%end%>
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
||||||
<%+cbi/valuefooter%>
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
<%+cbi/valueheader%>
|
|
||||||
<script src="/luci-static/resources/codemirror/lib/codemirror.js"></script>
|
|
||||||
<link rel="stylesheet" href="/luci-static/resources/codemirror/lib/codemirror.css"/>
|
|
||||||
<script src="/luci-static/resources/codemirror/mode/yaml/yaml.js"></script>
|
|
||||||
<link rel="stylesheet" href="/luci-static/resources/codemirror/theme/dracula.css"/>
|
|
||||||
<link rel="stylesheet" href="/luci-static/resources/codemirror/addon/fold/foldgutter.css"/>
|
|
||||||
<script src="/luci-static/resources/codemirror/addon/fold/foldcode.js"></script>
|
|
||||||
<script src="/luci-static/resources/codemirror/addon/fold/foldgutter.js"></script>
|
|
||||||
<script src="/luci-static/resources/codemirror/addon/fold/indent-fold.js"></script>
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
var editor = CodeMirror.fromTextArea(document.getElementById("cbid.AdGuardHome.AdGuardHome.escconf"), {
|
|
||||||
mode: "text/yaml", //实现groovy代码高亮
|
|
||||||
styleActiveLine: true,
|
|
||||||
lineNumbers: true, //显示行号
|
|
||||||
theme: "dracula", //设置主题
|
|
||||||
lineWrapping: true, //代码折叠
|
|
||||||
foldGutter: true,
|
|
||||||
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
|
|
||||||
matchBrackets: true //括号匹配
|
|
||||||
}
|
|
||||||
);
|
|
||||||
function reload_config(){
|
|
||||||
XHR.get('<%=url([[admin]], [[services]], [[AdGuardHome]], [[reloadconfig]])%>', null,
|
|
||||||
function(x, data) {
|
|
||||||
location.reload();
|
|
||||||
});}
|
|
||||||
function use_template(){
|
|
||||||
XHR.get('<%=url([[admin]], [[services]], [[AdGuardHome]], [[gettemplateconfig]])%>', null,
|
|
||||||
function(x, data) {
|
|
||||||
editor.setValue(x.responseText)
|
|
||||||
});}
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
||||||
<%fs=require"nixio.fs"%>
|
|
||||||
<%if fs.access("/tmp/AdGuardHometmpconfig.yaml") then%>
|
|
||||||
<input type="button" id="apply_update_button" value="<%:Reload Config%>" onclick=" return reload_config() "/>
|
|
||||||
<%end%>
|
|
||||||
<input type="button" id="template_button" value="<%:Use template%>" onclick=" return use_template() "/>
|
|
||||||
<%+cbi/valuefooter%>
|
|
||||||
@ -1,266 +0,0 @@
|
|||||||
#/cgi-bin/luci/admin/services/AdGuardHome
|
|
||||||
msgid "Base Setting"
|
|
||||||
msgstr "基础设置"
|
|
||||||
|
|
||||||
msgid "Log"
|
|
||||||
msgstr "日志"
|
|
||||||
|
|
||||||
msgid "Manual Config"
|
|
||||||
msgstr "手动设置"
|
|
||||||
|
|
||||||
msgid "Free and open source, powerful network-wide ads & trackers blocking DNS server."
|
|
||||||
msgstr "免费开源,功能强大的全网络广告和跟踪程序拦截DNS服务器"
|
|
||||||
|
|
||||||
msgid "RUNNING"
|
|
||||||
msgstr "运行中"
|
|
||||||
|
|
||||||
msgid "NOT RUNNING"
|
|
||||||
msgstr "未运行"
|
|
||||||
|
|
||||||
msgid "Redirected"
|
|
||||||
msgstr "已重定向"
|
|
||||||
|
|
||||||
msgid "Not redirect"
|
|
||||||
msgstr "未重定向"
|
|
||||||
|
|
||||||
msgid "Collecting data..."
|
|
||||||
msgstr "获取数据中..."
|
|
||||||
|
|
||||||
msgid "Enable"
|
|
||||||
msgstr "启用"
|
|
||||||
|
|
||||||
msgid "Browser management port"
|
|
||||||
msgstr "网页管理端口"
|
|
||||||
|
|
||||||
msgid "Update"
|
|
||||||
msgstr "更新"
|
|
||||||
#button change
|
|
||||||
msgid "Update core version"
|
|
||||||
msgstr "更新核心版本"
|
|
||||||
|
|
||||||
msgid "Check..."
|
|
||||||
msgstr "检查中..."
|
|
||||||
|
|
||||||
msgid "Updated"
|
|
||||||
msgstr "已更新"
|
|
||||||
|
|
||||||
#button hide
|
|
||||||
msgid "Force update"
|
|
||||||
msgstr "强制更新"
|
|
||||||
|
|
||||||
msgid "Fast config"
|
|
||||||
msgstr "快速配置"
|
|
||||||
#
|
|
||||||
msgid "core version:"
|
|
||||||
msgstr "核心版本:"
|
|
||||||
#description change
|
|
||||||
msgid "no config"
|
|
||||||
msgstr "没有配置文件"
|
|
||||||
msgid "no core"
|
|
||||||
msgstr "没有核心"
|
|
||||||
#
|
|
||||||
msgid "Redirect"
|
|
||||||
msgstr "重定向"
|
|
||||||
#inlist
|
|
||||||
msgid "none"
|
|
||||||
msgstr "无"
|
|
||||||
|
|
||||||
msgid "Run as dnsmasq upstream server"
|
|
||||||
msgstr "作为dnsmasq的上游服务器"
|
|
||||||
|
|
||||||
msgid "Redirect 53 port to AdGuardHome"
|
|
||||||
msgstr "重定向53端口到AdGuardHome"
|
|
||||||
|
|
||||||
msgid "Use port 53 replace dnsmasq"
|
|
||||||
msgstr "使用53端口替换dnsmasq"
|
|
||||||
#
|
|
||||||
msgid "AdGuardHome redirect mode"
|
|
||||||
msgstr "AdGuardHome重定向模式"
|
|
||||||
|
|
||||||
msgid "Bin Path"
|
|
||||||
msgstr "执行文件路径"
|
|
||||||
|
|
||||||
msgid "AdGuardHome Bin path if no bin will auto download"
|
|
||||||
msgstr "AdGuardHome 执行文件路径 如果没有执行文件将自动下载"
|
|
||||||
|
|
||||||
msgid "use upx to compress bin after download"
|
|
||||||
msgstr "下载后使用upx压缩执行文件"
|
|
||||||
#inlist
|
|
||||||
msgid "compress faster"
|
|
||||||
msgstr "快速压缩"
|
|
||||||
|
|
||||||
msgid "compress better"
|
|
||||||
msgstr "更好的压缩"
|
|
||||||
|
|
||||||
msgid "compress best(can be slow for big files)"
|
|
||||||
msgstr "最好的压缩(大文件可能慢)"
|
|
||||||
|
|
||||||
msgid "try all available compression methods & filters [slow]"
|
|
||||||
msgstr "尝试所有可能的压缩方法和过滤器[慢]"
|
|
||||||
|
|
||||||
msgid "try even more compression variants [very slow]"
|
|
||||||
msgstr "尝试更多变体压缩手段[很慢]"
|
|
||||||
|
|
||||||
msgid "bin use less space,but may have compatibility issues"
|
|
||||||
msgstr "减小执行文件空间占用,但是可能压缩后有兼容性问题"
|
|
||||||
#
|
|
||||||
msgid "Config Path"
|
|
||||||
msgstr "配置文件路径"
|
|
||||||
|
|
||||||
msgid "AdGuardHome config path"
|
|
||||||
msgstr "AdGuardHome 配置文件路径"
|
|
||||||
|
|
||||||
msgid "Work dir"
|
|
||||||
msgstr "工作目录"
|
|
||||||
|
|
||||||
msgid "AdGuardHome work dir include rules,audit log and database"
|
|
||||||
msgstr "AdGuardHome 工作目录包含规则,审计日志和数据库"
|
|
||||||
|
|
||||||
msgid "Runtime log file"
|
|
||||||
msgstr "运行日志"
|
|
||||||
|
|
||||||
msgid "AdGuardHome runtime Log file if 'syslog': write to system log;if empty no log"
|
|
||||||
msgstr "AdGuardHome 运行日志 如果填syslog将写入系统日志;如果空则不记录日志"
|
|
||||||
|
|
||||||
msgid "Verbose log"
|
|
||||||
msgstr "详细日志"
|
|
||||||
#hide div
|
|
||||||
msgid "Add gfwlist"
|
|
||||||
msgstr "加入gfw列表"
|
|
||||||
|
|
||||||
msgid "Add"
|
|
||||||
msgstr "添加"
|
|
||||||
|
|
||||||
msgid "Added"
|
|
||||||
msgstr "已添加"
|
|
||||||
|
|
||||||
msgid "Not added"
|
|
||||||
msgstr "未添加"
|
|
||||||
#hide div
|
|
||||||
msgid "Del gfwlist"
|
|
||||||
msgstr "删除gfw列表"
|
|
||||||
|
|
||||||
msgid "Del"
|
|
||||||
msgstr "删除"
|
|
||||||
#hide div
|
|
||||||
msgid "Gfwlist upstream dns server"
|
|
||||||
msgstr "gfw列表上游服务器"
|
|
||||||
|
|
||||||
msgid "Gfwlist domain upstream dns service"
|
|
||||||
msgstr "gfw列表域名上游服务器"
|
|
||||||
#hide div
|
|
||||||
msgid "Change browser management password"
|
|
||||||
msgstr "改变网页登录密码"
|
|
||||||
|
|
||||||
msgid "Culculate"
|
|
||||||
msgstr "计算"
|
|
||||||
##button change
|
|
||||||
msgid "Load culculate model"
|
|
||||||
msgstr "载入计算模块"
|
|
||||||
|
|
||||||
msgid "loading..."
|
|
||||||
msgstr "载入中"
|
|
||||||
|
|
||||||
msgid "Please save/apply"
|
|
||||||
msgstr "请提交"
|
|
||||||
|
|
||||||
msgid "is empty"
|
|
||||||
msgstr "为空"
|
|
||||||
|
|
||||||
msgid "Press load culculate model and culculate finally save/apply"
|
|
||||||
msgstr "按载入计算模块 然后计算 最后保存/提交"
|
|
||||||
#
|
|
||||||
msgid "Keep files when system upgrade"
|
|
||||||
msgstr "系统升级时保留文件"
|
|
||||||
#checkbox
|
|
||||||
msgid "core bin"
|
|
||||||
msgstr "核心执行文件"
|
|
||||||
|
|
||||||
msgid "config file"
|
|
||||||
msgstr "配置文件"
|
|
||||||
|
|
||||||
msgid "log file"
|
|
||||||
msgstr "日志文件"
|
|
||||||
|
|
||||||
msgid "querylog.json"
|
|
||||||
msgstr "审计日志.json"
|
|
||||||
#
|
|
||||||
msgid "On boot when network ok restart"
|
|
||||||
msgstr "开机后网络准备好时重启"
|
|
||||||
|
|
||||||
msgid "Backup workdir files when shutdown"
|
|
||||||
msgstr "在关机时备份工作目录文件"
|
|
||||||
|
|
||||||
msgid "Will be restore when workdir/data is empty"
|
|
||||||
msgstr "在工作目录/data为空的时候恢复"
|
|
||||||
|
|
||||||
msgid "Backup workdir path"
|
|
||||||
msgstr "工作目录备份路径"
|
|
||||||
|
|
||||||
msgid "Crontab task"
|
|
||||||
msgstr "计划任务"
|
|
||||||
|
|
||||||
msgid "Auto update core"
|
|
||||||
msgstr "自动升级核心"
|
|
||||||
|
|
||||||
msgid "Auto tail querylog"
|
|
||||||
msgstr "自动截短查询日志"
|
|
||||||
|
|
||||||
msgid "Auto tail runtime log"
|
|
||||||
msgstr "自动截短运行日志"
|
|
||||||
|
|
||||||
msgid "Auto update ipv6 hosts and restart adh"
|
|
||||||
msgstr "自动更新ipv6主机并重启adh"
|
|
||||||
|
|
||||||
msgid "Auto update gfwlist and restart adh"
|
|
||||||
msgstr "自动更新gfw列表并重启adh"
|
|
||||||
|
|
||||||
msgid "Please change time and args in crontab"
|
|
||||||
msgstr "请在计划任务中修改时间和参数"
|
|
||||||
|
|
||||||
msgid "Download links for update"
|
|
||||||
msgstr "升级用的下载链接"
|
|
||||||
|
|
||||||
#/cgi-bin/luci/admin/services/AdGuardHome/log/
|
|
||||||
msgid "reverse"
|
|
||||||
msgstr "逆序"
|
|
||||||
|
|
||||||
msgid "localtime"
|
|
||||||
msgstr "本地时间"
|
|
||||||
|
|
||||||
msgid "Please add log path in config to enable log"
|
|
||||||
msgstr "请在设置里填写日志路径以启用日志"
|
|
||||||
|
|
||||||
msgid "dellog"
|
|
||||||
msgstr "删除日志"
|
|
||||||
|
|
||||||
msgid "download log"
|
|
||||||
msgstr "下载日志"
|
|
||||||
|
|
||||||
#/cgi-bin/luci//admin/services/AdGuardHome/manual/
|
|
||||||
msgid "Use template"
|
|
||||||
msgstr "使用模板"
|
|
||||||
#hide button
|
|
||||||
msgid "Reload Config"
|
|
||||||
msgstr "重新载入配置"
|
|
||||||
|
|
||||||
msgid "WARNING!!! no bin found apply config will not be test"
|
|
||||||
msgstr "警告!!!未找到执行文件,提交配置将不会进行校验"
|
|
||||||
#unused
|
|
||||||
msgid "Change browser management username"
|
|
||||||
msgstr "改变网页登录用户名"
|
|
||||||
|
|
||||||
msgid "Username"
|
|
||||||
msgstr "用户名"
|
|
||||||
|
|
||||||
msgid "Check Config"
|
|
||||||
msgstr "检查配置"
|
|
||||||
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr "未知"
|
|
||||||
|
|
||||||
msgid "Keep database when system upgrade"
|
|
||||||
msgstr "系统升级时保留数据"
|
|
||||||
|
|
||||||
msgid "Boot delay until network ok"
|
|
||||||
msgstr "开机时直到网络准备好再启动"
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
config AdGuardHome 'AdGuardHome'
|
|
||||||
option enabled '0'
|
|
||||||
option httpport '3000'
|
|
||||||
option redirect 'none'
|
|
||||||
option configpath '/etc/AdGuardHome.yaml'
|
|
||||||
option workdir '/etc/AdGuardHome'
|
|
||||||
option logfile '/tmp/AdGuardHome.log'
|
|
||||||
option verbose '0'
|
|
||||||
option binpath '/usr/bin/AdGuardHome'
|
|
||||||
option upxflag ''
|
|
||||||
|
|
||||||
@ -1,632 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
|
|
||||||
USE_PROCD=1
|
|
||||||
|
|
||||||
START=95
|
|
||||||
STOP=01
|
|
||||||
|
|
||||||
CONFIGURATION=AdGuardHome
|
|
||||||
CRON_FILE=/etc/crontabs/root
|
|
||||||
|
|
||||||
extra_command "do_redirect" "0 or 1"
|
|
||||||
extra_command "testbackup" "backup or restore"
|
|
||||||
extra_command "test_crontab"
|
|
||||||
extra_command "force_reload"
|
|
||||||
extra_command "isrunning"
|
|
||||||
|
|
||||||
set_forward_dnsmasq()
|
|
||||||
{
|
|
||||||
local PORT="$1"
|
|
||||||
addr="127.0.0.1#$PORT"
|
|
||||||
OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
|
|
||||||
echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
uci delete dhcp.@dnsmasq[0].server 2>/dev/null
|
|
||||||
uci add_list dhcp.@dnsmasq[0].server=$addr
|
|
||||||
for server in $OLD_SERVER; do
|
|
||||||
if [ "$server" = "$addr" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
uci add_list dhcp.@dnsmasq[0].server=$server
|
|
||||||
done
|
|
||||||
uci delete dhcp.@dnsmasq[0].resolvfile 2>/dev/null
|
|
||||||
uci set dhcp.@dnsmasq[0].noresolv=1
|
|
||||||
uci commit dhcp
|
|
||||||
/etc/init.d/dnsmasq restart
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_forward_dnsmasq()
|
|
||||||
{
|
|
||||||
local OLD_PORT="$1"
|
|
||||||
addr="127.0.0.1#$OLD_PORT"
|
|
||||||
OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
|
|
||||||
echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
uci del_list dhcp.@dnsmasq[0].server=$addr 2>/dev/null
|
|
||||||
addrlist="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
|
|
||||||
if [ -z "$addrlist" ] ; then
|
|
||||||
uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto 2>/dev/null
|
|
||||||
uci delete dhcp.@dnsmasq[0].noresolv 2>/dev/null
|
|
||||||
fi
|
|
||||||
uci commit dhcp
|
|
||||||
/etc/init.d/dnsmasq restart
|
|
||||||
}
|
|
||||||
|
|
||||||
set_iptable()
|
|
||||||
{
|
|
||||||
local ipv6_server=$1
|
|
||||||
local tcp_server=$2
|
|
||||||
uci -q batch <<-EOF >/dev/null 2>&1
|
|
||||||
delete firewall.AdGuardHome
|
|
||||||
set firewall.AdGuardHome=include
|
|
||||||
set firewall.AdGuardHome.type=script
|
|
||||||
set firewall.AdGuardHome.path=/usr/share/AdGuardHome/firewall.start
|
|
||||||
set firewall.AdGuardHome.reload=1
|
|
||||||
commit firewall
|
|
||||||
EOF
|
|
||||||
|
|
||||||
IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
|
|
||||||
for IP in $IPS
|
|
||||||
do
|
|
||||||
if [ "$tcp_server" == "1" ]; then
|
|
||||||
iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$ipv6_server" == 0 ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
|
|
||||||
for IP in $IPS
|
|
||||||
do
|
|
||||||
if [ "$tcp_server" == "1" ]; then
|
|
||||||
ip6tables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
ip6tables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
clear_iptable()
|
|
||||||
{
|
|
||||||
uci -q batch <<-EOF >/dev/null 2>&1
|
|
||||||
delete firewall.AdGuardHome
|
|
||||||
commit firewall
|
|
||||||
EOF
|
|
||||||
local OLD_PORT="$1"
|
|
||||||
local ipv6_server=$2
|
|
||||||
IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
|
|
||||||
for IP in $IPS
|
|
||||||
do
|
|
||||||
iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
|
||||||
iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$ipv6_server" == 0 ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
echo "warn ip6tables nat mod is needed"
|
|
||||||
IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
|
|
||||||
for IP in $IPS
|
|
||||||
do
|
|
||||||
ip6tables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
|
||||||
ip6tables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
service_triggers() {
|
|
||||||
procd_add_reload_trigger "$CONFIGURATION"
|
|
||||||
[ "$(uci get AdGuardHome.AdGuardHome.redirect)" == "redirect" ] && procd_add_reload_trigger firewall
|
|
||||||
}
|
|
||||||
|
|
||||||
isrunning(){
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
_isrunning
|
|
||||||
local r=$?
|
|
||||||
([ "$r" == "0" ] && echo "running") || ([ "$r" == "1" ] && echo "not run" ) || echo "no bin"
|
|
||||||
return $r
|
|
||||||
}
|
|
||||||
|
|
||||||
_isrunning(){
|
|
||||||
config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome"
|
|
||||||
[ ! -f "$binpath" ] && return 2
|
|
||||||
pgrep $binpath 2>&1 >/dev/null && return 0
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
force_reload(){
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
_isrunning && procd_send_signal "$CONFIGURATION" || start
|
|
||||||
}
|
|
||||||
|
|
||||||
get_tz()
|
|
||||||
{
|
|
||||||
SET_TZ=""
|
|
||||||
|
|
||||||
if [ -e "/etc/localtime" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
for tzfile in /etc/TZ /var/etc/TZ
|
|
||||||
do
|
|
||||||
if [ ! -e "$tzfile" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
tz="`cat $tzfile 2>/dev/null`"
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$tz" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
SET_TZ=$tz
|
|
||||||
}
|
|
||||||
|
|
||||||
rm_port53()
|
|
||||||
{
|
|
||||||
local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
|
|
||||||
dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
|
|
||||||
if [ -z "$dnsmasq_port" ]; then
|
|
||||||
dnsmasq_port="53"
|
|
||||||
fi
|
|
||||||
if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then
|
|
||||||
if [ "$dnsmasq_port" == "53" ]; then
|
|
||||||
dnsmasq_port="1745"
|
|
||||||
fi
|
|
||||||
elif [ "$dnsmasq_port" == "53" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
config_editor "dns.port" "$dnsmasq_port" "$configpath"
|
|
||||||
uci set dhcp.@dnsmasq[0].port="53"
|
|
||||||
uci commit dhcp
|
|
||||||
/etc/init.d/dnsmasq reload
|
|
||||||
}
|
|
||||||
|
|
||||||
use_port53()
|
|
||||||
{
|
|
||||||
local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
|
|
||||||
dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
|
|
||||||
if [ -z "$dnsmasq_port" ]; then
|
|
||||||
dnsmasq_port="53"
|
|
||||||
fi
|
|
||||||
if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then
|
|
||||||
if [ "$dnsmasq_port" == "53" ]; then
|
|
||||||
AdGuardHome_PORT="1745"
|
|
||||||
fi
|
|
||||||
elif [ "$AdGuardHome_PORT" == "53" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
config_editor "dns.port" "53" "$configpath"
|
|
||||||
uci set dhcp.@dnsmasq[0].port="$AdGuardHome_PORT"
|
|
||||||
uci commit dhcp
|
|
||||||
/etc/init.d/dnsmasq reload
|
|
||||||
}
|
|
||||||
|
|
||||||
do_redirect()
|
|
||||||
{
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
_do_redirect $1
|
|
||||||
}
|
|
||||||
|
|
||||||
_do_redirect()
|
|
||||||
{
|
|
||||||
local section="$CONFIGURATION"
|
|
||||||
args=""
|
|
||||||
ipv6_server=1
|
|
||||||
tcp_server=0
|
|
||||||
enabled=$1
|
|
||||||
if [ "$enabled" == "1" ]; then
|
|
||||||
echo -n "1">/var/run/AdGredir
|
|
||||||
else
|
|
||||||
echo -n "0">/var/run/AdGredir
|
|
||||||
fi
|
|
||||||
config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml"
|
|
||||||
AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
|
|
||||||
if [ -z "$AdGuardHome_PORT" ]; then
|
|
||||||
AdGuardHome_PORT="0"
|
|
||||||
fi
|
|
||||||
config_get "redirect" "$section" "redirect" "none"
|
|
||||||
config_get "old_redirect" "$section" "old_redirect" "none"
|
|
||||||
config_get "old_port" "$section" "old_port" "0"
|
|
||||||
config_get "old_enabled" "$section" "old_enabled" "0"
|
|
||||||
uci get dhcp.@dnsmasq[0].port >/dev/null 2>&1 || uci set dhcp.@dnsmasq[0].port="53" >/dev/null 2>&1
|
|
||||||
if [ "$old_enabled" = "1" -a "$old_redirect" == "exchange" ]; then
|
|
||||||
AdGuardHome_PORT=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$old_redirect" != "$redirect" ] || [ "$old_port" != "$AdGuardHome_PORT" ] || [ "$old_enabled" = "1" -a "$enabled" = "0" ]; then
|
|
||||||
if [ "$old_redirect" != "none" ]; then
|
|
||||||
if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then
|
|
||||||
clear_iptable "$old_port" "$ipv6_server"
|
|
||||||
elif [ "$old_redirect" == "dnsmasq-upstream" ]; then
|
|
||||||
stop_forward_dnsmasq "$old_port"
|
|
||||||
elif [ "$old_redirect" == "exchange" ]; then
|
|
||||||
rm_port53
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
elif [ "$old_enabled" = "1" -a "$enabled" = "1" ]; then
|
|
||||||
if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then
|
|
||||||
clear_iptable "$old_port" "$ipv6_server"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
uci delete AdGuardHome.@AdGuardHome[0].old_redirect 2>/dev/null
|
|
||||||
uci delete AdGuardHome.@AdGuardHome[0].old_port 2>/dev/null
|
|
||||||
uci delete AdGuardHome.@AdGuardHome[0].old_enabled 2>/dev/null
|
|
||||||
uci add_list AdGuardHome.@AdGuardHome[0].old_redirect="$redirect" 2>/dev/null
|
|
||||||
uci add_list AdGuardHome.@AdGuardHome[0].old_port="$AdGuardHome_PORT" 2>/dev/null
|
|
||||||
uci add_list AdGuardHome.@AdGuardHome[0].old_enabled="$enabled" 2>/dev/null
|
|
||||||
uci commit AdGuardHome
|
|
||||||
[ "$enabled" == "0" ] && return 1
|
|
||||||
if [ "$AdGuardHome_PORT" == "0" ]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if [ "$redirect" = "redirect" ]; then
|
|
||||||
set_iptable $ipv6_server $tcp_server
|
|
||||||
elif [ "$redirect" = "dnsmasq-upstream" ]; then
|
|
||||||
set_forward_dnsmasq "$AdGuardHome_PORT"
|
|
||||||
elif [ "$redirect" == "exchange" -a "$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)" == "53" ]; then
|
|
||||||
use_port53
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_filesystem()
|
|
||||||
{
|
|
||||||
# print out path filesystem
|
|
||||||
echo $1 | awk '
|
|
||||||
BEGIN{
|
|
||||||
while (("mount"| getline ret) > 0)
|
|
||||||
{
|
|
||||||
split(ret,d);
|
|
||||||
fs[d[3]]=d[5];
|
|
||||||
m=index(d[1],":")
|
|
||||||
if (m==0)
|
|
||||||
{
|
|
||||||
pt[d[3]]=d[1]
|
|
||||||
}else{
|
|
||||||
pt[d[3]]=substr(d[1],m+1)
|
|
||||||
}}}{
|
|
||||||
split($0,d,"/");
|
|
||||||
if ("/" in fs)
|
|
||||||
{
|
|
||||||
result1=fs["/"];
|
|
||||||
}
|
|
||||||
if ("/" in pt)
|
|
||||||
{
|
|
||||||
result2=pt["/"];
|
|
||||||
}
|
|
||||||
for (i=2;i<=length(d);i++)
|
|
||||||
{
|
|
||||||
p[i]=p[i-1]"/"d[i];
|
|
||||||
if (p[i] in fs)
|
|
||||||
{
|
|
||||||
result1=fs[p[i]];
|
|
||||||
result2=pt[p[i]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (result2 in fs){
|
|
||||||
result=fs[result2]}
|
|
||||||
else{
|
|
||||||
result=result1}
|
|
||||||
print(result);}'
|
|
||||||
}
|
|
||||||
|
|
||||||
config_editor()
|
|
||||||
{
|
|
||||||
awk -v yaml="$1" -v value="$2" -v file="$3" -v ro="$4" '
|
|
||||||
BEGIN{split(yaml,part,"\.");s="";i=1;l=length(part);}
|
|
||||||
{
|
|
||||||
if (match($0,s""part[i]":"))
|
|
||||||
{
|
|
||||||
if (i==l)
|
|
||||||
{
|
|
||||||
split($0,t,": ");
|
|
||||||
if (ro==""){
|
|
||||||
system("sed -i '\''"FNR"c \\"t[1]": "value"'\'' "file);
|
|
||||||
}else{
|
|
||||||
print(t[2]);
|
|
||||||
}
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
s=s"[- ]{2}";
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}' $3
|
|
||||||
}
|
|
||||||
|
|
||||||
boot_service() {
|
|
||||||
rm /var/run/AdGserverdis >/dev/null 2>&1
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
config_get waitonboot $CONFIGURATION waitonboot "0"
|
|
||||||
config_get_bool enabled $CONFIGURATION enabled 0
|
|
||||||
config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome"
|
|
||||||
[ -f "$binpath" ] && start_service
|
|
||||||
if [ "$enabled" == "1" ] && [ "$waitonboot" == "1" ]; then
|
|
||||||
procd_open_instance "waitnet"
|
|
||||||
procd_set_param command "/usr/share/AdGuardHome/waitnet.sh"
|
|
||||||
procd_close_instance
|
|
||||||
echo "no net start pinging"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
testbackup(){
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
if [ "$1" == "backup" ]; then
|
|
||||||
backup
|
|
||||||
elif [ "$1" == "restore" ]; then
|
|
||||||
restore
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
restore()
|
|
||||||
{
|
|
||||||
config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome"
|
|
||||||
config_get backupwdpath $CONFIGURATION backupwdpath "/etc/AdGuardHome"
|
|
||||||
cp -u -r -f $backupwdpath/data $workdir
|
|
||||||
}
|
|
||||||
|
|
||||||
backup() {
|
|
||||||
config_get backupwdpath $CONFIGURATION backupwdpath "/etc/AdGuardHome"
|
|
||||||
mkdir -p $backupwdpath/data
|
|
||||||
config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome"
|
|
||||||
config_get backupfile $CONFIGURATION backupfile ""
|
|
||||||
for one in $backupfile;
|
|
||||||
do
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
if [ -d "$backupwdpath/data/$one" ]; then
|
|
||||||
cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data 2>&1)
|
|
||||||
else
|
|
||||||
cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data/$one 2>&1)
|
|
||||||
fi
|
|
||||||
echo "$cpret"
|
|
||||||
echo "$cpret" | grep "no space left on device"
|
|
||||||
if [ "$?" == "0" ]; then
|
|
||||||
echo "磁盘已满,删除log重试中"
|
|
||||||
del_querylog && continue
|
|
||||||
rm -f -r $backupwdpath/data/filters
|
|
||||||
rm -f -r $workdir/data/filters && continue
|
|
||||||
echo "backup failed"
|
|
||||||
fi
|
|
||||||
break
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
start_service() {
|
|
||||||
# Reading config
|
|
||||||
rm /var/run/AdGserverdis >/dev/null 2>&1
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
# update password
|
|
||||||
config_get hashpass $CONFIGURATION hashpass ""
|
|
||||||
config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml"
|
|
||||||
if [ -n "$hashpass" ]; then
|
|
||||||
config_editor "users.password" "$hashpass" "$configpath"
|
|
||||||
uci set $CONFIGURATION.$CONFIGURATION.hashpass=""
|
|
||||||
fi
|
|
||||||
local enabled
|
|
||||||
config_get_bool enabled $CONFIGURATION enabled 0
|
|
||||||
# update crontab
|
|
||||||
do_crontab
|
|
||||||
if [ "$enabled" == "0" ]; then
|
|
||||||
_do_redirect 0
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
#what need to do before reload
|
|
||||||
config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome"
|
|
||||||
|
|
||||||
config_get backupfile $CONFIGURATION backupfile ""
|
|
||||||
mkdir -p $workdir/data
|
|
||||||
if [ -n "$backupfile" ] && [ ! -d "$workdir/data" ]; then
|
|
||||||
restore
|
|
||||||
fi
|
|
||||||
# for overlay data-stk-oo not suppport
|
|
||||||
local cwdfs=$(get_filesystem $workdir)
|
|
||||||
echo "workdir is a $cwdfs filesystem"
|
|
||||||
if [ "$cwdfs" == "jffs2" ]; then
|
|
||||||
echo "fs error ln db to tmp $workdir $cwdfs"
|
|
||||||
logger "AdGuardHome" "warning db redirect to tmp"
|
|
||||||
touch $workdir/data/stats.db
|
|
||||||
if [ ! -L $workdir/data/stats.db ]; then
|
|
||||||
mv -f $workdir/data/stats.db /tmp/stats.db 2>/dev/null
|
|
||||||
ln -s /tmp/stats.db $workdir/data/stats.db 2>/dev/null
|
|
||||||
fi
|
|
||||||
touch $workdir/data/sessions.db
|
|
||||||
if [ ! -L $workdir/data/sessions.db ]; then
|
|
||||||
mv -f $workdir/data/sessions.db /tmp/sessions.db 2>/dev/null
|
|
||||||
ln -s /tmp/sessions.db $workdir/data/sessions.db 2>/dev/null
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
local ADDITIONAL_ARGS=""
|
|
||||||
config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome"
|
|
||||||
|
|
||||||
mkdir -p ${binpath%/*}
|
|
||||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -c $configpath"
|
|
||||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -w $workdir"
|
|
||||||
config_get httpport $CONFIGURATION httpport 3000
|
|
||||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -p $httpport"
|
|
||||||
|
|
||||||
# hack to save config file when upgrade system
|
|
||||||
config_get upprotect $CONFIGURATION upprotect ""
|
|
||||||
eval upprotect=${upprotect// /\\\\n}
|
|
||||||
echo -e "$upprotect">/lib/upgrade/keep.d/luci-app-adguardhome
|
|
||||||
|
|
||||||
config_get logfile $CONFIGURATION logfile ""
|
|
||||||
if [ -n "$logfile" ]; then
|
|
||||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -l $logfile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$binpath" ]; then
|
|
||||||
_do_redirect 0
|
|
||||||
/usr/share/AdGuardHome/update_core.sh 2>&1 >/tmp/AdGuardHome_update.log &
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
config_get_bool verbose $CONFIGURATION verbose 0
|
|
||||||
if [ "$verbose" -eq 1 ]; then
|
|
||||||
ADDITIONAL_ARGS="$ADDITIONAL_ARGS -v"
|
|
||||||
fi
|
|
||||||
|
|
||||||
procd_open_instance
|
|
||||||
get_tz
|
|
||||||
if [ -n "$SET_TZ" ]; then
|
|
||||||
procd_set_param env TZ="$SET_TZ"
|
|
||||||
fi
|
|
||||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
|
||||||
procd_set_param limits core="unlimited" nofile="65535 65535"
|
|
||||||
procd_set_param stderr 1
|
|
||||||
procd_set_param command $binpath $ADDITIONAL_ARGS
|
|
||||||
procd_set_param file "$configpath" "/etc/hosts" "/etc/config/AdGuardHome"
|
|
||||||
procd_close_instance
|
|
||||||
if [ -f "$configpath" ]; then
|
|
||||||
_do_redirect 1
|
|
||||||
else
|
|
||||||
_do_redirect 0
|
|
||||||
config_get "redirect" "AdGuardHome" "redirect" "none"
|
|
||||||
if [ "$redirect" != "none" ]; then
|
|
||||||
procd_open_instance "waitconfig"
|
|
||||||
procd_set_param command "/usr/share/AdGuardHome/watchconfig.sh"
|
|
||||||
procd_close_instance
|
|
||||||
echo "no config start watching"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo "AdGuardHome service enabled"
|
|
||||||
echo "luci enable switch=$enabled"
|
|
||||||
(sleep 10 && [ -z "$(pgrep $binpath)" ] && logger "AdGuardHome" "no process in 10s cancel redirect" && _do_redirect 0 )&
|
|
||||||
}
|
|
||||||
|
|
||||||
reload_service()
|
|
||||||
{
|
|
||||||
rm /var/run/AdGlucitest >/dev/null 2>&1
|
|
||||||
echo "AdGuardHome reloading"
|
|
||||||
start
|
|
||||||
}
|
|
||||||
|
|
||||||
del_querylog(){
|
|
||||||
local btarget=$(ls $backupwdpath/data | grep -F "querylog.json" | sort -r | head -n 1)
|
|
||||||
local wtarget=$(ls $workdir/data | grep -F "querylog.json" | sort -r | head -n 1)
|
|
||||||
if [ "$btarget"x == "$wtarget"x ]; then
|
|
||||||
[ -z "$btarget" ] && return 1
|
|
||||||
rm -f $workdir/data/$wtarget
|
|
||||||
rm -f $backupwdpath/data/$btarget
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [ "$btarget" \> "$wtarget" ]; then
|
|
||||||
rm -f $backupwdpath/data/$btarget
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
rm -f $workdir/data/$wtarget
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_service()
|
|
||||||
{
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
_do_redirect 0
|
|
||||||
do_crontab
|
|
||||||
if [ "$1" != "nobackup" ]; then
|
|
||||||
config_get backupfile $CONFIGURATION backupfile "0"
|
|
||||||
if [ -n "$backupfile" ]; then
|
|
||||||
backup
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo "AdGuardHome service disabled"
|
|
||||||
touch /var/run/AdGserverdis
|
|
||||||
}
|
|
||||||
|
|
||||||
boot() {
|
|
||||||
rc_procd boot_service "$@"
|
|
||||||
if eval "type service_started" 2>/dev/null >/dev/null; then
|
|
||||||
service_started
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
test_crontab(){
|
|
||||||
config_load "${CONFIGURATION}"
|
|
||||||
do_crontab
|
|
||||||
}
|
|
||||||
|
|
||||||
do_crontab(){
|
|
||||||
config_get_bool enabled $CONFIGURATION enabled 0
|
|
||||||
config_get crontab $CONFIGURATION crontab ""
|
|
||||||
local findstr default cronenable replace commit
|
|
||||||
local cronreload=0
|
|
||||||
local commit=0
|
|
||||||
findstr="/usr/share/AdGuardHome/update_core.sh"
|
|
||||||
default="30 3 * * * /usr/share/AdGuardHome/update_core.sh 2>&1"
|
|
||||||
[ "$enabled" == "0" ] || [ "${crontab//autoupdate/}" == "$crontab" ] && cronenable=0 || cronenable=1
|
|
||||||
crontab_editor
|
|
||||||
|
|
||||||
config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome"
|
|
||||||
config_get lastworkdir $CONFIGURATION lastworkdir "/etc/AdGuardHome"
|
|
||||||
findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json"
|
|
||||||
#[ -n "$lastworkdir" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastworkdir/data/querylog.json" && [ "$lastworkdir" != "$workdir" ] && replace="${lastworkdir//\//\\/}/${workdir//\//\\/}"
|
|
||||||
default="0 * * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json"
|
|
||||||
[ "$enabled" == "0" ] || [ "${crontab//cutquerylog/}" == "$crontab" ] && cronenable=0 || cronenable=1
|
|
||||||
crontab_editor
|
|
||||||
#[ "$lastworkdir" != "$workdir" ] && uci set AdGuardHome.AdGuardHome.lastworkdir="$workdir" && commit=1
|
|
||||||
|
|
||||||
config_get logfile $CONFIGURATION logfile ""
|
|
||||||
config_get lastlogfile $CONFIGURATION lastlogfile ""
|
|
||||||
findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.logfile)"
|
|
||||||
default="30 3 * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.logfile)"
|
|
||||||
#[ -n "$lastlogfile" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastlogfile" && [ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && replace="${lastlogfile//\//\\/}/${logfile//\//\\/}"
|
|
||||||
[ "$logfile" == "syslog" ] || [ "$logfile" == "" ] || [ "$enabled" == "0" ] || [ "${crontab//cutruntimelog/}" == "$crontab" ] && cronenable=0 || cronenable=1
|
|
||||||
crontab_editor
|
|
||||||
#[ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && uci set AdGuardHome.AdGuardHome.lastlogfile="$logfile" && commit=1
|
|
||||||
|
|
||||||
findstr="/usr/share/AdGuardHome/addhost.sh"
|
|
||||||
default="0 * * * * /usr/share/AdGuardHome/addhost.sh"
|
|
||||||
[ "$enabled" == "0" ] || [ "${crontab//autohost/}" == "$crontab" ] && cronenable=0 || cronenable=1
|
|
||||||
crontab_editor
|
|
||||||
[ "$cronenable" == "0" ] && /usr/share/AdGuardHome/addhost.sh "del" "noreload" || /usr/share/AdGuardHome/addhost.sh "" "noreload"
|
|
||||||
|
|
||||||
findstr="/usr/share/AdGuardHome/gfw2adg.sh"
|
|
||||||
default="30 3 * * * /usr/share/AdGuardHome/gfw2adg.sh"
|
|
||||||
[ "$enabled" == "0" ] || [ "${crontab//autogfw/}" == "$crontab" ] && cronenable=0 || cronenable=1
|
|
||||||
crontab_editor
|
|
||||||
[ "$cronreload" -gt 0 ] && /etc/init.d/cron restart
|
|
||||||
#[ "$commit" -gt 0 ] && uci commit AdGuardHome
|
|
||||||
}
|
|
||||||
|
|
||||||
crontab_editor(){
|
|
||||||
#usage input:
|
|
||||||
#findstr=
|
|
||||||
#default=
|
|
||||||
#cronenable=
|
|
||||||
#replace="${last//\//\\/}/${now//\//\\/}"
|
|
||||||
#output:cronreload:if >1 please /etc/init.d/cron restart manual
|
|
||||||
local testline reload
|
|
||||||
local line="$(grep "$findstr" $CRON_FILE)"
|
|
||||||
[ -n "$replace" ] && [ -n "$line" ] && eval testline="\${line//$replace}" && [ "$testline" != "$line" ] && line="$testline" && reload="1" && replace=""
|
|
||||||
if [ "${line:0:1}" != "#" ]; then
|
|
||||||
if [ $cronenable -eq 1 ]; then
|
|
||||||
[ -z "$line" ] && line="$default" && reload="1"
|
|
||||||
if [ -n "$reload" ]; then
|
|
||||||
sed -i "\,$findstr,d" $CRON_FILE
|
|
||||||
echo "$line" >> $CRON_FILE
|
|
||||||
cronreload=$((cronreload+1))
|
|
||||||
fi
|
|
||||||
elif [ -n "$line" ]; then
|
|
||||||
sed -i "\,$findstr,d" $CRON_FILE
|
|
||||||
echo "#$line" >> $CRON_FILE
|
|
||||||
cronreload=$((cronreload+1))
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ $cronenable -eq 1 ]; then
|
|
||||||
sed -i "\,$findstr,d" $CRON_FILE
|
|
||||||
echo "${line:1}" >> $CRON_FILE
|
|
||||||
cronreload=$((cronreload+1))
|
|
||||||
elif [ -z "$reload" ]; then
|
|
||||||
sed -i "\,$findstr,d" $CRON_FILE
|
|
||||||
echo "$line" >> $CRON_FILE
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
uci -q batch <<-EOF >/dev/null 2>&1
|
|
||||||
delete ucitrack.@AdGuardHome[-1]
|
|
||||||
add ucitrack AdGuardHome
|
|
||||||
set ucitrack.@AdGuardHome[-1].init=AdGuardHome
|
|
||||||
commit ucitrack
|
|
||||||
delete AdGuardHome.AdGuardHome.ucitracktest
|
|
||||||
EOF
|
|
||||||
|
|
||||||
rm -f /tmp/luci-indexcache
|
|
||||||
exit 0
|
|
||||||
@ -1,109 +0,0 @@
|
|||||||
#提交就可以直接用的配置模板文件
|
|
||||||
#a template config can be use with a apply
|
|
||||||
bind_host: 0.0.0.0
|
|
||||||
bind_port: 3000
|
|
||||||
users:
|
|
||||||
- name: root
|
|
||||||
password: $2y$10$FfeQavihMUiXCuJhHuQwy.6EOXDvkXb/S50qI5fXizqarNT/ShhQm
|
|
||||||
language: ""
|
|
||||||
rlimit_nofile: 0
|
|
||||||
dns:
|
|
||||||
bind_host: 0.0.0.0
|
|
||||||
port: 5553
|
|
||||||
statistics_interval: 1
|
|
||||||
protection_enabled: true
|
|
||||||
filtering_enabled: true
|
|
||||||
filters_update_interval: 24
|
|
||||||
blocking_mode: nxdomain
|
|
||||||
blocked_response_ttl: 10
|
|
||||||
querylog_enabled: false
|
|
||||||
querylog_interval: 1
|
|
||||||
ratelimit: 0
|
|
||||||
ratelimit_whitelist: []
|
|
||||||
refuse_any: false
|
|
||||||
bootstrap_dns:
|
|
||||||
#bootstrap_dns
|
|
||||||
all_servers: false
|
|
||||||
allowed_clients: []
|
|
||||||
disallowed_clients: []
|
|
||||||
blocked_hosts: []
|
|
||||||
parental_block_host: ""
|
|
||||||
safebrowsing_block_host: ""
|
|
||||||
blocked_services: []
|
|
||||||
cache_size: 4194304
|
|
||||||
parental_sensitivity: 13
|
|
||||||
parental_enabled: false
|
|
||||||
safesearch_enabled: false
|
|
||||||
safebrowsing_enabled: false
|
|
||||||
safebrowsing_cache_size: 1048576
|
|
||||||
safesearch_cache_size: 1048576
|
|
||||||
parental_cache_size: 1048576
|
|
||||||
cache_time: 30
|
|
||||||
rewrites: []
|
|
||||||
upstream_dns:
|
|
||||||
#upstream_dns
|
|
||||||
tls:
|
|
||||||
enabled: false
|
|
||||||
server_name: ""
|
|
||||||
force_https: false
|
|
||||||
port_https: 443
|
|
||||||
port_dns_over_tls: 853
|
|
||||||
certificate_chain: ""
|
|
||||||
private_key: ""
|
|
||||||
certificate_path: ""
|
|
||||||
private_key_path: ""
|
|
||||||
filters:
|
|
||||||
- enabled: true
|
|
||||||
url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
|
|
||||||
name: AdGuard Simplified Domain Names filter
|
|
||||||
id: 1
|
|
||||||
- enabled: true
|
|
||||||
url: https://adaway.org/hosts.txt
|
|
||||||
name: AdAway
|
|
||||||
id: 2
|
|
||||||
- enabled: false
|
|
||||||
url: https://hosts-file.net/ad_servers.txt
|
|
||||||
name: hpHosts - Ad and Tracking servers only
|
|
||||||
id: 3
|
|
||||||
- enabled: true
|
|
||||||
url: https://www.malwaredomainlist.com/hostslist/hosts.txt
|
|
||||||
name: MalwareDomainList.com Hosts List
|
|
||||||
id: 4
|
|
||||||
- enabled: false
|
|
||||||
url: https://raw.githubusercontent.com/vokins/yhosts/master/data/tvbox.txt
|
|
||||||
name: tvbox
|
|
||||||
id: 1575018007
|
|
||||||
- enabled: true
|
|
||||||
url: https://hosts.nfz.moe/full/hosts
|
|
||||||
name: neoHosts full
|
|
||||||
id: 1575618240
|
|
||||||
- enabled: false
|
|
||||||
url: https://hosts.nfz.moe/basic/hosts
|
|
||||||
name: neoHosts basic
|
|
||||||
id: 1575618241
|
|
||||||
- enabled: false
|
|
||||||
url: http://sbc.io/hosts/hosts
|
|
||||||
name: StevenBlack host basic
|
|
||||||
id: 1575618242
|
|
||||||
- enabled: false
|
|
||||||
url: http://sbc.io/hosts/alternates/fakenews-gambling-porn-social/hosts
|
|
||||||
name: StevenBlack host+fakenews + gambling + porn + social
|
|
||||||
id: 1575618243
|
|
||||||
- enabled: false
|
|
||||||
url: https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD/anti-ad-easylist.txt
|
|
||||||
name: anti-AD(Adblock+neohosts+yhosts+cjxlist+adhlist)
|
|
||||||
id: 1577113202
|
|
||||||
user_rules: []
|
|
||||||
dhcp:
|
|
||||||
enabled: false
|
|
||||||
interface_name: ""
|
|
||||||
gateway_ip: ""
|
|
||||||
subnet_mask: ""
|
|
||||||
range_start: ""
|
|
||||||
range_end: ""
|
|
||||||
lease_duration: 86400
|
|
||||||
icmp_timeout_msec: 1000
|
|
||||||
clients: []
|
|
||||||
log_file: ""
|
|
||||||
verbose: false
|
|
||||||
schema_version: 5
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
checkmd5(){
|
|
||||||
local nowmd5=$(md5sum /etc/hosts)
|
|
||||||
nowmd5=${nowmd5%% *}
|
|
||||||
local lastmd5=$(uci get AdGuardHome.AdGuardHome.hostsmd5 2>/dev/null)
|
|
||||||
if [ "$nowmd5" != "$lastmd5" ]; then
|
|
||||||
uci set AdGuardHome.AdGuardHome.hostsmd5="$nowmd5"
|
|
||||||
uci commit AdGuardHome
|
|
||||||
[ "$1" == "noreload" ] || /etc/init.d/AdGuardHome reload
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
[ "$1" == "del" ] && sed -i '/programaddstart/,/programaddend/d' /etc/hosts && checkmd5 "$2" && exit 0
|
|
||||||
/usr/bin/awk 'BEGIN{
|
|
||||||
while ((getline < "/tmp/dhcp.leases") > 0)
|
|
||||||
{
|
|
||||||
a[$2]=$4;
|
|
||||||
}
|
|
||||||
while (("ip -6 neighbor show | grep -v fe80" | getline) > 0)
|
|
||||||
{
|
|
||||||
if (a[$5]) {print $1" "a[$5] >"/tmp/tmphost"; }
|
|
||||||
}
|
|
||||||
print "#programaddend" >"/tmp/tmphost";
|
|
||||||
}'
|
|
||||||
grep programaddstart /etc/hosts >/dev/null 2>&1
|
|
||||||
if [ "$?" == "0" ]; then
|
|
||||||
sed -i '/programaddstart/,/programaddend/c\#programaddstart' /etc/hosts
|
|
||||||
sed -i '/programaddstart/'r/tmp/tmphost /etc/hosts
|
|
||||||
else
|
|
||||||
echo "#programaddstart" >>/etc/hosts
|
|
||||||
cat /tmp/tmphost >> /etc/hosts
|
|
||||||
fi
|
|
||||||
rm /tmp/tmphost
|
|
||||||
checkmd5 "$2"
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
AdGuardHome_enable=$(uci get AdGuardHome.AdGuardHome.enabled)
|
|
||||||
redirect=$(uci get AdGuardHome.AdGuardHome.redirect)
|
|
||||||
|
|
||||||
if [ $AdGuardHome_enable -eq 1 -a "$redirect" == "redirect" ]; then
|
|
||||||
/etc/init.d/AdGuardHome do_redirect 1
|
|
||||||
fi
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
logread -e AdGuardHome > /tmp/AdGuardHometmp.log
|
|
||||||
logread -e AdGuardHome -f >> /tmp/AdGuardHometmp.log &
|
|
||||||
pid=$!
|
|
||||||
echo "1">/var/run/AdGuardHomesyslog
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
sleep 12
|
|
||||||
watchdog=$(cat /var/run/AdGuardHomesyslog)
|
|
||||||
if [ "$watchdog"x == "0"x ]; then
|
|
||||||
kill $pid
|
|
||||||
rm /tmp/AdGuardHometmp.log
|
|
||||||
rm /var/run/AdGuardHomesyslog
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "0">/var/run/AdGuardHomesyslog
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@ -1,89 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
|
|
||||||
checkmd5(){
|
|
||||||
local nowmd5=$(md5sum /tmp/adguard.list 2>/dev/null)
|
|
||||||
nowmd5=${nowmd5%% *}
|
|
||||||
local lastmd5=$(uci get AdGuardHome.AdGuardHome.gfwlistmd5 2>/dev/null)
|
|
||||||
if [ "$nowmd5" != "$lastmd5" ]; then
|
|
||||||
uci set AdGuardHome.AdGuardHome.gfwlistmd5="$nowmd5"
|
|
||||||
uci commit AdGuardHome
|
|
||||||
[ "$1" == "noreload" ] || /etc/init.d/AdGuardHome reload
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
configpath=$(uci get AdGuardHome.AdGuardHome.configpath 2>/dev/null)
|
|
||||||
[ "$1" == "del" ] && sed -i '/programaddstart/,/programaddend/d' $configpath && checkmd5 "$2" && exit 0
|
|
||||||
gfwupstream=$(uci get AdGuardHome.AdGuardHome.gfwupstream 2>/dev/null)
|
|
||||||
if [ -z $gfwupstream ]; then
|
|
||||||
gfwupstream="tcp://208.67.220.220:5353"
|
|
||||||
fi
|
|
||||||
if [ ! -f "$configpath" ]; then
|
|
||||||
echo "please make a config first"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O- | base64 -d > /tmp/gfwlist.txt
|
|
||||||
cat /tmp/gfwlist.txt | awk -v upst="$gfwupstream" 'BEGIN{getline;}{
|
|
||||||
s1=substr($0,1,1);
|
|
||||||
if (s1=="!")
|
|
||||||
{next;}
|
|
||||||
if (s1=="@"){
|
|
||||||
$0=substr($0,3);
|
|
||||||
s1=substr($0,1,1);
|
|
||||||
white=1;}
|
|
||||||
else{
|
|
||||||
white=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s1=="|")
|
|
||||||
{s2=substr($0,2,1);
|
|
||||||
if (s2=="|")
|
|
||||||
{
|
|
||||||
$0=substr($0,3);
|
|
||||||
split($0,d,"/");
|
|
||||||
$0=d[1];
|
|
||||||
}else{
|
|
||||||
split($0,d,"/");
|
|
||||||
$0=d[3];
|
|
||||||
}}
|
|
||||||
else{
|
|
||||||
split($0,d,"/");
|
|
||||||
$0=d[1];
|
|
||||||
}
|
|
||||||
star=index($0,"*");
|
|
||||||
if (star!=0)
|
|
||||||
{
|
|
||||||
$0=substr($0,star+1);
|
|
||||||
dot=index($0,".");
|
|
||||||
if (dot!=0)
|
|
||||||
$0=substr($0,dot+1);
|
|
||||||
else
|
|
||||||
next;
|
|
||||||
s1=substr($0,1,1);
|
|
||||||
}
|
|
||||||
if (s1==".")
|
|
||||||
{fin=substr($0,2);}
|
|
||||||
else{fin=$0;}
|
|
||||||
if (index(fin,".")==0) next;
|
|
||||||
if (index(fin,"%")!=0) next;
|
|
||||||
if (index(fin,":")!=0) next;
|
|
||||||
match(fin,"^[0-9\.]+")
|
|
||||||
if (RSTART==1 && RLENGTH==length(fin)) {print "ipset add gfwlist "fin>"/tmp/doipset.sh";next;}
|
|
||||||
if (fin=="" || finl==fin) next;
|
|
||||||
finl=fin;
|
|
||||||
if (white==0)
|
|
||||||
{print(" - '\''[/"fin"/]"upst"'\''");}
|
|
||||||
else{
|
|
||||||
print(" - '\''[/"fin"/]#'\''");}
|
|
||||||
}END{print(" - '\''[/programaddend/]#'\''")}' > /tmp/adguard.list
|
|
||||||
grep programaddstart $configpath
|
|
||||||
if [ "$?" == "0" ]; then
|
|
||||||
sed -i '/programaddstart/,/programaddend/c\ - '\''\[\/programaddstart\/\]#'\''' $configpath
|
|
||||||
sed -i '/programaddstart/'r/tmp/adguard.list $configpath
|
|
||||||
else
|
|
||||||
sed -i '1i\ - '\''[/programaddstart/]#'\''' /tmp/adguard.list
|
|
||||||
sed -i '/upstream_dns:/'r/tmp/adguard.list $configpath
|
|
||||||
fi
|
|
||||||
checkmd5 "$2"
|
|
||||||
rm -f /tmp/gfwlist.txt /tmp/adguard.list
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
https://github.com/AdguardTeam/AdGuardHome/releases/download/${latest_ver}/AdGuardHome_linux_${Arch}.tar.gz
|
|
||||||
https://static.adguard.com/adguardhome/release/AdGuardHome_linux_${Arch}.tar.gz
|
|
||||||
#https://static.adguard.com/adguardhome/beta/AdGuardHome_linux_${Arch}.tar.gz
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
tail -n $1 "$2" > /var/run/tailtmp
|
|
||||||
cat /var/run/tailtmp > "$2"
|
|
||||||
rm /var/run/tailtmp
|
|
||||||
@ -1,236 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
binpath=$(uci get AdGuardHome.AdGuardHome.binpath)
|
|
||||||
if [ -z "$binpath" ]; then
|
|
||||||
uci set AdGuardHome.AdGuardHome.binpath="/tmp/AdGuardHome/AdGuardHome"
|
|
||||||
binpath="/tmp/AdGuardHome/AdGuardHome"
|
|
||||||
fi
|
|
||||||
mkdir -p ${binpath%/*}
|
|
||||||
upxflag=$(uci get AdGuardHome.AdGuardHome.upxflag 2>/dev/null)
|
|
||||||
|
|
||||||
check_if_already_running(){
|
|
||||||
running_tasks="$(ps |grep "AdGuardHome" |grep "update_core" |grep -v "grep" |awk '{print $1}' |wc -l)"
|
|
||||||
[ "${running_tasks}" -gt "2" ] && echo -e "\nA task is already running." && EXIT 2
|
|
||||||
}
|
|
||||||
|
|
||||||
check_wgetcurl(){
|
|
||||||
which curl && downloader="curl -L -k --retry 2 --connect-timeout 20 -o" && return
|
|
||||||
which wget-ssl && downloader="wget-ssl --no-check-certificate -t 2 -T 20 -O" && return
|
|
||||||
[ -z "$1" ] && opkg update || (echo error opkg && EXIT 1)
|
|
||||||
[ -z "$1" ] && (opkg remove wget wget-nossl --force-depends ; opkg install wget ; check_wgetcurl 1 ;return)
|
|
||||||
[ "$1" == "1" ] && (opkg install curl ; check_wgetcurl 2 ; return)
|
|
||||||
echo error curl and wget && EXIT 1
|
|
||||||
}
|
|
||||||
|
|
||||||
check_latest_version(){
|
|
||||||
check_wgetcurl
|
|
||||||
latest_ver="$($downloader - https://api.github.com/repos/AdguardTeam/AdGuardHome/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E 'v[0-9.]+' -o 2>/dev/null)"
|
|
||||||
if [ -z "${latest_ver}" ]; then
|
|
||||||
echo -e "\nFailed to check latest version, please try again later." && EXIT 1
|
|
||||||
fi
|
|
||||||
now_ver="$($binpath -c /dev/null --check-config 2>&1| grep -m 1 -E 'v[0-9.]+' -o)"
|
|
||||||
if [ "${latest_ver}"x != "${now_ver}"x ] || [ "$1" == "force" ]; then
|
|
||||||
echo -e "Local version: ${now_ver}., cloud version: ${latest_ver}."
|
|
||||||
doupdate_core
|
|
||||||
else
|
|
||||||
echo -e "\nLocal version: ${now_ver}, cloud version: ${latest_ver}."
|
|
||||||
echo -e "You're already using the latest version."
|
|
||||||
if [ ! -z "$upxflag" ]; then
|
|
||||||
filesize=$(ls -l $binpath | awk '{ print $5 }')
|
|
||||||
if [ $filesize -gt 8000000 ]; then
|
|
||||||
echo -e "start upx may take a long time"
|
|
||||||
doupx
|
|
||||||
mkdir -p "/tmp/AdGuardHomeupdate/AdGuardHome" >/dev/null 2>&1
|
|
||||||
rm -fr /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/}
|
|
||||||
/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $binpath -o /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/}
|
|
||||||
rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux
|
|
||||||
/etc/init.d/AdGuardHome stop nobackup
|
|
||||||
rm $binpath
|
|
||||||
mv -f /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} $binpath
|
|
||||||
/etc/init.d/AdGuardHome start
|
|
||||||
echo -e "finished"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
EXIT 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
doupx(){
|
|
||||||
Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')"
|
|
||||||
case $Archt in
|
|
||||||
"i386")
|
|
||||||
Arch="i386"
|
|
||||||
;;
|
|
||||||
"i686")
|
|
||||||
Arch="i386"
|
|
||||||
echo -e "i686 use $Arch may have bug"
|
|
||||||
;;
|
|
||||||
"x86")
|
|
||||||
Arch="amd64"
|
|
||||||
;;
|
|
||||||
"mipsel")
|
|
||||||
Arch="mipsel"
|
|
||||||
;;
|
|
||||||
"mips64el")
|
|
||||||
Arch="mips64el"
|
|
||||||
Arch="mipsel"
|
|
||||||
echo -e "mips64el use $Arch may have bug"
|
|
||||||
;;
|
|
||||||
"mips")
|
|
||||||
Arch="mips"
|
|
||||||
;;
|
|
||||||
"mips64")
|
|
||||||
Arch="mips64"
|
|
||||||
Arch="mips"
|
|
||||||
echo -e "mips64 use $Arch may have bug"
|
|
||||||
;;
|
|
||||||
"arm")
|
|
||||||
Arch="arm"
|
|
||||||
;;
|
|
||||||
"armeb")
|
|
||||||
Arch="armeb"
|
|
||||||
;;
|
|
||||||
"aarch64")
|
|
||||||
Arch="arm64"
|
|
||||||
;;
|
|
||||||
"powerpc")
|
|
||||||
Arch="powerpc"
|
|
||||||
;;
|
|
||||||
"powerpc64")
|
|
||||||
Arch="powerpc64"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "error not support $Archt if you can use offical release please issue a bug"
|
|
||||||
EXIT 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
upx_latest_ver="$($downloader - https://api.github.com/repos/upx/upx/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E '[0-9.]+' -o 2>/dev/null)"
|
|
||||||
$downloader /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz "https://github.com/upx/upx/releases/download/v${upx_latest_ver}/upx-${upx_latest_ver}-${Arch}_linux.tar.xz" 2>&1
|
|
||||||
#tar xvJf
|
|
||||||
which xz || (opkg list | grep ^xz || opkg update && opkg install xz) || (echo "xz download fail" && EXIT 1)
|
|
||||||
mkdir -p /tmp/upx-${upx_latest_ver}-${Arch}_linux
|
|
||||||
xz -d -c /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz| tar -x -C "/tmp" >/dev/null 2>&1
|
|
||||||
if [ ! -e "/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx" ]; then
|
|
||||||
echo -e "Failed to download upx."
|
|
||||||
EXIT 1
|
|
||||||
fi
|
|
||||||
rm /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz
|
|
||||||
}
|
|
||||||
|
|
||||||
doupdate_core(){
|
|
||||||
echo -e "Updating core..."
|
|
||||||
mkdir -p "/tmp/AdGuardHomeupdate"
|
|
||||||
rm -rf /tmp/AdGuardHomeupdate/* >/dev/null 2>&1
|
|
||||||
Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')"
|
|
||||||
case $Archt in
|
|
||||||
"i386")
|
|
||||||
Arch="386"
|
|
||||||
;;
|
|
||||||
"i686")
|
|
||||||
Arch="386"
|
|
||||||
;;
|
|
||||||
"x86")
|
|
||||||
Arch="amd64"
|
|
||||||
;;
|
|
||||||
"mipsel")
|
|
||||||
Arch="mipsle"
|
|
||||||
;;
|
|
||||||
"mips64el")
|
|
||||||
Arch="mips64le"
|
|
||||||
Arch="mipsle"
|
|
||||||
echo -e "mips64el use $Arch may have bug"
|
|
||||||
;;
|
|
||||||
"mips")
|
|
||||||
Arch="mips"
|
|
||||||
;;
|
|
||||||
"mips64")
|
|
||||||
Arch="mips64"
|
|
||||||
Arch="mips"
|
|
||||||
echo -e "mips64 use $Arch may have bug"
|
|
||||||
;;
|
|
||||||
"arm")
|
|
||||||
Arch="arm"
|
|
||||||
;;
|
|
||||||
"aarch64")
|
|
||||||
Arch="arm64"
|
|
||||||
;;
|
|
||||||
"powerpc")
|
|
||||||
Arch="ppc"
|
|
||||||
echo -e "error not support $Archt"
|
|
||||||
EXIT 1
|
|
||||||
;;
|
|
||||||
"powerpc64")
|
|
||||||
Arch="ppc64"
|
|
||||||
echo -e "error not support $Archt"
|
|
||||||
EXIT 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "error not support $Archt if you can use offical release please issue a bug"
|
|
||||||
EXIT 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo -e "start download"
|
|
||||||
grep -v "^#" /usr/share/AdGuardHome/links.txt >/tmp/run/AdHlinks.txt
|
|
||||||
while read link
|
|
||||||
do
|
|
||||||
eval link="$link"
|
|
||||||
$downloader /tmp/AdGuardHomeupdate/${link##*/} "$link" 2>&1
|
|
||||||
if [ "$?" != "0" ]; then
|
|
||||||
echo "download failed try another download"
|
|
||||||
rm -f /tmp/AdGuardHomeupdate/${link##*/}
|
|
||||||
else
|
|
||||||
local success="1"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done < "/tmp/run/AdHlinks.txt"
|
|
||||||
rm /tmp/run/AdHlinks.txt
|
|
||||||
[ -z "$success" ] && echo "no download success" && EXIT 1
|
|
||||||
if [ "${link##*.}" == "gz" ]; then
|
|
||||||
tar -zxf "/tmp/AdGuardHomeupdate/${link##*/}" -C "/tmp/AdGuardHomeupdate/"
|
|
||||||
if [ ! -e "/tmp/AdGuardHomeupdate/AdGuardHome" ]; then
|
|
||||||
echo -e "Failed to download core."
|
|
||||||
rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1
|
|
||||||
EXIT 1
|
|
||||||
fi
|
|
||||||
downloadbin="/tmp/AdGuardHomeupdate/AdGuardHome/AdGuardHome"
|
|
||||||
else
|
|
||||||
downloadbin="/tmp/AdGuardHomeupdate/${link##*/}"
|
|
||||||
fi
|
|
||||||
chmod 755 $downloadbin
|
|
||||||
echo -e "download success start copy"
|
|
||||||
if [ -n "$upxflag" ]; then
|
|
||||||
echo -e "start upx may take a long time"
|
|
||||||
doupx
|
|
||||||
/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $downloadbin
|
|
||||||
rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux
|
|
||||||
fi
|
|
||||||
echo -e "start copy"
|
|
||||||
/etc/init.d/AdGuardHome stop nobackup
|
|
||||||
rm "$binpath"
|
|
||||||
mv -f "$downloadbin" "$binpath"
|
|
||||||
if [ "$?" == "1" ]; then
|
|
||||||
echo "mv failed maybe not enough space please use upx or change bin to /tmp/AdGuardHome"
|
|
||||||
EXIT 1
|
|
||||||
fi
|
|
||||||
/etc/init.d/AdGuardHome start
|
|
||||||
rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1
|
|
||||||
echo -e "Succeeded in updating core."
|
|
||||||
echo -e "Local version: ${latest_ver}, cloud version: ${latest_ver}.\n"
|
|
||||||
EXIT 0
|
|
||||||
}
|
|
||||||
|
|
||||||
EXIT(){
|
|
||||||
rm /var/run/update_core 2>/dev/null
|
|
||||||
[ "$1" != "0" ] && touch /var/run/update_core_error
|
|
||||||
exit $1
|
|
||||||
}
|
|
||||||
|
|
||||||
main(){
|
|
||||||
check_if_already_running
|
|
||||||
check_latest_version $1
|
|
||||||
}
|
|
||||||
trap "EXIT 1" SIGTERM SIGINT
|
|
||||||
touch /var/run/update_core
|
|
||||||
rm /var/run/update_core_error 2>/dev/null
|
|
||||||
main $1
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
count=0
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
ping -c 1 -W 1 -q www.baidu.com 1>/dev/null 2>&1
|
|
||||||
if [ "$?" == "0" ]; then
|
|
||||||
/etc/init.d/AdGuardHome force_reload
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
ping -c 1 -W 1 -q 202.108.22.5 1>/dev/null 2>&1
|
|
||||||
if [ "$?" == "0" ]; then
|
|
||||||
/etc/init.d/AdGuardHome force_reload
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 5
|
|
||||||
ping -c 1 -W 1 -q www.google.com 1>/dev/null 2>&1
|
|
||||||
if [ "$?" == "0" ]; then
|
|
||||||
/etc/init.d/AdGuardHome force_reload
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
ping -c 1 -W 1 -q 8.8.8.8 1>/dev/null 2>&1
|
|
||||||
if [ "$?" == "0" ]; then
|
|
||||||
/etc/init.d/AdGuardHome force_reload
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 5
|
|
||||||
count=$((count+1))
|
|
||||||
if [ $count -gt 18 ]; then
|
|
||||||
/etc/init.d/AdGuardHome force_reload
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
configpath=$(uci get AdGuardHome.AdGuardHome.configpath)
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
sleep 10
|
|
||||||
if [ -f "$configpath" ]; then
|
|
||||||
/etc/init.d/AdGuardHome do_redirect 1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
@ -1 +0,0 @@
|
|||||||
!function(n){"object"==typeof exports&&"object"==typeof module?n(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],n):n(CodeMirror)}(function(n){"use strict";function e(e,o,i,t){if(i&&i.call){var l=i;i=null}else l=r(e,i,"rangeFinder");"number"==typeof o&&(o=n.Pos(o,0));var f=r(e,i,"minFoldSize");function d(n){var r=l(e,o);if(!r||r.to.line-r.from.line<f)return null;for(var i=e.findMarksAt(r.from),d=0;d<i.length;++d)if(i[d].__isFold&&"fold"!==t){if(!n)return null;r.cleared=!0,i[d].clear()}return r}var u=d(!0);if(r(e,i,"scanUp"))for(;!u&&o.line>e.firstLine();)o=n.Pos(o.line-1,0),u=d(!1);if(u&&!u.cleared&&"unfold"!==t){var a=function(n,e){var o=r(n,e,"widget");if("string"==typeof o){var i=document.createTextNode(o);(o=document.createElement("span")).appendChild(i),o.className="CodeMirror-foldmarker"}else o&&(o=o.cloneNode(!0));return o}(e,i);n.on(a,"mousedown",function(e){c.clear(),n.e_preventDefault(e)});var c=e.markText(u.from,u.to,{replacedWith:a,clearOnEnter:r(e,i,"clearOnEnter"),__isFold:!0});c.on("clear",function(o,r){n.signal(e,"unfold",e,o,r)}),n.signal(e,"fold",e,u.from,u.to)}}n.newFoldFunction=function(n,o){return function(r,i){e(r,i,{rangeFinder:n,widget:o})}},n.defineExtension("foldCode",function(n,o,r){e(this,n,o,r)}),n.defineExtension("isFolded",function(n){for(var e=this.findMarksAt(n),o=0;o<e.length;++o)if(e[o].__isFold)return!0}),n.commands.toggleFold=function(n){n.foldCode(n.getCursor())},n.commands.fold=function(n){n.foldCode(n.getCursor(),null,"fold")},n.commands.unfold=function(n){n.foldCode(n.getCursor(),null,"unfold")},n.commands.foldAll=function(e){e.operation(function(){for(var o=e.firstLine(),r=e.lastLine();o<=r;o++)e.foldCode(n.Pos(o,0),null,"fold")})},n.commands.unfoldAll=function(e){e.operation(function(){for(var o=e.firstLine(),r=e.lastLine();o<=r;o++)e.foldCode(n.Pos(o,0),null,"unfold")})},n.registerHelper("fold","combine",function(){var n=Array.prototype.slice.call(arguments,0);return function(e,o){for(var r=0;r<n.length;++r){var i=n[r](e,o);if(i)return i}}}),n.registerHelper("fold","auto",function(n,e){for(var o=n.getHelpers(e,"fold"),r=0;r<o.length;r++){var i=o[r](n,e);if(i)return i}});var o={rangeFinder:n.fold.auto,widget:"↔",minFoldSize:0,scanUp:!1,clearOnEnter:!0};function r(n,e,r){if(e&&void 0!==e[r])return e[r];var i=n.options.foldOptions;return i&&void 0!==i[r]?i[r]:o[r]}n.defineOption("foldOptions",null),n.defineExtension("foldOption",function(n,e){return r(this,n,e)})});
|
|
||||||
@ -1 +0,0 @@
|
|||||||
.CodeMirror-foldmarker{color:blue;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-open,.CodeMirror-foldgutter-folded{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
!function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror"),require("./foldcode")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./foldcode"],t):t(CodeMirror)}(function(t){"use strict";t.defineOption("foldGutter",!1,function(o,e,r){r&&r!=t.Init&&(o.clearGutter(o.state.foldGutter.options.gutter),o.state.foldGutter=null,o.off("gutterClick",a),o.off("changes",d),o.off("viewportChange",u),o.off("fold",l),o.off("unfold",l),o.off("swapDoc",d)),e&&(o.state.foldGutter=new function(t){this.options=t,this.from=this.to=0}(function(t){!0===t&&(t={});null==t.gutter&&(t.gutter="CodeMirror-foldgutter");null==t.indicatorOpen&&(t.indicatorOpen="CodeMirror-foldgutter-open");null==t.indicatorFolded&&(t.indicatorFolded="CodeMirror-foldgutter-folded");return t}(e)),f(o),o.on("gutterClick",a),o.on("changes",d),o.on("viewportChange",u),o.on("fold",l),o.on("unfold",l),o.on("swapDoc",d))});var o=t.Pos;function e(t,e){for(var r=t.findMarks(o(e,0),o(e+1,0)),n=0;n<r.length;++n)if(r[n].__isFold){var i=r[n].find(-1);if(i&&i.line===e)return r[n]}}function r(t){if("string"==typeof t){var o=document.createElement("div");return o.className=t+" CodeMirror-guttermarker-subtle",o}return t.cloneNode(!0)}function n(t,n,f){var a=t.state.foldGutter.options,d=n-1,u=t.foldOption(a,"minFoldSize"),l=t.foldOption(a,"rangeFinder"),c="string"==typeof a.indicatorFolded&&i(a.indicatorFolded),s="string"==typeof a.indicatorOpen&&i(a.indicatorOpen);t.eachLine(n,f,function(n){++d;var i=null,f=n.gutterMarkers;if(f&&(f=f[a.gutter]),e(t,d)){if(c&&f&&c.test(f.className))return;i=r(a.indicatorFolded)}else{var p=o(d,0),m=l&&l(t,p);if(m&&m.to.line-m.from.line>=u){if(s&&f&&s.test(f.className))return;i=r(a.indicatorOpen)}}(i||f)&&t.setGutterMarker(n,a.gutter,i)})}function i(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function f(t){var o=t.getViewport(),e=t.state.foldGutter;e&&(t.operation(function(){n(t,o.from,o.to)}),e.from=o.from,e.to=o.to)}function a(t,r,n){var i=t.state.foldGutter;if(i){var f=i.options;if(n==f.gutter){var a=e(t,r);a?a.clear():t.foldCode(o(r,0),f)}}}function d(t){var o=t.state.foldGutter;if(o){var e=o.options;o.from=o.to=0,clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){f(t)},e.foldOnChangeTimeSpan||600)}}function u(t){var o=t.state.foldGutter;if(o){var e=o.options;clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){var e=t.getViewport();o.from==o.to||e.from-o.to>20||o.from-e.to>20?f(t):t.operation(function(){e.from<o.from&&(n(t,e.from,o.from),o.from=e.from),e.to>o.to&&(n(t,o.to,e.to),o.to=e.to)})},e.updateViewportTimeSpan||400)}}function l(t,o){var e=t.state.foldGutter;if(e){var r=o.line;r>=e.from&&r<e.to&&n(t,r,r+1)}}});
|
|
||||||
@ -1 +0,0 @@
|
|||||||
!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";function n(n,t){var i=n.getLine(t),o=i.search(/\S/);return-1==o||/\bcomment\b/.test(n.getTokenTypeAt(e.Pos(t,o+1)))?-1:e.countColumn(i,null,n.getOption("tabSize"))}e.registerHelper("fold","indent",function(t,i){var o=n(t,i.line);if(!(o<0)){for(var r=null,l=i.line+1,f=t.lastLine();l<=f;++l){var u=n(t,l);if(-1==u);else{if(!(u>o))break;r=l}}return r?{from:e.Pos(i.line,t.getLine(i.line).length),to:e.Pos(r,t.getLine(r).length)}:void 0}})});
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("yaml",function(){var e=new RegExp("\\b(("+["true","false","on","off","yes","no"].join(")|(")+"))$","i");return{token:function(i,t){var r=i.peek(),n=t.escaped;if(t.escaped=!1,"#"==r&&(0==i.pos||/\s/.test(i.string.charAt(i.pos-1))))return i.skipToEnd(),"comment";if(i.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))return"string";if(t.literal&&i.indentation()>t.keyCol)return i.skipToEnd(),"string";if(t.literal&&(t.literal=!1),i.sol()){if(t.keyCol=0,t.pair=!1,t.pairStart=!1,i.match(/---/))return"def";if(i.match(/\.\.\./))return"def";if(i.match(/\s*-\s+/))return"meta"}if(i.match(/^(\{|\}|\[|\])/))return"{"==r?t.inlinePairs++:"}"==r?t.inlinePairs--:"["==r?t.inlineList++:t.inlineList--,"meta";if(t.inlineList>0&&!n&&","==r)return i.next(),"meta";if(t.inlinePairs>0&&!n&&","==r)return t.keyCol=0,t.pair=!1,t.pairStart=!1,i.next(),"meta";if(t.pairStart){if(i.match(/^\s*(\||\>)\s*/))return t.literal=!0,"meta";if(i.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(0==t.inlinePairs&&i.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(t.inlinePairs>0&&i.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(i.match(e))return"keyword"}return!t.pair&&i.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(t.pair=!0,t.keyCol=i.indentation(),"atom"):t.pair&&i.match(/^:\s*/)?(t.pairStart=!0,"meta"):(t.pairStart=!1,t.escaped="\\"==r,i.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),e.defineMIME("text/x-yaml","yaml"),e.defineMIME("text/yaml","yaml")});
|
|
||||||
@ -1 +0,0 @@
|
|||||||
.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:0}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,0.10)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:white}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-keyword{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute{color:#50fa7b}.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-variable-3,.cm-s-dracula span.cm-type{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,0.1)}.cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:white !important}
|
|
||||||
File diff suppressed because one or more lines are too long
@ -1,13 +0,0 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=luci-app-airwhu
|
|
||||||
PKG_VERSION=1.0
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
LUCI_TITLE:=luci-app-airwhu
|
|
||||||
LUCI_PKGARCH:=all
|
|
||||||
LUCI_DEPENDS:=+mentohust +kmod-ipt-nat6
|
|
||||||
LUCI_DESCRIPTION:=LuCI web-interface for Ruijie 802.1X Client with IPv6 NAT.
|
|
||||||
|
|
||||||
include $(TOPDIR)/feeds/luci/luci.mk
|
|
||||||
|
|
||||||
# call BuildPackage - OpenWrt buildroot signature
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
module("luci.controller.airwhu", package.seeall)
|
|
||||||
|
|
||||||
function index()
|
|
||||||
entry({"admin", "services", "AirWHU"}, cbi("airwhu"), _("AirWHU"), 100)
|
|
||||||
end
|
|
||||||
@ -1,115 +0,0 @@
|
|||||||
--[[
|
|
||||||
|
|
||||||
LuCI - Lua Configuration Interface
|
|
||||||
LICENSE under GPLv3.
|
|
||||||
Copyright 2017 KyleRicardo[W.B.L.E. TeAm] <shaoyz714@126.com>
|
|
||||||
|
|
||||||
]]
|
|
||||||
--
|
|
||||||
require("luci.sys")
|
|
||||||
require("luci.tools.webadmin")
|
|
||||||
|
|
||||||
local IsOnAir = (luci.sys.call("pidof mentohust > /dev/null") == 0)
|
|
||||||
if IsOnAir then
|
|
||||||
state_msg = "<b><font color=\"green\">" .. translate("Running") .. "</font></b>"
|
|
||||||
else
|
|
||||||
state_msg = "<b><font color=\"red\">" .. translate("Not Running") .. "</font></b>"
|
|
||||||
end
|
|
||||||
|
|
||||||
m = Map("airwhu", translate("AirWHU"), translate("Configure Ruijie 802.1X client with IPv6 NAT based on Masquerade.") .. "<br /><br />" .. translate("Status") .. " : " .. state_msg)
|
|
||||||
|
|
||||||
s = m:section(TypedSection, "switch", translate("Global Switch"), translate("Configure global 802.1X Authentication and IPv6-NAT on-off."))
|
|
||||||
s.addremove = false
|
|
||||||
s.anonymous = true
|
|
||||||
|
|
||||||
s:option(Flag, "enableauth", translate("Enable 802.1X Auth"), translate("Enable or disable Ruijie 802.1X authentication."))
|
|
||||||
tmp = s:option(Flag, "startwithboot", translate("Start with boot"), translate("Start Ruijie 802.1X Authentication based on MentoHUST when the router is booting."))
|
|
||||||
tmp:depends("enableauth","1")
|
|
||||||
s:option(Flag, "enableipv6", translate("Enable IPv6 NAT"), translate("Enable IPv6 NAT pass-through based on ip6tables MASQUERADE."))
|
|
||||||
|
|
||||||
s = m:section(TypedSection, "auth", translate("Config Authentication"), translate("The options below are all of MentoHUST's arguments."))
|
|
||||||
s.anonymous = true
|
|
||||||
s.addremove = false
|
|
||||||
|
|
||||||
ur = s:option(Value, "Username", translate("Username"))
|
|
||||||
ur.rmempty = false
|
|
||||||
|
|
||||||
pw = s:option(Value, "Password", translate("Password"))
|
|
||||||
pw.password = true
|
|
||||||
pw.rmempty = false
|
|
||||||
|
|
||||||
wan_dev = luci.sys.exec("uci get network.wan.ifname")
|
|
||||||
wan_dev = string.sub(wan_dev,1,string.len(wan_dev)-1)
|
|
||||||
ifname = s:option(ListValue, "ifname", translate("Interfaces"))
|
|
||||||
ifname:value(wan_dev)
|
|
||||||
|
|
||||||
s:option(Value, "IP", translate("IP"), translate("default to localhost's IP")).default = "0.0.0.0"
|
|
||||||
|
|
||||||
s:option(Value, "Mask", translate("Netmask"), translate("default to localhost's netmask")).default = "255.255.255.0"
|
|
||||||
|
|
||||||
s:option(Value, "Gateway", translate("Gateway"), translate("default to 0.0.0.0")).default = "0.0.0.0"
|
|
||||||
|
|
||||||
s:option(Value, "DNS", translate("DNS"), translate("default to 0.0.0.0")).default = "0.0.0.0"
|
|
||||||
|
|
||||||
s:option(Value, "PingHost", translate("Ping host"), translate("default to 0.0.0.0,i.e. disable this function")).default = "0.0.0.0"
|
|
||||||
|
|
||||||
s:option(Value, "Timeout", translate("Authenticate timeout(s)"), translate("default to 8s")).default = "8"
|
|
||||||
|
|
||||||
s:option(Value, "EchoInterval", translate("Heartbeat timeout(s)"), translate("default to 30s")).default = "30"
|
|
||||||
|
|
||||||
s:option(Value, "RestartWait", translate("Timeout on failure(s)"), translate("default to 15s")).default = "15"
|
|
||||||
|
|
||||||
s:option(Value, "MaxFail", translate("Max failure times"), translate("0 means no limit,default to 8")).default = "8"
|
|
||||||
|
|
||||||
t = s:option(ListValue, "StartMode", translate("mulcast address"), translate("default to 1"))
|
|
||||||
t:value("0", translate("0(standard)"))
|
|
||||||
t:value("1", translate("1(ruijjie)"))
|
|
||||||
t:value("2", translate("2(saier)"))
|
|
||||||
t.default = "1"
|
|
||||||
|
|
||||||
t = s:option(ListValue, "DHCPMode", translate("DHCP type"), translate("default to 1"))
|
|
||||||
t:value("0", translate("0(not in used)"))
|
|
||||||
t:value("1", translate("1(secondary authenticate)"))
|
|
||||||
t:value("2", translate("2(post authenticate)"))
|
|
||||||
t:value("3", translate("3(pre authenticate)"))
|
|
||||||
t.default = "1"
|
|
||||||
|
|
||||||
t = s:option(ListValue, "DaemonMode", translate("run in daemon mode"), translate("default to 3"))
|
|
||||||
t:value("0", translate("0(no)"))
|
|
||||||
t:value("1", translate("1(yes,turn off output)"))
|
|
||||||
t:value("2", translate("2(yes,persevere output)"))
|
|
||||||
t:value("3", translate("3(yes,output to file)"))
|
|
||||||
t.default = "3"
|
|
||||||
|
|
||||||
s:option(Value, "ShowNotify", translate("display notification"), translate("0(no),1-20(yes),default to 0")).default = "0"
|
|
||||||
|
|
||||||
s:option(Value, "Version", translate("client version"), translate("default to 0.00,compatible with xrgsu")).default = "0.00"
|
|
||||||
|
|
||||||
tmp = s:option(Value, "DataFile", translate("customized data file"), translate("not in used by default"))
|
|
||||||
tmp.rmempty = true
|
|
||||||
|
|
||||||
script = s:option(Value, "DHCPScript", translate("DHCP script"), translate("use dhclient by default"))
|
|
||||||
script.default = "udhcpc -i "..wan_dev
|
|
||||||
|
|
||||||
local apply = luci.http.formvalue("cbi.apply")
|
|
||||||
if apply then
|
|
||||||
if luci.sys.exec("uci get airwhu.@switch[0].enableauth") then
|
|
||||||
luci.sys.exec("/etc/init.d/mentohust restart")
|
|
||||||
else
|
|
||||||
luci.sys.exec("/etc/init.d/mentohust stop")
|
|
||||||
end
|
|
||||||
|
|
||||||
if luci.sys.exec("uci get airwhu.@switch[0].startwithboot") then
|
|
||||||
luci.sys.exec("/etc/init.d/mentohust enable")
|
|
||||||
else
|
|
||||||
luci.sys.exec("/etc/init.d/mentohust disable")
|
|
||||||
end
|
|
||||||
|
|
||||||
if luci.sys.exec("uci get airwhu.@switch[0].enableipv6") then
|
|
||||||
luci.sys.exec("sh /bin/ipv6masq.sh install")
|
|
||||||
else
|
|
||||||
luci.sys.exec("sh /bin/ipv6masq.sh uninstall")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return m
|
|
||||||
@ -1,258 +0,0 @@
|
|||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: airwhu\n"
|
|
||||||
"POT-Creation-Date: 2017-05-11 19:39+0800\n"
|
|
||||||
"PO-Revision-Date: 2017-05-11 19:40+0800\n"
|
|
||||||
"Last-Translator: KyleRicardo <shaoyz714@126.com>\n"
|
|
||||||
"Language-Team: [W.B.L.E. TeAm] <shaoyz714@126.com>\n"
|
|
||||||
"Language: en_US\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Generator: Poedit 1.8.8\n"
|
|
||||||
"X-Poedit-Basepath: ../files\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
|
||||||
"X-Poedit-KeywordsList: translate\n"
|
|
||||||
"X-Poedit-SearchPath-0: .\n"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/controller/airwhu.lua:4
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:19
|
|
||||||
msgid "AirWHU"
|
|
||||||
msgstr "AirWHU"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:14
|
|
||||||
msgid "Running"
|
|
||||||
msgstr "运行中"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:16
|
|
||||||
msgid "Not Running"
|
|
||||||
msgstr "未运行"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:19
|
|
||||||
msgid "Configure Ruijie 802.1X client with IPv6 NAT based on Masquerade."
|
|
||||||
msgstr "配置基于IPv6 Masquerade技术的锐捷802.1X认证网络。"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:19
|
|
||||||
msgid "Status"
|
|
||||||
msgstr "状态"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:21
|
|
||||||
msgid "Global Switch"
|
|
||||||
msgstr "全局开关"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:21
|
|
||||||
msgid "Configure global 802.1X Authentication and IPv6-NAT on-off."
|
|
||||||
msgstr "配置全局802.1X认证与IPv6 NAT开关。"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:25
|
|
||||||
msgid "Enable 802.1X Auth"
|
|
||||||
msgstr "开启锐捷认证"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:25
|
|
||||||
msgid "Enable or disable Ruijie 802.1X authentication."
|
|
||||||
msgstr "打开或关闭锐捷802.1X认证。"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:26
|
|
||||||
msgid "Start with boot"
|
|
||||||
msgstr "开机启动"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:26
|
|
||||||
msgid ""
|
|
||||||
"Start Ruijie 802.1X Authentication based on MentoHUST when the router is "
|
|
||||||
"booting."
|
|
||||||
msgstr "开机自动启动基于MentoHUST的锐捷802.1X认证客户端。"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:28
|
|
||||||
msgid "Enable IPv6 NAT"
|
|
||||||
msgstr "开启IPv6 NAT"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:28
|
|
||||||
msgid "Enable IPv6 NAT pass-through based on ip6tables MASQUERADE."
|
|
||||||
msgstr "开启基于ip6tables Masquerade技术的IPv6 NAT穿透。"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:30
|
|
||||||
msgid "Config Authentication"
|
|
||||||
msgstr "配置认证参数"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:30
|
|
||||||
msgid "The options below are all of MentoHUST's arguments."
|
|
||||||
msgstr "以下是全部的MentoHUST认证参数。"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:34
|
|
||||||
msgid "Username"
|
|
||||||
msgstr "用户名"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:36
|
|
||||||
msgid "Password"
|
|
||||||
msgstr "密码"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:41
|
|
||||||
msgid "Interfaces"
|
|
||||||
msgstr "网卡"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:51
|
|
||||||
msgid "IP"
|
|
||||||
msgstr "IP地址"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:51
|
|
||||||
msgid "default to localhost's IP"
|
|
||||||
msgstr "默认为localhost的IP地址"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:53
|
|
||||||
msgid "Netmask"
|
|
||||||
msgstr "掩码"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:53
|
|
||||||
msgid "default to localhost's netmask"
|
|
||||||
msgstr "默认为localhost的掩码"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:55
|
|
||||||
msgid "Gateway"
|
|
||||||
msgstr "网关"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:55
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:57
|
|
||||||
msgid "default to 0.0.0.0"
|
|
||||||
msgstr "默认为0.0.0.0"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:57
|
|
||||||
msgid "DNS"
|
|
||||||
msgstr "DNS服务器"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:59
|
|
||||||
msgid "Ping host"
|
|
||||||
msgstr "Ping主机"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:59
|
|
||||||
msgid "default to 0.0.0.0,i.e. disable this function"
|
|
||||||
msgstr "默认为0.0.0.0,即关闭该功能"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:61
|
|
||||||
msgid "Authenticate timeout(s)"
|
|
||||||
msgstr "认证超时(秒)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:61
|
|
||||||
msgid "default to 8s"
|
|
||||||
msgstr "默认为8秒"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:63
|
|
||||||
msgid "Heartbeat timeout(s)"
|
|
||||||
msgstr "心跳包超时(秒)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:63
|
|
||||||
msgid "default to 30s"
|
|
||||||
msgstr "默认为30秒"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:65
|
|
||||||
msgid "Timeout on failure(s)"
|
|
||||||
msgstr "失败等待(秒)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:65
|
|
||||||
msgid "default to 15s"
|
|
||||||
msgstr "默认为15秒"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:67
|
|
||||||
msgid "Max failure times"
|
|
||||||
msgstr "允许失败次数"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:67
|
|
||||||
msgid "0 means no limit,default to 8"
|
|
||||||
msgstr "0表示无限制,默认为8"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:69
|
|
||||||
msgid "mulcast address"
|
|
||||||
msgstr "多播地址"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:69
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:75
|
|
||||||
msgid "default to 1"
|
|
||||||
msgstr "默认为1"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:70
|
|
||||||
msgid "0(standard)"
|
|
||||||
msgstr "0(标准)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:71
|
|
||||||
msgid "1(ruijjie)"
|
|
||||||
msgstr "1(锐捷)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:72
|
|
||||||
msgid "2(saier)"
|
|
||||||
msgstr "2(赛尔)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:75
|
|
||||||
msgid "DHCP type"
|
|
||||||
msgstr "DHCP方式"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:76
|
|
||||||
msgid "0(not in used)"
|
|
||||||
msgstr "0(不使用)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:77
|
|
||||||
msgid "1(secondary authenticate)"
|
|
||||||
msgstr "1(二次认证)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:78
|
|
||||||
msgid "2(post authenticate)"
|
|
||||||
msgstr "3(认证后)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:79
|
|
||||||
msgid "3(pre authenticate)"
|
|
||||||
msgstr "3(认证前)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:82
|
|
||||||
msgid "run in daemon mode"
|
|
||||||
msgstr "后台运行模式"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:82
|
|
||||||
msgid "default to 3"
|
|
||||||
msgstr "默认为3"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:83
|
|
||||||
msgid "0(no)"
|
|
||||||
msgstr "0(不使用后台模式)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:84
|
|
||||||
msgid "1(yes,turn off output)"
|
|
||||||
msgstr "1(后台模式,关闭输出)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:85
|
|
||||||
msgid "2(yes,persevere output)"
|
|
||||||
msgstr "2(后台模式,保留输出)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:86
|
|
||||||
msgid "3(yes,output to file)"
|
|
||||||
msgstr "3(后台模式,输出到日志文件)"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:89
|
|
||||||
msgid "display notification"
|
|
||||||
msgstr "显示通知"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:89
|
|
||||||
msgid "0(no),1-20(yes),default to 0"
|
|
||||||
msgstr "0(不使用),1-20(使用),默认为0"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:91
|
|
||||||
msgid "client version"
|
|
||||||
msgstr "客户端版本号"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:91
|
|
||||||
msgid "default to 0.00,compatible with xrgsu"
|
|
||||||
msgstr "默认为0.00,表示兼容xrgsu"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:93
|
|
||||||
msgid "customized data file"
|
|
||||||
msgstr "自定义数据文件"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:93
|
|
||||||
msgid "not in used by default"
|
|
||||||
msgstr "默认不使用"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:96
|
|
||||||
msgid "DHCP script"
|
|
||||||
msgstr "DHCP脚本"
|
|
||||||
|
|
||||||
#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:96
|
|
||||||
msgid "use dhclient by default"
|
|
||||||
msgstr "默认使用dhclient"
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
#Author:KyleRicardo
|
|
||||||
#Email:shaoyz714@126.com
|
|
||||||
|
|
||||||
action=$1
|
|
||||||
|
|
||||||
if [ "$action"x = "install"x ]; then
|
|
||||||
uci delete network.globals.ula_prefix
|
|
||||||
|
|
||||||
uci set network.wan6.peerdns='0'
|
|
||||||
uci set network.wan6.dns='240c::6666'
|
|
||||||
|
|
||||||
uci delete network.lan.ip6assign
|
|
||||||
uci set network.lan.ip6addr='BABE:BABE:BABE:BABE::1/64'
|
|
||||||
uci set network.lan.ip6prefix='BABE:BABE:BABE:BABE::/64'
|
|
||||||
|
|
||||||
uci set dhcp.lan.ra_management='1'
|
|
||||||
uci set dhcp.lan.ra_default='1'
|
|
||||||
|
|
||||||
uci set $(uci show firewall|grep Allow-ICMPv6-Forward|sed -e 's/.name[^ ]*'//).enabled='0'
|
|
||||||
|
|
||||||
uci commit
|
|
||||||
|
|
||||||
elif [ "$action"x = "uninstall"x ]; then
|
|
||||||
uci set network.globals.ula_prefix='fdad:91b7:54bb::/48'
|
|
||||||
|
|
||||||
uci delete network.wan6.peerdns='0'
|
|
||||||
uci delete network.wan6.dns='240c::6666'
|
|
||||||
|
|
||||||
uci set network.lan.ip6assign='60'
|
|
||||||
uci delete network.lan.ip6addr='BABE:BABE:BABE:BABE::1/64'
|
|
||||||
uci delete network.lan.ip6prefix='BABE:BABE:BABE:BABE::/64'
|
|
||||||
|
|
||||||
uci delete dhcp.lan.ra_management='1'
|
|
||||||
uci delete dhcp.lan.ra_default='1'
|
|
||||||
|
|
||||||
uci delete $(uci show firewall|grep Allow-ICMPv6-Forward|sed -e 's/.name[^ ]*'//).enabled
|
|
||||||
|
|
||||||
uci commit
|
|
||||||
fi
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
|
|
||||||
config switch
|
|
||||||
option enableauth
|
|
||||||
option startwithboot
|
|
||||||
option enableipv6
|
|
||||||
|
|
||||||
config auth
|
|
||||||
option Username
|
|
||||||
option Password
|
|
||||||
option ifname
|
|
||||||
option IP
|
|
||||||
option Mask
|
|
||||||
option Gateway
|
|
||||||
option DNS
|
|
||||||
option PingHost
|
|
||||||
option Timeout
|
|
||||||
option EchoInterval
|
|
||||||
option RestartWait
|
|
||||||
option MaxFail
|
|
||||||
option StartMode
|
|
||||||
option DHCPMode
|
|
||||||
option DaemonMode
|
|
||||||
option ShowNotify
|
|
||||||
option Version
|
|
||||||
option DataFile
|
|
||||||
option DHCPScript
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
#Author:KyleRicardo
|
|
||||||
#Email:shaoyz714@126.com
|
|
||||||
|
|
||||||
[ "$ACTION" = ifup ] || exit 0
|
|
||||||
|
|
||||||
iface=wan6
|
|
||||||
|
|
||||||
[ -z "$iface" -o "$INTERFACE" = "$iface" ] || exit 0
|
|
||||||
|
|
||||||
ip -6 route add `ip -6 route show default|sed -e 's/from [^ ]* //'`
|
|
||||||
logger -t IPv6 "Add IPv6 default route."
|
|
||||||
|
|
||||||
MAX_TRIES=99
|
|
||||||
|
|
||||||
WAN6_NAME="wan6"
|
|
||||||
|
|
||||||
WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname")
|
|
||||||
#eth0.2 by default
|
|
||||||
|
|
||||||
LAN_IP6PREFIX=$(uci get network.lan.ip6prefix)
|
|
||||||
#e.g. aaaa:bbbb:cccc:dddd::/64
|
|
||||||
|
|
||||||
#LAN_ULA_PREFIX=$(uci get network.globals.ula_prefix)
|
|
||||||
#e.g. ddc2:d512:65f5::/48
|
|
||||||
|
|
||||||
PROBE=0
|
|
||||||
|
|
||||||
COUNT=1
|
|
||||||
|
|
||||||
while [ $PROBE -eq 0 ]
|
|
||||||
do
|
|
||||||
if [ $COUNT -gt $MAX_TRIES ];then
|
|
||||||
logger -t NAT6 "No IPv6 route found (reached retry limit $MAX_TRIES times)" && exit 1
|
|
||||||
fi
|
|
||||||
sleep 5
|
|
||||||
logger -t NAT6 "Probing IPv6 route ($COUNT time)"
|
|
||||||
COUNT=$((COUNT+1))
|
|
||||||
PROBE=$(route -A inet6 | grep -c '::/0')
|
|
||||||
done
|
|
||||||
|
|
||||||
#ip6tables -t nat -I POSTROUTING -s "$LAN_ULA_PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
|
|
||||||
ip6tables -t nat -I POSTROUTING -s "$LAN_IP6PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
|
|
||||||
|
|
||||||
#WAN6_GATEWAY=$(route -A inet6 -e | grep "$WAN6_INTERFACE" | awk '/::\/0/{print $2; exit}')
|
|
||||||
#get gateway from routing table. !!!Caution!!! May not work !
|
|
||||||
WAN6_GATEWAY=$(ifconfig eth0.2 | grep 'Global' | awk '{print $3}'| awk -F':' '{print $1":"$2":"$3":"$4"::1"}')
|
|
||||||
#caculate gateway from wan ipv6
|
|
||||||
#WAN6_GATEWAY=$(tracepath6 -n tv.byr.cn | grep ' 1: ' | awk 'NR==1 {print $2}')
|
|
||||||
|
|
||||||
#route -A inet6 add 2000::/3 gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
|
|
||||||
route -A inet6 add default gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
|
|
||||||
|
|
||||||
logger -t NAT6 "Done with IPv6 settings"
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
#Author:KyleRicardo
|
|
||||||
#Email:shaoyz714@126.com
|
|
||||||
|
|
||||||
START=65
|
|
||||||
STOP=10
|
|
||||||
|
|
||||||
start()
|
|
||||||
{
|
|
||||||
if [ $(uci get airwhu.@switch[0].enableauth) ];then
|
|
||||||
local Username=$(uci get airwhu.@auth[0].Username)
|
|
||||||
local Password=$(uci get airwhu.@auth[0].Password)
|
|
||||||
local ifname=$(uci get airwhu.@auth[0].ifname)
|
|
||||||
local IP=$(uci get airwhu.@auth[0].IP)
|
|
||||||
local Mask=$(uci get airwhu.@auth[0].Mask)
|
|
||||||
local Gateway=$(uci get airwhu.@auth[0].Gateway)
|
|
||||||
local DNS=$(uci get airwhu.@auth[0].DNS)
|
|
||||||
local PingHost=$(uci get airwhu.@auth[0].PingHost)
|
|
||||||
local Timeout=$(uci get airwhu.@auth[0].Timeout)
|
|
||||||
local EchoInterval=$(uci get airwhu.@auth[0].EchoInterval)
|
|
||||||
local RestartWait=$(uci get airwhu.@auth[0].RestartWait)
|
|
||||||
local MaxFail=$(uci get airwhu.@auth[0].MaxFail)
|
|
||||||
local StartMode=$(uci get airwhu.@auth[0].StartMode)
|
|
||||||
local DHCPMode=$(uci get airwhu.@auth[0].DHCPMode)
|
|
||||||
local DaemonMode=$(uci get airwhu.@auth[0].DaemonMode)
|
|
||||||
local ShowNotify=$(uci get airwhu.@auth[0].ShowNotify)
|
|
||||||
local Version=$(uci get airwhu.@auth[0].Version)
|
|
||||||
local DataFile=$(uci get airwhu.@auth[0].DataFile)
|
|
||||||
local DHCPScript=$(uci get airwhu.@auth[0].DHCPScript)
|
|
||||||
mentohust -u$Username -p$Password -n$ifname -b$DaemonMode -a$StartMode -d$DaemonMode -c"$DHCPScript" -w>/dev/null 2>&1
|
|
||||||
#Temporarily designed only for whu. To be continued...
|
|
||||||
else
|
|
||||||
stop
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
stop()
|
|
||||||
{
|
|
||||||
sync
|
|
||||||
mentohust -k >/dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
restart()
|
|
||||||
{
|
|
||||||
stop
|
|
||||||
start
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
#
|
|
||||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
LUCI_TITLE:=Open App Filter Module
|
|
||||||
LUCI_PKGARCH:=all
|
|
||||||
LUCI_DEPENDS:=+appfilter
|
|
||||||
|
|
||||||
PKG_NAME:=luci-app-appfilter
|
|
||||||
PKG_VERSION:=5.0.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
include $(TOPDIR)/feeds/luci/luci.mk
|
|
||||||
|
|
||||||
# call BuildPackage - OpenWrt buildroot signature
|
|
||||||
File diff suppressed because one or more lines are too long
@ -1,197 +0,0 @@
|
|||||||
|
|
||||||
module("luci.controller.appfilter", package.seeall)
|
|
||||||
local utl = require "luci.util"
|
|
||||||
|
|
||||||
function index()
|
|
||||||
if not nixio.fs.access("/etc/config/appfilter") then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local page
|
|
||||||
--hide save button
|
|
||||||
page = entry({"admin", "network", "appfilter"}, arcombine(cbi("appfilter/appfilter"), cbi("appfilter/dev_status", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true})), _("appfilter"), 100)
|
|
||||||
|
|
||||||
page.leaf = true
|
|
||||||
page.subindex = true
|
|
||||||
|
|
||||||
--page.dependent = true
|
|
||||||
|
|
||||||
page = entry({"admin", "network", "user_status"}, call("user_status"), nil)
|
|
||||||
page.leaf = true
|
|
||||||
|
|
||||||
page = entry({"admin", "network", "dev_app_status"}, call("dev_app_status"), nil)
|
|
||||||
page.leaf = true
|
|
||||||
|
|
||||||
page = entry({"admin", "network", "dev_visit_list"}, call("get_dev_visit_list"), nil)
|
|
||||||
page.leaf = true
|
|
||||||
|
|
||||||
page = entry({"admin", "network", "feature_upgrade"}, call("handle_feature_upgrade"), nil)
|
|
||||||
page.leaf = true
|
|
||||||
|
|
||||||
page = entry({"admin", "network", "dev_visit_time"}, call("get_dev_visit_time"), nil)
|
|
||||||
page.leaf = true
|
|
||||||
page = entry({"admin", "network", "app_class_visit_time"}, call("get_app_class_visit_time"), nil)
|
|
||||||
page.leaf = true
|
|
||||||
end
|
|
||||||
|
|
||||||
function get_hostname_by_mac(dst_mac)
|
|
||||||
leasefile="/tmp/dhcp.leases"
|
|
||||||
local fd = io.open(leasefile, "r")
|
|
||||||
if not fd then return end
|
|
||||||
while true do
|
|
||||||
local ln = fd:read("*l")
|
|
||||||
if not ln then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
local ts, mac, ip, name, duid = ln:match("^(%d+) (%S+) (%S+) (%S+) (%S+)")
|
|
||||||
if dst_mac == mac then
|
|
||||||
fd:close()
|
|
||||||
return name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
fd:close()
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function handle_feature_upgrade()
|
|
||||||
local fs = require "nixio.fs"
|
|
||||||
local http = require "luci.http"
|
|
||||||
local image_tmp = "/tmp/feature.cfg"
|
|
||||||
|
|
||||||
local fp
|
|
||||||
http.setfilehandler(
|
|
||||||
function(meta, chunk, eof)
|
|
||||||
|
|
||||||
fp = io.open(image_tmp, "w")
|
|
||||||
|
|
||||||
if fp and chunk then
|
|
||||||
fp:write(chunk)
|
|
||||||
end
|
|
||||||
if fp and eof then
|
|
||||||
fp:close()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function get_app_name_by_id(appid)
|
|
||||||
local class_fd = io.popen("find /tmp/appfilter/ -type f -name *.class |xargs cat |grep "..appid.."|awk '{print $2}'")
|
|
||||||
if class_fd then
|
|
||||||
local name = class_fd:read("*l")
|
|
||||||
class_fd:close()
|
|
||||||
return name
|
|
||||||
end
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
|
|
||||||
function cmp_func(a,b)
|
|
||||||
return a.latest_time > b.latest_time
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function user_status()
|
|
||||||
local json = require "luci.jsonc"
|
|
||||||
luci.http.prepare_content("application/json")
|
|
||||||
local fd = io.open("/proc/net/af_client","r")
|
|
||||||
status_buf=fd:read('*a')
|
|
||||||
fd:close()
|
|
||||||
user_array=json.parse(status_buf)
|
|
||||||
|
|
||||||
local visit_obj=utl.ubus("appfilter", "visit_list", {});
|
|
||||||
local user_array=visit_obj.dev_list
|
|
||||||
local history={}
|
|
||||||
for i, v in pairs(user_array) do
|
|
||||||
visit_array=user_array[i].visit_info
|
|
||||||
for j,s in pairs(visit_array) do
|
|
||||||
print(user_array[i].mac, user_array[i].ip,visit_array[j].appid, visit_array[j].latest_time)
|
|
||||||
total_time=visit_array[j].latest_time - visit_array[j].first_time;
|
|
||||||
history[#history+1]={
|
|
||||||
mac=user_array[i].mac,
|
|
||||||
ip=user_array[i].ip,
|
|
||||||
hostname=get_hostname_by_mac(user_array[i].mac),
|
|
||||||
appid=visit_array[j].appid,
|
|
||||||
appname=get_app_name_by_id(visit_array[j].appid),
|
|
||||||
--total_num=visit_array[j].total_num,
|
|
||||||
--drop_num=visit_array[j].drop_num,
|
|
||||||
total_num=0,
|
|
||||||
drop_num=0,
|
|
||||||
latest_action=visit_array[j].latest_action,
|
|
||||||
latest_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].latest_time),
|
|
||||||
first_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].first_time),
|
|
||||||
total_time=total_time
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table.sort(history, cmp_func)
|
|
||||||
luci.http.write_json(history);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function dev_app_status()
|
|
||||||
local json = require "luci.jsonc"
|
|
||||||
luci.http.prepare_content("application/json")
|
|
||||||
local visit_obj=utl.ubus("appfilter", "dev_list", {});
|
|
||||||
luci.http.write_json(visit_obj);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function get_dev_visit_time(mac)
|
|
||||||
local json = require "luci.jsonc"
|
|
||||||
luci.http.prepare_content("application/json")
|
|
||||||
local fd = io.open("/proc/net/af_client","r")
|
|
||||||
status_buf=fd:read('*a')
|
|
||||||
fd:close()
|
|
||||||
user_array=json.parse(status_buf)
|
|
||||||
local req_obj = {}
|
|
||||||
req_obj.mac = mac;
|
|
||||||
local visit_obj=utl.ubus("appfilter", "dev_visit_time", req_obj);
|
|
||||||
local user_array=visit_obj.app_list
|
|
||||||
luci.http.write_json(user_array);
|
|
||||||
end
|
|
||||||
|
|
||||||
function get_app_class_visit_time(mac)
|
|
||||||
local json = require "luci.jsonc"
|
|
||||||
luci.http.prepare_content("application/json")
|
|
||||||
local req_obj = {}
|
|
||||||
req_obj.mac = mac;
|
|
||||||
local visit_obj=utl.ubus("appfilter", "app_class_visit_time", req_obj);
|
|
||||||
local class_array=visit_obj.class_list
|
|
||||||
luci.http.write_json(class_array);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function get_dev_visit_list(mac)
|
|
||||||
local json = require "luci.jsonc"
|
|
||||||
luci.http.prepare_content("application/json")
|
|
||||||
local req_obj = {}
|
|
||||||
req_obj.mac = mac;
|
|
||||||
|
|
||||||
local visit_obj=utl.ubus("appfilter", "visit_list", req_obj);
|
|
||||||
local user_array=visit_obj.dev_list
|
|
||||||
local history={}
|
|
||||||
for i, v in pairs(user_array) do
|
|
||||||
visit_array=user_array[i].visit_info
|
|
||||||
for j,s in pairs(visit_array) do
|
|
||||||
print(user_array[i].mac, user_array[i].ip,visit_array[j].appid, visit_array[j].latest_time)
|
|
||||||
total_time=visit_array[j].latest_time - visit_array[j].first_time;
|
|
||||||
history[#history+1]={
|
|
||||||
mac=user_array[i].mac,
|
|
||||||
ip=user_array[i].ip,
|
|
||||||
hostname=get_hostname_by_mac(user_array[i].mac),
|
|
||||||
appid=visit_array[j].appid,
|
|
||||||
appname=get_app_name_by_id(visit_array[j].appid),
|
|
||||||
total_num=0,
|
|
||||||
drop_num=0,
|
|
||||||
latest_action=visit_array[j].latest_action,
|
|
||||||
latest_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].latest_time),
|
|
||||||
first_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].first_time),
|
|
||||||
total_time=total_time
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table.sort(history, cmp_func)
|
|
||||||
luci.http.write_json(history);
|
|
||||||
end
|
|
||||||
@ -1,225 +0,0 @@
|
|||||||
|
|
||||||
local ds = require "luci.dispatcher"
|
|
||||||
local nxo = require "nixio"
|
|
||||||
local nfs = require "nixio.fs"
|
|
||||||
local ipc = require "luci.ip"
|
|
||||||
local sys = require "luci.sys"
|
|
||||||
local utl = require "luci.util"
|
|
||||||
local dsp = require "luci.dispatcher"
|
|
||||||
local uci = require "luci.model.uci"
|
|
||||||
local lng = require "luci.i18n"
|
|
||||||
local jsc = require "luci.jsonc"
|
|
||||||
local http = luci.http
|
|
||||||
local SYS = require "luci.sys"
|
|
||||||
local m, s
|
|
||||||
|
|
||||||
m = Map("appfilter",
|
|
||||||
translate("appfilter"),
|
|
||||||
translate(""))
|
|
||||||
|
|
||||||
s = m:section(TypedSection, "global", translate("Basic Settings"))
|
|
||||||
s:option(Flag, "enable", translate("Enable App Filter"),translate(""))
|
|
||||||
s.anonymous = true
|
|
||||||
|
|
||||||
local rule_count=0
|
|
||||||
local version=""
|
|
||||||
if nixio.fs.access("/etc/appfilter/feature.cfg") then
|
|
||||||
rule_count=tonumber(SYS.exec("cat /etc/appfilter/feature.cfg | wc -l"))
|
|
||||||
version=SYS.exec("cat /etc/appfilter/feature.cfg |grep \"#version\" | awk '{print $2}'")
|
|
||||||
end
|
|
||||||
local display_str="<strong>当前版本: </strong>"..version.."<br><strong>特征码个数:</strong> "..rule_count.."<br><strong> 下载地址:</strong><a href=\"https://destan19.github.io\">https://destan19.github.io</a>"
|
|
||||||
s = m:section(TypedSection, "feature", translate("特征库更新"), display_str )
|
|
||||||
|
|
||||||
fu = s:option(FileUpload, "")
|
|
||||||
fu.template = "cbi/oaf_upload"
|
|
||||||
s.anonymous = true
|
|
||||||
|
|
||||||
um = s:option(DummyValue, "rule_data")
|
|
||||||
|
|
||||||
s=m:section(TypedSection,"time",translate("时间控制")) s.anonymous = true
|
|
||||||
hv = s:option(Value, "start_time", translate("开始时间")) hv.default="00:00"
|
|
||||||
hv.optional=false
|
|
||||||
hv = s:option(Value, "end_time", translate("结束时间")) hv.default="23:59"
|
|
||||||
hv.optional=false days = s:option(MultiValue, "days", "", translate(""))
|
|
||||||
days.widget="checkbox" days.size=10
|
|
||||||
days:value("0", "周日");
|
|
||||||
days:value("1", "周一");
|
|
||||||
days:value("2", "周二");
|
|
||||||
days:value("3", "周三");
|
|
||||||
days:value("4", "周四");
|
|
||||||
days:value("5", "周五");
|
|
||||||
days:value("6", "周六");
|
|
||||||
|
|
||||||
--um.value =rule_count .. " " .. translate("Records").. " "..version
|
|
||||||
s = m:section(TypedSection, "appfilter", translate("App Filter Rules"))
|
|
||||||
s.anonymous = true
|
|
||||||
s.addremove = false
|
|
||||||
|
|
||||||
|
|
||||||
local class_fd = io.popen("find /tmp/appfilter/ -type f -name '*.class'")
|
|
||||||
if class_fd then
|
|
||||||
while true do
|
|
||||||
local apps
|
|
||||||
local class
|
|
||||||
local path = class_fd:read("*l")
|
|
||||||
if not path then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
|
|
||||||
class = path:match("([^/]+)%.class$")
|
|
||||||
-- add a tab
|
|
||||||
s:tab(class, translate(class))
|
|
||||||
-- multi value option
|
|
||||||
apps = s:taboption(class, MultiValue, class.."apps", translate(""))
|
|
||||||
apps.rmempty=true
|
|
||||||
--apps.delimiter=";"
|
|
||||||
-- select
|
|
||||||
apps.widget="checkbox"
|
|
||||||
apps.size=10
|
|
||||||
|
|
||||||
local fd = io.open(path)
|
|
||||||
if fd then
|
|
||||||
local line
|
|
||||||
while true do
|
|
||||||
local cmd
|
|
||||||
local cmd_fd
|
|
||||||
line = fd:read("*l")
|
|
||||||
if not line then break end
|
|
||||||
if string.len(line) < 5 then break end
|
|
||||||
if not string.find(line,"#") then
|
|
||||||
cmd = "echo "..line.."|awk '{print $1}'"
|
|
||||||
cmd_fd = io.popen(cmd)
|
|
||||||
id = cmd_fd:read("*l");
|
|
||||||
cmd_fd:close()
|
|
||||||
|
|
||||||
cmd = "echo "..line.."|awk '{print $2}'"
|
|
||||||
cmd_fd = io.popen(cmd)
|
|
||||||
name = cmd_fd:read("*l")
|
|
||||||
|
|
||||||
cmd_fd:close()
|
|
||||||
if not id then break end
|
|
||||||
if not name then break end
|
|
||||||
apps:value(id, name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
fd:close()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
class_fd:close()
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function get_hostname_by_mac(dst_mac)
|
|
||||||
leasefile="/tmp/dhcp.leases"
|
|
||||||
local fd = io.open(leasefile, "r")
|
|
||||||
if not fd then return end
|
|
||||||
while true do
|
|
||||||
local ln = fd:read("*l")
|
|
||||||
if not ln then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
local ts, mac, ip, name, duid = ln:match("^(%d+) (%S+) (%S+) (%S+) (%S+)")
|
|
||||||
print(ln)
|
|
||||||
if dst_mac == mac then
|
|
||||||
fd:close()
|
|
||||||
return name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
fd:close()
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
function get_cmd_result(command)
|
|
||||||
local fd
|
|
||||||
local result
|
|
||||||
fd = io.popen(command);
|
|
||||||
if not fd then return "" end
|
|
||||||
result = fd:read("*l");
|
|
||||||
fd:close()
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
s=m:section(TypedSection,"user",translate("Select users"))
|
|
||||||
s.anonymous = true
|
|
||||||
users = s:option(MultiValue, "users", "", translate("Select at least one user, otherwise it will take effect for all users"))
|
|
||||||
users.widget="checkbox"
|
|
||||||
--users.widget="select"
|
|
||||||
users.size=1
|
|
||||||
|
|
||||||
local fd = io.open("/tmp/dev_list", "r")
|
|
||||||
if not fd then return m end
|
|
||||||
while true do
|
|
||||||
local line = fd:read("*l")
|
|
||||||
if not line then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
if not line:match("Id*") then
|
|
||||||
local ip=get_cmd_result(string.format("echo '%s' | awk '{print $3}'", line))
|
|
||||||
local mac=get_cmd_result(string.format("echo '%s' | awk '{print $2}'", line))
|
|
||||||
if mac ~= nil then
|
|
||||||
local hostname=get_hostname_by_mac(mac)
|
|
||||||
if not hostname or hostname == "*" then
|
|
||||||
users:value(mac, mac);
|
|
||||||
else
|
|
||||||
users:value(mac, hostname);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local config_users=m.uci:get_all("appfilter.user.users")
|
|
||||||
if config_users~=nil then
|
|
||||||
local r=utl.split(config_users, "%s+", nil, true)
|
|
||||||
local max = table.getn(r)
|
|
||||||
for i=1,max,1 do
|
|
||||||
users:value(r[i], r[i]);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
m:section(SimpleSection).template = "admin_network/user_status"
|
|
||||||
local dir, fd
|
|
||||||
dir = "/tmp/upload/"
|
|
||||||
nixio.fs.mkdir(dir)
|
|
||||||
http.setfilehandler(
|
|
||||||
function(meta, chunk, eof)
|
|
||||||
if not fd then
|
|
||||||
if not meta then return end
|
|
||||||
if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end
|
|
||||||
if not fd then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if chunk and fd then
|
|
||||||
fd:write(chunk)
|
|
||||||
end
|
|
||||||
if eof and fd then
|
|
||||||
fd:close()
|
|
||||||
local fd2 = io.open("/tmp/upload/"..meta.file)
|
|
||||||
local line=fd2:read("*l");
|
|
||||||
fd2:close()
|
|
||||||
local ret=string.match(line, "#version")
|
|
||||||
if ret ~= nil then
|
|
||||||
local cmd="cp /tmp/upload/"..meta.file.." /etc/appfilter/feature.cfg";
|
|
||||||
os.execute(cmd);
|
|
||||||
os.execute("rm /tmp/appfilter -fr");
|
|
||||||
luci.sys.exec("/etc/init.d/appfilter restart &");
|
|
||||||
um.value = translate("更新成功,请刷新页面!")
|
|
||||||
else
|
|
||||||
um.value = translate("更新失败,格式错误!")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
)
|
|
||||||
|
|
||||||
if luci.http.formvalue("upload") then
|
|
||||||
local f = luci.http.formvalue("ulfile")
|
|
||||||
if #f <= 0 then
|
|
||||||
--um.value = translate("No specify upload file.")
|
|
||||||
end
|
|
||||||
elseif luci.http.formvalue("download") then
|
|
||||||
Download()
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
return m
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
|
|
||||||
local ds = require "luci.dispatcher"
|
|
||||||
local nxo = require "nixio"
|
|
||||||
local nfs = require "nixio.fs"
|
|
||||||
local ipc = require "luci.ip"
|
|
||||||
local sys = require "luci.sys"
|
|
||||||
local utl = require "luci.util"
|
|
||||||
local dsp = require "luci.dispatcher"
|
|
||||||
local uci = require "luci.model.uci"
|
|
||||||
local lng = require "luci.i18n"
|
|
||||||
local jsc = require "luci.jsonc"
|
|
||||||
|
|
||||||
local m, s
|
|
||||||
arg[1] = arg[1] or ""
|
|
||||||
m = Map("appfilter",
|
|
||||||
translate("上网统计("..arg[1]..")"),
|
|
||||||
translate(""))
|
|
||||||
|
|
||||||
local v
|
|
||||||
v=m:section(SimpleSection)
|
|
||||||
v.template="admin_network/dev_status"
|
|
||||||
v.mac=arg[1]
|
|
||||||
m.redirect = luci.dispatcher.build_url("admin", "network", "appfilter")
|
|
||||||
return m
|
|
||||||
@ -1,353 +0,0 @@
|
|||||||
<style type="text/css">
|
|
||||||
<%
|
|
||||||
local dsp = require "luci.dispatcher"
|
|
||||||
-%>
|
|
||||||
|
|
||||||
#display{
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.imagetable {
|
|
||||||
font-family: verdana,arial,sans-serif;
|
|
||||||
font-size:11px;
|
|
||||||
color:#333333;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: #999999;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
<!--
|
|
||||||
table.imagetable th {
|
|
||||||
background:#f5f5f5
|
|
||||||
border-width: 0px;
|
|
||||||
padding: 5px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #999999;
|
|
||||||
}
|
|
||||||
table.imagetable td {
|
|
||||||
background:#ffffffff
|
|
||||||
border-width: 0px;
|
|
||||||
padding: 5px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #999999;
|
|
||||||
}-->
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" src="<%=resource%>/echarts.min.js"></script>
|
|
||||||
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
window.onload =function(){
|
|
||||||
|
|
||||||
}
|
|
||||||
var app_class_data;
|
|
||||||
var app_time_data;
|
|
||||||
var mac='<%=self.mac%>';
|
|
||||||
function get_display_time(total_time){
|
|
||||||
var hour=parseInt(total_time / 3600);
|
|
||||||
var seconds=total_time % 3600;
|
|
||||||
var min=parseInt(seconds / 60)
|
|
||||||
var seconds2=seconds % 60;
|
|
||||||
var total_time_str;
|
|
||||||
|
|
||||||
if (hour > 0)
|
|
||||||
total_time_str=hour + "小时" + min + "分"
|
|
||||||
else{
|
|
||||||
if (min == 0 && seconds2 != 0)
|
|
||||||
min = 1;
|
|
||||||
total_time_str=min + "分"
|
|
||||||
}
|
|
||||||
return total_time_str;
|
|
||||||
}
|
|
||||||
|
|
||||||
function display_app_visit_view(data){
|
|
||||||
var myChart = echarts.init(document.getElementById('main2'));
|
|
||||||
var dev_array=new Array();
|
|
||||||
var m2R2Data=new Array()
|
|
||||||
var total_time=0
|
|
||||||
for(var i = 0; i < data.length; i++){
|
|
||||||
var dev_obj = data[i];
|
|
||||||
var m2_obj={};
|
|
||||||
m2_obj.value=dev_obj.visit_time;
|
|
||||||
m2_obj.legendname=dev_obj.app_id;
|
|
||||||
|
|
||||||
var tmp_time = get_display_time(dev_obj.visit_time);
|
|
||||||
|
|
||||||
m2_obj.name=dev_obj.app_id + " " + tmp_time;
|
|
||||||
total_time+=dev_obj.visit_time
|
|
||||||
m2R2Data.push(m2_obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
var total_time_str = get_display_time(total_time);
|
|
||||||
option = {
|
|
||||||
title: [
|
|
||||||
{
|
|
||||||
text: 'APP时间统计',
|
|
||||||
textStyle: {
|
|
||||||
fontSize: 16,
|
|
||||||
color: "black"
|
|
||||||
},
|
|
||||||
left: "2%"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: '',
|
|
||||||
subtext: total_time_str,
|
|
||||||
textStyle:{
|
|
||||||
fontSize:15,
|
|
||||||
color:"black"
|
|
||||||
},
|
|
||||||
subtextStyle: {
|
|
||||||
fontSize: 15,
|
|
||||||
color: 'black'
|
|
||||||
},
|
|
||||||
textAlign:"center",
|
|
||||||
x: '34.5%',
|
|
||||||
y: '44%',
|
|
||||||
}],
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'item',
|
|
||||||
formatter:function (parms){
|
|
||||||
var total_time = get_display_time(parms.data.value);
|
|
||||||
var str= parms.seriesName+"</br>"+
|
|
||||||
parms.marker+""+parms.data.legendname+"</br>"+
|
|
||||||
"时间:"+ total_time+"</br>"+
|
|
||||||
"占比:"+ parms.percent+"%";
|
|
||||||
return str ;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
type:"scroll",
|
|
||||||
orient: 'vertical',
|
|
||||||
left:'70%',
|
|
||||||
align:'left',
|
|
||||||
top:'middle',
|
|
||||||
textStyle: {
|
|
||||||
color:'#8C8C8C'
|
|
||||||
},
|
|
||||||
height:250
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: "访问时间",
|
|
||||||
type:'pie',
|
|
||||||
center: ['35%', '50%'],
|
|
||||||
radius: ['40%', '65%'],
|
|
||||||
clockwise: false, //饼图的扇区是否是顺时针排布
|
|
||||||
avoidLabelOverlap: false,
|
|
||||||
label: {
|
|
||||||
normal: {
|
|
||||||
show: true,
|
|
||||||
position: 'outter',
|
|
||||||
formatter:function (parms){
|
|
||||||
return parms.data.legendname
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
labelLine: {
|
|
||||||
normal: {
|
|
||||||
length:8,
|
|
||||||
length2:7,
|
|
||||||
smooth:true,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data:m2R2Data
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
myChart.setOption(option);
|
|
||||||
}
|
|
||||||
|
|
||||||
function display_app_class_view(data){
|
|
||||||
console.log("begin display.");
|
|
||||||
var myChart = echarts.init(document.getElementById('main'));
|
|
||||||
var dev_array=new Array();
|
|
||||||
var m2R2Data=new Array()
|
|
||||||
var total_time=0
|
|
||||||
for(var i = 0; i < data.length; i++){
|
|
||||||
console.log("begin display222.");
|
|
||||||
|
|
||||||
var dev_obj = data[i];
|
|
||||||
if (dev_obj.visit_time == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
var m2_obj={};
|
|
||||||
m2_obj.value=dev_obj.visit_time;
|
|
||||||
m2_obj.legendname=dev_obj.name;
|
|
||||||
|
|
||||||
var tmp_time = get_display_time(dev_obj.visit_time);
|
|
||||||
|
|
||||||
m2_obj.name=dev_obj.name + " " + tmp_time;
|
|
||||||
total_time+=dev_obj.visit_time
|
|
||||||
m2R2Data.push(m2_obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
var total_time_str = get_display_time(total_time);
|
|
||||||
|
|
||||||
option = {
|
|
||||||
title: [
|
|
||||||
{
|
|
||||||
text: 'APP分类时间统计',
|
|
||||||
textStyle: {
|
|
||||||
fontSize: 16,
|
|
||||||
color: "black"
|
|
||||||
},
|
|
||||||
left: "2%"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: '',
|
|
||||||
subtext: total_time_str,
|
|
||||||
textStyle:{
|
|
||||||
fontSize:15,
|
|
||||||
color:"black"
|
|
||||||
},
|
|
||||||
subtextStyle: {
|
|
||||||
fontSize: 15,
|
|
||||||
color: 'black'
|
|
||||||
},
|
|
||||||
textAlign:"center",
|
|
||||||
x: '34.5%',
|
|
||||||
y: '44%',
|
|
||||||
}],
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'item',
|
|
||||||
formatter:function (parms){
|
|
||||||
var total_time = get_display_time(parms.data.value);
|
|
||||||
var str= parms.seriesName+"</br>"+
|
|
||||||
parms.marker+""+parms.data.legendname+"</br>"+
|
|
||||||
"时间:"+ total_time +"</br>"+
|
|
||||||
"占比:"+ parms.percent+"%";
|
|
||||||
return str ;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
type:"scroll",
|
|
||||||
orient: 'vertical',
|
|
||||||
left:'70%',
|
|
||||||
align:'left',
|
|
||||||
top:'middle',
|
|
||||||
textStyle: {
|
|
||||||
color:'#8C8C8C'
|
|
||||||
},
|
|
||||||
height:250
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name:'访问时间',
|
|
||||||
type:'pie',
|
|
||||||
center: ['35%', '50%'],
|
|
||||||
radius: ['40%', '65%'],
|
|
||||||
clockwise: false, //饼图的扇区是否是顺时针排布
|
|
||||||
avoidLabelOverlap: false,
|
|
||||||
label: {
|
|
||||||
normal: {
|
|
||||||
show: true,
|
|
||||||
position: 'outter',
|
|
||||||
formatter:function (parms){
|
|
||||||
return parms.data.legendname
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
labelLine: {
|
|
||||||
normal: {
|
|
||||||
length:8,
|
|
||||||
length2:7,
|
|
||||||
smooth:true,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data:m2R2Data
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
myChart.setOption(option);
|
|
||||||
}
|
|
||||||
new XHR().get('<%=url('admin/network/app_class_visit_time')%>/' + mac, null,
|
|
||||||
function(x, st)
|
|
||||||
{
|
|
||||||
display_app_class_view(st);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
new XHR().get('<%=url('admin/network/dev_visit_time')%>/' + mac, null,
|
|
||||||
function(x, st)
|
|
||||||
{
|
|
||||||
display_app_visit_view(st);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
new XHR().get('<%=url('admin/network/dev_visit_list')%>/' + mac, null,
|
|
||||||
function(x, st)
|
|
||||||
{
|
|
||||||
var tb = document.getElementById('user_status_table');
|
|
||||||
var str=JSON.stringify(st);
|
|
||||||
if (st && tb)
|
|
||||||
{
|
|
||||||
/* clear all rows */
|
|
||||||
while(tb.rows.length > 1)
|
|
||||||
tb.deleteRow(1);
|
|
||||||
for(var i = 0; i < st.length; i++ )
|
|
||||||
{
|
|
||||||
var action_status=""
|
|
||||||
if(st[i].latest_action == 1)
|
|
||||||
action_status="已过滤"
|
|
||||||
else
|
|
||||||
action_status="未过滤"
|
|
||||||
var hostname=""
|
|
||||||
if(st[i].hostname == "" || st[i].hostname == "*"){
|
|
||||||
hostname="?";
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
hostname=st[i].hostname;
|
|
||||||
}
|
|
||||||
var tr = tb.insertRow(-1);
|
|
||||||
//tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
|
|
||||||
tr.insertCell(-1).innerHTML = st[i].appname;
|
|
||||||
tr.insertCell(-1).innerHTML = hostname;
|
|
||||||
tr.insertCell(-1).innerHTML = st[i].mac;
|
|
||||||
tr.insertCell(-1).innerHTML = st[i].first_time;
|
|
||||||
var hour=parseInt(st[i].total_time / 3600);
|
|
||||||
var seconds=st[i].total_time % 3600;
|
|
||||||
var min=parseInt(seconds / 60)
|
|
||||||
var total_time_str;
|
|
||||||
if (st[i].latest_action == 1)
|
|
||||||
total_time_str="-"
|
|
||||||
else {
|
|
||||||
if (hour > 0)
|
|
||||||
total_time_str=hour + "小时" + min + "分"
|
|
||||||
else{
|
|
||||||
if (min == 0)
|
|
||||||
min = 1;
|
|
||||||
total_time_str=min + "分"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.insertCell(-1).innerHTML = total_time_str;
|
|
||||||
tr.insertCell(-1).innerHTML = action_status;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
//]]></script>
|
|
||||||
|
|
||||||
<fieldset class="cbi-section">
|
|
||||||
<div id="display">
|
|
||||||
<div id="main" style="width: 500px;height:300px;"></div>
|
|
||||||
<div id="main2" style="width: 400px;height:300px;"></div>
|
|
||||||
</div>
|
|
||||||
<table class="imagetable" id="user_status_table">
|
|
||||||
<tr>
|
|
||||||
<th ><%:App%></th>
|
|
||||||
<th ><%:主机名%></th>
|
|
||||||
<th ><%:mac地址%></th>
|
|
||||||
<th><%:开始时间%></th>
|
|
||||||
<th><%:访问时长%></th>
|
|
||||||
<th><%:过滤状态%></th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="8"><em><br /><%:Collecting data...%></em></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</fieldset>
|
|
||||||
@ -1,150 +0,0 @@
|
|||||||
<style type="text/css">
|
|
||||||
<%
|
|
||||||
local dsp = require "luci.dispatcher"
|
|
||||||
-%>
|
|
||||||
|
|
||||||
table.imagetable {
|
|
||||||
font-family: verdana,arial,sans-serif;
|
|
||||||
font-size:11px;
|
|
||||||
color:#333333;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: #999999;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
<!--
|
|
||||||
table.imagetable th {
|
|
||||||
background:#f5f5f5
|
|
||||||
border-width: 0px;
|
|
||||||
padding: 5px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #999999;
|
|
||||||
}
|
|
||||||
table.imagetable td {
|
|
||||||
background:#ffffffff
|
|
||||||
border-width: 0px;
|
|
||||||
padding: 5px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #999999;
|
|
||||||
}-->
|
|
||||||
</style>
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
|
|
||||||
/*
|
|
||||||
XHR.poll(10, '<%=url('admin/network/user_status')%>', null,
|
|
||||||
function(x, st)
|
|
||||||
{
|
|
||||||
var tb = document.getElementById('user_status_table');
|
|
||||||
var str=JSON.stringify(st);
|
|
||||||
if (st && tb)
|
|
||||||
{
|
|
||||||
while(tb.rows.length > 1)
|
|
||||||
tb.deleteRow(1);
|
|
||||||
for(var i = 0; i < st.length; i++ )
|
|
||||||
{
|
|
||||||
var action_status=""
|
|
||||||
if(st[i].latest_action == 1)
|
|
||||||
action_status="已过滤"
|
|
||||||
else
|
|
||||||
action_status="未过滤"
|
|
||||||
var hostname=""
|
|
||||||
if(st[i].hostname == "" || st[i].hostname == "*"){
|
|
||||||
hostname="?";
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
hostname=st[i].hostname;
|
|
||||||
}
|
|
||||||
var tr = tb.insertRow(-1);
|
|
||||||
//tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
|
|
||||||
tr.insertCell(-1).innerHTML = st[i].appname;
|
|
||||||
tr.insertCell(-1).innerHTML = hostname;
|
|
||||||
tr.insertCell(-1).innerHTML = "<a href='<%=url('admin/network/appfilter/')%>"+st[i].mac+"'>"+st[i].mac+"</a>";
|
|
||||||
tr.insertCell(-1).innerHTML = st[i].first_time;
|
|
||||||
var hour=parseInt(st[i].total_time / 3600);
|
|
||||||
var seconds=st[i].total_time % 3600;
|
|
||||||
var min=parseInt(seconds / 60)
|
|
||||||
var total_time_str;
|
|
||||||
if (st[i].latest_action == 1)
|
|
||||||
total_time_str="-"
|
|
||||||
else {
|
|
||||||
if (hour > 0)
|
|
||||||
total_time_str=hour + "小时" + min + "分"
|
|
||||||
else{
|
|
||||||
if (min == 0)
|
|
||||||
min = 1;
|
|
||||||
total_time_str=min + "分"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.insertCell(-1).innerHTML = total_time_str;
|
|
||||||
tr.insertCell(-1).innerHTML = action_status;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
|
|
||||||
XHR.poll(5, '<%=url('admin/network/dev_app_status')%>', null,
|
|
||||||
function(x, st)
|
|
||||||
{
|
|
||||||
var tb = document.getElementById('user_status_table');
|
|
||||||
var dev_list_str=JSON.stringify(st);
|
|
||||||
if (st && tb)
|
|
||||||
{
|
|
||||||
while(tb.rows.length > 1)
|
|
||||||
tb.deleteRow(1);
|
|
||||||
var devlist = st.devlist
|
|
||||||
for(var i = 0; i < devlist.length; i++ )
|
|
||||||
{
|
|
||||||
var hostname=""
|
|
||||||
if(devlist[i].hostname == "" || devlist[i].hostname == "*"){
|
|
||||||
hostname="?";
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
hostname=devlist[i].hostname;
|
|
||||||
}
|
|
||||||
var tr = tb.insertRow(-1);
|
|
||||||
//tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
|
|
||||||
tr.insertCell(-1).innerHTML = hostname;
|
|
||||||
tr.insertCell(-1).innerHTML = "<a href='<%=url('admin/network/appfilter/')%>"+devlist[i].mac+"'>"+devlist[i].mac+"</a>";
|
|
||||||
tr.insertCell(-1).innerHTML = devlist[i].ip;
|
|
||||||
var app_list_str="";
|
|
||||||
for (var j = 0; j < devlist[i].applist.length; j++){
|
|
||||||
console.log(devlist[i].applist[j].name);
|
|
||||||
app_list_str+=devlist[i].applist[j].name;
|
|
||||||
if (j != devlist[i].applist.length - 1)
|
|
||||||
app_list_str+=","
|
|
||||||
}
|
|
||||||
tr.insertCell(-1).innerHTML = app_list_str;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
//]]></script>
|
|
||||||
|
|
||||||
|
|
||||||
<fieldset class="cbi-section">
|
|
||||||
<legend><%:终端列表%></legend>
|
|
||||||
<table class="imagetable" id="user_status_table">
|
|
||||||
<!--
|
|
||||||
<tr>
|
|
||||||
<th ><%:App%></th>
|
|
||||||
<th ><%:主机名%></th>
|
|
||||||
<th ><%:mac地址%></th>
|
|
||||||
<th><%:开始时间%></th>
|
|
||||||
<th><%:访问时长%></th>
|
|
||||||
<th><%:过滤状态%></th>
|
|
||||||
</tr>
|
|
||||||
-->
|
|
||||||
<tr>
|
|
||||||
<th ><%:主机名%></th>
|
|
||||||
<th ><%:mac地址%></th>
|
|
||||||
<th ><%:ip地址%></th>
|
|
||||||
<th><%:常用APP(TOP5)%></th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="8"><em><br /><%:Collecting data...%></em></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</fieldset>
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
<%+cbi/valueheader%>
|
|
||||||
<label class="cbi-value" style="display:inline-block; width: 130px" for="ulfile"><%:选择本地特征库文件:%></label>
|
|
||||||
<input class="cbi-input-file" style="width: 500px" type="file" id="ulfile" name="ulfile" />
|
|
||||||
<input type="submit" class="cbi-button cbi-input-apply" name="upload" value="<%:Upload%>" />
|
|
||||||
<%+cbi/valuefooter%>
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
|
|
||||||
msgid "website"
|
|
||||||
msgstr "常用网站"
|
|
||||||
|
|
||||||
msgid "appfilter"
|
|
||||||
msgstr "应用过滤"
|
|
||||||
|
|
||||||
msgid "game"
|
|
||||||
msgstr "游戏"
|
|
||||||
|
|
||||||
msgid "web"
|
|
||||||
msgstr "网页"
|
|
||||||
|
|
||||||
msgid "video"
|
|
||||||
msgstr "视频"
|
|
||||||
|
|
||||||
msgid "chat"
|
|
||||||
msgstr "聊天"
|
|
||||||
|
|
||||||
msgid "download"
|
|
||||||
msgstr "下载"
|
|
||||||
|
|
||||||
msgid "p2p"
|
|
||||||
msgstr "p2p"
|
|
||||||
|
|
||||||
msgid "music"
|
|
||||||
msgstr "音乐"
|
|
||||||
|
|
||||||
msgid "shopping"
|
|
||||||
msgstr "购物"
|
|
||||||
|
|
||||||
msgid "working"
|
|
||||||
msgstr "办公"
|
|
||||||
|
|
||||||
msgid "employee"
|
|
||||||
msgstr "招聘"
|
|
||||||
|
|
||||||
msgid "Basic Settings"
|
|
||||||
msgstr "基本设置"
|
|
||||||
|
|
||||||
msgid "App Filter Rules"
|
|
||||||
msgstr "应用过滤规则"
|
|
||||||
|
|
||||||
msgid "Select at least one user, otherwise it will take effect for all users"
|
|
||||||
msgstr "至少选择一个用户,否则对所有用户生效"
|
|
||||||
|
|
||||||
msgid "Select users"
|
|
||||||
msgstr "选择用户"
|
|
||||||
|
|
||||||
msgid "Enable App Filter"
|
|
||||||
msgstr "开启应用过滤"
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# replace existing mwan ucitrack entry
|
|
||||||
uci -q batch <<-EOF >/dev/null
|
|
||||||
del ucitrack.@appfilter[-1]
|
|
||||||
add ucitrack appfilter
|
|
||||||
set ucitrack.@appfilter[-1].exec="/etc/init.d/appfilter reload"
|
|
||||||
commit ucitrack
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# remove LuCI cache
|
|
||||||
rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user