update 2024-03-13 20:28:05

This commit is contained in:
github-actions[bot] 2024-03-13 20:28:05 +08:00
parent 0b9052e870
commit f65c136716
32 changed files with 917 additions and 13 deletions

View File

@ -0,0 +1,18 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=1.0.2-20231208
PKG_RELEASE:=
LUCI_TITLE:=LuCI support for FeiShuVpn
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+lsblk +docker +dockerd +luci-lib-taskd +luci-lib-docker
define Package/luci-app-feishuvpn/conffiles
/etc/config/feishuvpn
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,7 @@
module("luci.controller.feishuvpn", package.seeall)
function index()
entry({"admin", "services", "feishuvpn"}, alias("admin", "services", "feishuvpn", "config"), _("FeiShuVpn"), 30).dependent = true
entry({"admin", "services", "feishuvpn", "config"}, cbi("feishuvpn"))
end

View File

@ -0,0 +1,57 @@
--[[
LuCI - Lua Configuration Interface
]]--
local taskd = require "luci.model.tasks"
local docker = require "luci.docker"
local feishuvpn_model = require "luci.model.feishuvpn"
local m, s, o
m = taskd.docker_map("feishuvpn", "feishuvpn", "/usr/libexec/istorec/feishuvpn.sh",
translate("FeiShuVpn"),
translate("FeiShuVpn is p2p vpn client.")
.. translate("Official website:") .. ' <a href=\"https://wiki.feishuwg.com/\" target=\"_blank\">https://wiki.feishuwg.com/</a>')
local dk = docker.new({socket_path="/var/run/docker.sock"})
local dockerd_running = dk:_ping().code == 200
local docker_info = dockerd_running and dk:info().body or {}
local docker_aspace = 0
if docker_info.DockerRootDir then
local statvfs = nixio.fs.statvfs(docker_info.DockerRootDir)
docker_aspace = statvfs and (statvfs.bavail * statvfs.bsize) or 0
end
s = m:section(SimpleSection, translate("Service Status"), translate("FeiShuVpn status:"))
s:append(Template("feishuvpn/status"))
s = m:section(TypedSection, "main", translate("Setup"),
(docker_aspace < 2147483648 and
(translate("The free space of Docker is less than 2GB, which may cause the installation to fail.")
.. "<br>") or "") .. translate("The following parameters will only take effect during installation or upgrade:"))
s.addremove=false
s.anonymous=true
o = s:option(Value, "port", translate("Port").."<b>*</b>")
o.default = "9091"
o.datatype = "port"
o = s:option(Value, "image_name", translate("Image").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
o.default = "registry.cn-qingdao.aliyuncs.com/feishuwg/p2p:v2.2"
o:value("registry.cn-qingdao.aliyuncs.com/feishuwg/p2p:v2.2", "registry.cn-qingdao.aliyuncs.com/feishuwg/p2p:v2.2")
local blocks = feishuvpn_model.blocks()
local home = feishuvpn_model.home()
o = s:option(Value, "config_path", translate("Config path").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
local paths, default_path = feishuvpn_model.find_paths(blocks, home, "Configs")
for _, val in pairs(paths) do
o:value(val, val)
end
o.default = default_path
return m

View File

@ -0,0 +1,55 @@
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local feishuvpn = {}
feishuvpn.blocks = function()
local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
local vals = {}
if f then
local ret = f:read("*all")
f:close()
local obj = jsonc.parse(ret)
for _, val in pairs(obj["blockdevices"]) do
local fsize = val["fssize"]
if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
-- fsize > 1G
vals[#vals+1] = val["mountpoint"]
end
end
end
return vals
end
feishuvpn.home = function()
local uci = require "luci.model.uci".cursor()
local home_dirs = {}
home_dirs["main_dir"] = uci:get_first("quickstart", "main", "main_dir", "/root")
home_dirs["Configs"] = uci:get_first("quickstart", "main", "conf_dir", home_dirs["main_dir"].."/Configs")
home_dirs["Public"] = uci:get_first("quickstart", "main", "pub_dir", home_dirs["main_dir"].."/Public")
home_dirs["Downloads"] = uci:get_first("quickstart", "main", "dl_dir", home_dirs["Public"].."/Downloads")
home_dirs["Caches"] = uci:get_first("quickstart", "main", "tmp_dir", home_dirs["main_dir"].."/Caches")
return home_dirs
end
feishuvpn.find_paths = function(blocks, home_dirs, path_name)
local default_path = ''
local configs = {}
default_path = home_dirs[path_name] .. "/FeiShuVpn"
if #blocks == 0 then
table.insert(configs, default_path)
else
for _, val in pairs(blocks) do
table.insert(configs, val .. "/" .. path_name .. "/FeiShuVpn")
end
local without_conf_dir = "/root/" .. path_name .. "/FeiShuVpn"
if default_path == without_conf_dir then
default_path = configs[1]
end
end
return configs, default_path
end
return feishuvpn

View File

@ -0,0 +1,31 @@
<%
local util = require "luci.util"
local container_status = util.trim(util.exec("/usr/libexec/istorec/feishuvpn.sh status"))
local container_install = (string.len(container_status) > 0)
local container_running = container_status == "running"
-%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Status%></label>
<div class="cbi-value-field">
<% if container_running then %>
<button class="cbi-button cbi-button-success" disabled="true"><%:FeiShuVpn is running%></button>
<% else %>
<button class="cbi-button cbi-button-negative" disabled="true"><%:FeiShuVpn is not running%></button>
<% end %>
</div>
</div>
<%
if container_running then
local port=util.trim(util.exec("/usr/libexec/istorec/feishuvpn.sh port"))
if port == "" then
port="9091"
end
-%>
<div class="cbi-value cbi-value-last">
<label class="cbi-value-title">&nbsp;</label>
<div class="cbi-value-field">
<input type="button" class="btn cbi-button cbi-button-apply" name="start" value="<%:Open FeiShuVpn%>" onclick="window.open('http://'+location.hostname+':<%=port%>/', '_blank')">
</div>
</div>
<% end %>

View File

@ -0,0 +1,50 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "FeiShuVpn"
msgstr "飞鼠组网"
msgid "Official website:"
msgstr "官方网站:"
msgid "FeiShuVpn is p2p vpn client."
msgstr "飞鼠组网是一个点对点的组网工具。"
msgid "Config path"
msgstr "配置文件路径"
msgid "Port"
msgstr "端口"
msgid "Service Status"
msgstr "服务状态"
msgid "FeiShuVpn status:"
msgstr "飞鼠组网的状态信息如下:"
msgid "Setup"
msgstr "安装配置"
msgid "The following parameters will only take effect during installation or upgrade:"
msgstr "以下参数只在安装或者升级时才会生效:"
msgid "Status"
msgstr "状态"
msgid "FeiShuVpn is running"
msgstr "飞鼠组网运行中"
msgid "FeiShuVpn is not running"
msgstr "飞鼠组网未运行"
msgid "Open FeiShuVpn"
msgstr "打开飞鼠组网"
msgid "Not required, all disk will be mounted under %s"
msgstr "可不填,所有硬盘都会挂载到 %s 下"
msgid "The free space of Docker is less than 2GB, which may cause the installation to fail."
msgstr "Docker 可用空间已不足2GB可能导致安装失败。"
msgid "Please make sure there has enough space"
msgstr "请确保有足够空间"

View File

@ -0,0 +1 @@
zh-cn

View File

@ -0,0 +1,3 @@
config main
option 'config_path' ''

View File

@ -0,0 +1,74 @@
#!/bin/sh
# Author Xiaobao(xiaobao@linkease.com)
ACTION=${1}
shift 1
do_install() {
local image_name=`uci get feishuvpn.@main[0].image_name 2>/dev/null`
local config=`uci get feishuvpn.@main[0].config_path 2>/dev/null`
if [ -z "$config" ]; then
echo "config path is empty!"
exit 1
fi
[ -z "$image_name" ] && image_name="registry.cn-qingdao.aliyuncs.com/feishuwg/p2p:v2.2"
echo "docker pull ${image_name}"
docker pull ${image_name}
docker rm -f feishuvpn
local cmd="docker run --restart=unless-stopped -d -h FeiShuVpnServer -v \"$config:/data/feishu/conf\" "
cmd="$cmd\
--cap-add=ALL \
--privileged=true \
--device=/dev/net/tun \
--dns=127.0.0.1 \
--network=host "
local tz="`uci get system.@system[0].zonename | sed 's/ /_/g'`"
[ -z "$tz" ] || cmd="$cmd -e TZ=$tz"
cmd="$cmd -v /mnt:/mnt"
mountpoint -q /mnt && cmd="$cmd:rslave"
cmd="$cmd --name feishuvpn \"$image_name\""
echo "$cmd"
eval "$cmd"
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install the feishuvpn"
echo " upgrade Upgrade the feishuvpn"
echo " rm/start/stop/restart Remove/Start/Stop/Restart the feishuvpn"
echo " status FeiShuVpn status"
echo " port FeiShuVpn port"
}
case ${ACTION} in
"install")
do_install
;;
"upgrade")
do_install
;;
"rm")
docker rm -f feishuvpn
;;
"start" | "stop" | "restart")
docker ${ACTION} feishuvpn
;;
"status")
docker ps --all -f 'name=feishuvpn' --format '{{.State}}'
;;
"port")
echo 9091
;;
*)
usage
exit 1
;;
esac

View File

@ -0,0 +1,11 @@
{
"luci-app-feishuvpn": {
"description": "Grant UCI access for luci-app-feishuvpn",
"read": {
"uci": [ "feishuvpn" ]
},
"write": {
"uci": [ "feishuvpn" ]
}
}
}

View File

@ -0,0 +1,18 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=1.0.2-20231208
PKG_RELEASE:=
LUCI_TITLE:=LuCI support for HTReader
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+lsblk +docker +dockerd +luci-lib-taskd +luci-lib-docker
define Package/luci-app-htreader/conffiles
/etc/config/htreader
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,7 @@
module("luci.controller.htreader", package.seeall)
function index()
entry({"admin", "services", "htreader"}, alias("admin", "services", "htreader", "config"), _("HTReader"), 30).dependent = true
entry({"admin", "services", "htreader", "config"}, cbi("htreader"))
end

View File

@ -0,0 +1,69 @@
--[[
LuCI - Lua Configuration Interface
]]--
local taskd = require "luci.model.tasks"
local docker = require "luci.docker"
local htreader_model = require "luci.model.htreader"
local m, s, o
m = taskd.docker_map("htreader", "htreader", "/usr/libexec/istorec/htreader.sh",
translate("HTReader"),
translate("HTReader is book reader in web.")
.. translate("Official website:") .. ' <a href=\"https://github.com/XIU2/Yuedu\" target=\"_blank\">https://github.com/XIU2/Yuedu</a>')
local dk = docker.new({socket_path="/var/run/docker.sock"})
local dockerd_running = dk:_ping().code == 200
local docker_info = dockerd_running and dk:info().body or {}
local docker_aspace = 0
if docker_info.DockerRootDir then
local statvfs = nixio.fs.statvfs(docker_info.DockerRootDir)
docker_aspace = statvfs and (statvfs.bavail * statvfs.bsize) or 0
end
s = m:section(SimpleSection, translate("Service Status"), translate("HTReader status:"))
s:append(Template("htreader/status"))
s = m:section(TypedSection, "main", translate("Setup"),
(docker_aspace < 2147483648 and
(translate("The free space of Docker is less than 2GB, which may cause the installation to fail.")
.. "<br>") or "") .. translate("The following parameters will only take effect during installation or upgrade:"))
s.addremove=false
s.anonymous=true
o = s:option(Value, "port", translate("Port").."<b>*</b>")
o.default = "9060"
o.datatype = "port"
o = s:option(Flag, "multiuser", translate("Multiple user version"))
o.default = 0
o.rmempty = false
o = s:option(Value, "password", translate("password"))
o.datatype = "string"
o:depends("multiuser", 1)
o = s:option(Value, "active_code", translate("Active code"))
o.datatype = "string"
o:depends("multiuser", 1)
o = s:option(Value, "image_name", translate("Image").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
o.default = "hectorqin/reader"
o:value("hectorqin/reader", "hectorqin/reader")
local blocks = htreader_model.blocks()
local home = htreader_model.home()
o = s:option(Value, "config_path", translate("Config path").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
local paths, default_path = htreader_model.find_paths(blocks, home, "Configs")
for _, val in pairs(paths) do
o:value(val, val)
end
o.default = default_path
return m

View File

@ -0,0 +1,55 @@
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local htreader = {}
htreader.blocks = function()
local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
local vals = {}
if f then
local ret = f:read("*all")
f:close()
local obj = jsonc.parse(ret)
for _, val in pairs(obj["blockdevices"]) do
local fsize = val["fssize"]
if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
-- fsize > 1G
vals[#vals+1] = val["mountpoint"]
end
end
end
return vals
end
htreader.home = function()
local uci = require "luci.model.uci".cursor()
local home_dirs = {}
home_dirs["main_dir"] = uci:get_first("quickstart", "main", "main_dir", "/root")
home_dirs["Configs"] = uci:get_first("quickstart", "main", "conf_dir", home_dirs["main_dir"].."/Configs")
home_dirs["Public"] = uci:get_first("quickstart", "main", "pub_dir", home_dirs["main_dir"].."/Public")
home_dirs["Downloads"] = uci:get_first("quickstart", "main", "dl_dir", home_dirs["Public"].."/Downloads")
home_dirs["Caches"] = uci:get_first("quickstart", "main", "tmp_dir", home_dirs["main_dir"].."/Caches")
return home_dirs
end
htreader.find_paths = function(blocks, home_dirs, path_name)
local default_path = ''
local configs = {}
default_path = home_dirs[path_name] .. "/HTReader"
if #blocks == 0 then
table.insert(configs, default_path)
else
for _, val in pairs(blocks) do
table.insert(configs, val .. "/" .. path_name .. "/HTReader")
end
local without_conf_dir = "/root/" .. path_name .. "/HTReader"
if default_path == without_conf_dir then
default_path = configs[1]
end
end
return configs, default_path
end
return htreader

View File

@ -0,0 +1,31 @@
<%
local util = require "luci.util"
local container_status = util.trim(util.exec("/usr/libexec/istorec/htreader.sh status"))
local container_install = (string.len(container_status) > 0)
local container_running = container_status == "running"
-%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Status%></label>
<div class="cbi-value-field">
<% if container_running then %>
<button class="cbi-button cbi-button-success" disabled="true"><%:HTReader is running%></button>
<% else %>
<button class="cbi-button cbi-button-negative" disabled="true"><%:HTReader is not running%></button>
<% end %>
</div>
</div>
<%
if container_running then
local port=util.trim(util.exec("/usr/libexec/istorec/htreader.sh port"))
if port == "" then
port="9060"
end
-%>
<div class="cbi-value cbi-value-last">
<label class="cbi-value-title">&nbsp;</label>
<div class="cbi-value-field">
<input type="button" class="btn cbi-button cbi-button-apply" name="start" value="<%:Open HTReader%>" onclick="window.open('http://'+location.hostname+':<%=port%>/', '_blank')">
</div>
</div>
<% end %>

View File

@ -0,0 +1,44 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Official website:"
msgstr "官方网站:"
msgid "HTReader is book reader in web."
msgstr "HTReader 是一个网页版本在线读书。"
msgid "Config path"
msgstr "配置文件路径"
msgid "Port"
msgstr "端口"
msgid "Service Status"
msgstr "服务状态"
msgid "HTReader status:"
msgstr "HTReader 的状态信息如下:"
msgid "Setup"
msgstr "安装配置"
msgid "The following parameters will only take effect during installation or upgrade:"
msgstr "以下参数只在安装或者升级时才会生效:"
msgid "Status"
msgstr "状态"
msgid "HTReader is running"
msgstr "HTReader 运行中"
msgid "HTReader is not running"
msgstr "HTReader 未运行"
msgid "Open HTReader"
msgstr "打开 HTReader"
msgid "The free space of Docker is less than 2GB, which may cause the installation to fail."
msgstr "Docker 可用空间已不足2GB可能导致安装失败。"
msgid "Please make sure there has enough space"
msgstr "请确保有足够空间"

View File

@ -0,0 +1 @@
zh-cn

View File

@ -0,0 +1,4 @@
config main
option 'port' '9060'
option 'multiuser' '0'

View File

@ -0,0 +1,86 @@
#!/bin/sh
# Author Xiaobao(xiaobao@linkease.com)
ACTION=${1}
shift 1
do_install() {
local port=`uci get htreader.@main[0].port 2>/dev/null`
local multiuser=`uci get htreader.@main[0].multiuser 2>/dev/null`
local active_code=`uci get htreader.@main[0].active_code 2>/dev/null`
local password=`uci get htreader.@main[0].password 2>/dev/null`
local image_name=`uci get htreader.@main[0].image_name 2>/dev/null`
local config=`uci get htreader.@main[0].config_path 2>/dev/null`
if [ -z "$config" ]; then
echo "config path is empty!"
exit 1
fi
[ -z "$image_name" ] && image_name="hectorqin/reader"
echo "docker pull ${image_name}"
docker pull ${image_name}
docker rm -f htreader
[ -z "$port" ] && port=9060
mkdir -p $config/storage
mkdir -p $config/logs
local cmd="docker run --restart=unless-stopped -d -h HTReaderServer \
-e \"SPRING_PROFILES_ACTIVE=prod\" \
-v \"$config/logs:/logs\" \
-v \"$config/storage:/storage\" "
if [ "$multiuser" = "1" ]; then
cmd="$cmd -e \"READER_APP_SECUREKEY=$password\" -e \"READER_APP_INVITECODE=$active_code\" "
fi
cmd="$cmd\
--dns=172.17.0.1 \
-p $port:8080 "
local tz="`uci get system.@system[0].zonename | sed 's/ /_/g'`"
[ -z "$tz" ] || cmd="$cmd -e TZ=$tz"
cmd="$cmd -v /mnt:/mnt"
mountpoint -q /mnt && cmd="$cmd:rslave"
cmd="$cmd --name htreader \"$image_name\""
echo "$cmd"
eval "$cmd"
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install the htreader"
echo " upgrade Upgrade the htreader"
echo " rm/start/stop/restart Remove/Start/Stop/Restart the htreader"
echo " status HTReader status"
echo " port HTReader port"
}
case ${ACTION} in
"install")
do_install
;;
"upgrade")
do_install
;;
"rm")
docker rm -f htreader
;;
"start" | "stop" | "restart")
docker ${ACTION} htreader
;;
"status")
docker ps --all -f 'name=htreader' --format '{{.State}}'
;;
"port")
docker ps --all -f 'name=htreader' --format '{{.Ports}}' | grep -om1 '0.0.0.0:[0-9]*->9060/tcp' | sed 's/0.0.0.0:\([0-9]*\)->.*/\1/'
;;
*)
usage
exit 1
;;
esac

View File

@ -0,0 +1,11 @@
{
"luci-app-htreader": {
"description": "Grant UCI access for luci-app-htreader",
"read": {
"uci": [ "htreader" ]
},
"write": {
"uci": [ "htreader" ]
}
}
}

18
luci-app-ittools/Makefile Normal file
View File

@ -0,0 +1,18 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=1.0.2-20231208
PKG_RELEASE:=
LUCI_TITLE:=LuCI support for ITTools
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+lsblk +docker +dockerd +luci-lib-taskd +luci-lib-docker
define Package/luci-app-ittools/conffiles
/etc/config/ittools
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,7 @@
module("luci.controller.ittools", package.seeall)
function index()
entry({"admin", "services", "ittools"}, alias("admin", "services", "ittools", "config"), _("ITTools"), 30).dependent = true
entry({"admin", "services", "ittools", "config"}, cbi("ittools"))
end

View File

@ -0,0 +1,45 @@
--[[
LuCI - Lua Configuration Interface
]]--
local taskd = require "luci.model.tasks"
local docker = require "luci.docker"
local m, s, o
m = taskd.docker_map("ittools", "ittools", "/usr/libexec/istorec/ittools.sh",
translate("ITTools"),
translate("ITTools is useful tools for developer and people working in IT.")
.. translate("Official website:") .. ' <a href=\"https://it-tools.tech/\" target=\"_blank\">https://it-tools.tech/</a>')
local dk = docker.new({socket_path="/var/run/docker.sock"})
local dockerd_running = dk:_ping().code == 200
local docker_info = dockerd_running and dk:info().body or {}
local docker_aspace = 0
if docker_info.DockerRootDir then
local statvfs = nixio.fs.statvfs(docker_info.DockerRootDir)
docker_aspace = statvfs and (statvfs.bavail * statvfs.bsize) or 0
end
s = m:section(SimpleSection, translate("Service Status"), translate("ITTools status:"))
s:append(Template("ittools/status"))
s = m:section(TypedSection, "main", translate("Setup"),
(docker_aspace < 2147483648 and
(translate("The free space of Docker is less than 2GB, which may cause the installation to fail.")
.. "<br>") or "") .. translate("The following parameters will only take effect during installation or upgrade:"))
s.addremove=false
s.anonymous=true
o = s:option(Value, "port", translate("Port").."<b>*</b>")
o.default = "9070"
o.datatype = "port"
o:depends("hostnet", 0)
o = s:option(Value, "image_name", translate("Image").."<b>*</b>")
o.rmempty = false
o.datatype = "string"
o.default = "corentinth/it-tools:latest"
o:value("corentinth/it-tools:latest", "corentinth/it-tools:latest")
o:value("ghcr.io/corentinth/it-tools:latest", "ghcr.io/corentinth/it-tools:latest")
return m

View File

@ -0,0 +1,55 @@
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local ittools = {}
ittools.blocks = function()
local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
local vals = {}
if f then
local ret = f:read("*all")
f:close()
local obj = jsonc.parse(ret)
for _, val in pairs(obj["blockdevices"]) do
local fsize = val["fssize"]
if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
-- fsize > 1G
vals[#vals+1] = val["mountpoint"]
end
end
end
return vals
end
ittools.home = function()
local uci = require "luci.model.uci".cursor()
local home_dirs = {}
home_dirs["main_dir"] = uci:get_first("quickstart", "main", "main_dir", "/root")
home_dirs["Configs"] = uci:get_first("quickstart", "main", "conf_dir", home_dirs["main_dir"].."/Configs")
home_dirs["Public"] = uci:get_first("quickstart", "main", "pub_dir", home_dirs["main_dir"].."/Public")
home_dirs["Downloads"] = uci:get_first("quickstart", "main", "dl_dir", home_dirs["Public"].."/Downloads")
home_dirs["Caches"] = uci:get_first("quickstart", "main", "tmp_dir", home_dirs["main_dir"].."/Caches")
return home_dirs
end
ittools.find_paths = function(blocks, home_dirs, path_name)
local default_path = ''
local configs = {}
default_path = home_dirs[path_name] .. "/ITTools"
if #blocks == 0 then
table.insert(configs, default_path)
else
for _, val in pairs(blocks) do
table.insert(configs, val .. "/" .. path_name .. "/ITTools")
end
local without_conf_dir = "/root/" .. path_name .. "/ITTools"
if default_path == without_conf_dir then
default_path = configs[1]
end
end
return configs, default_path
end
return ittools

View File

@ -0,0 +1,31 @@
<%
local util = require "luci.util"
local container_status = util.trim(util.exec("/usr/libexec/istorec/ittools.sh status"))
local container_install = (string.len(container_status) > 0)
local container_running = container_status == "running"
-%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Status%></label>
<div class="cbi-value-field">
<% if container_running then %>
<button class="cbi-button cbi-button-success" disabled="true"><%:ITTools is running%></button>
<% else %>
<button class="cbi-button cbi-button-negative" disabled="true"><%:ITTools is not running%></button>
<% end %>
</div>
</div>
<%
if container_running then
local port=util.trim(util.exec("/usr/libexec/istorec/ittools.sh port"))
if port == "" then
port="9070"
end
-%>
<div class="cbi-value cbi-value-last">
<label class="cbi-value-title">&nbsp;</label>
<div class="cbi-value-field">
<input type="button" class="btn cbi-button cbi-button-apply" name="start" value="<%:Open ITTools%>" onclick="window.open('http://'+location.hostname+':<%=port%>', '_blank')">
</div>
</div>
<% end %>

View File

@ -0,0 +1,44 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "ITTools"
msgid "开发工具集"
msgid "Official website:"
msgstr "官方网站:"
msgid "ITTools is useful tools for developer and people working in IT."
msgstr "开发工具集是集成了很多有用的网页工具。"
msgid "Port"
msgstr "端口"
msgid "Service Status"
msgstr "服务状态"
msgid "ITTools status:"
msgstr "ITTools 的状态信息如下:"
msgid "Setup"
msgstr "安装配置"
msgid "The following parameters will only take effect during installation or upgrade:"
msgstr "以下参数只在安装或者升级时才会生效:"
msgid "Status"
msgstr "状态"
msgid "ITTools is running"
msgstr "ITTools 运行中"
msgid "ITTools is not running"
msgstr "ITTools 未运行"
msgid "Open ITTools"
msgstr "打开 ITTools"
msgid "The free space of Docker is less than 2GB, which may cause the installation to fail."
msgstr "Docker 可用空间已不足2GB可能导致安装失败。"
msgid "Please make sure there has enough space"
msgstr "请确保有足够空间"

1
luci-app-ittools/po/zh_Hans Symbolic link
View File

@ -0,0 +1 @@
zh-cn

View File

@ -0,0 +1,3 @@
config main
option 'port' '9070'

View File

@ -0,0 +1,68 @@
#!/bin/sh
# Author Xiaobao(xiaobao@linkease.com)
ACTION=${1}
shift 1
do_install() {
local port=`uci get ittools.@main[0].port 2>/dev/null`
local image_name=`uci get ittools.@main[0].image_name 2>/dev/null`
[ -z "$image_name" ] && image_name="linuxserver/ittools:latest"
echo "docker pull ${image_name}"
docker pull ${image_name}
docker rm -f ittools
[ -z "$port" ] && port=9070
local cmd="docker run --restart=unless-stopped -d -h ITToolsServer "
cmd="$cmd\
--dns=172.17.0.1 \
-p $port:80 "
local tz="`uci get system.@system[0].zonename | sed 's/ /_/g'`"
[ -z "$tz" ] || cmd="$cmd -e TZ=$tz"
cmd="$cmd -v /mnt:/mnt"
mountpoint -q /mnt && cmd="$cmd:rslave"
cmd="$cmd --name ittools \"$image_name\""
echo "$cmd"
eval "$cmd"
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install the ittools"
echo " upgrade Upgrade the ittools"
echo " rm/start/stop/restart Remove/Start/Stop/Restart the ittools"
echo " status ITTools status"
echo " port ITTools port"
}
case ${ACTION} in
"install")
do_install
;;
"upgrade")
do_install
;;
"rm")
docker rm -f ittools
;;
"start" | "stop" | "restart")
docker ${ACTION} ittools
;;
"status")
docker ps --all -f 'name=ittools' --format '{{.State}}'
;;
"port")
docker ps --all -f 'name=ittools' --format '{{.Ports}}' | grep -om1 '0.0.0.0:[0-9]*->9070/tcp' | sed 's/0.0.0.0:\([0-9]*\)->.*/\1/'
;;
*)
usage
exit 1
;;
esac

View File

@ -0,0 +1,11 @@
{
"luci-app-ittools": {
"description": "Grant UCI access for luci-app-ittools",
"read": {
"uci": [ "ittools" ]
},
"write": {
"uci": [ "ittools" ]
}
}
}

View File

@ -2,7 +2,7 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=1.0.2-20231208
PKG_VERSION:=1.0.2-20240313
PKG_RELEASE:=
LUCI_TITLE:=LuCI support for TypeCho

View File

@ -37,20 +37,8 @@ msgstr "TypeCho 未运行"
msgid "Open TypeCho"
msgstr "打开 TypeCho"
msgid "Not required, all disk will be mounted under %s"
msgstr "可不填,所有硬盘都会挂载到 %s 下"
msgid "TypeCho running in host network, for DLNA application. Port is always 9080 if enabled"
msgstr "在宿主网络运行 TypeCho以支持 DLNA 等应用例如投屏如果启用则端口固定为9080"
msgid "The free space of Docker is less than 2GB, which may cause the installation to fail."
msgstr "Docker 可用空间已不足2GB可能导致安装失败。"
msgid "TypeCho Claim Token"
msgstr "TypeCho Claim 令牌"
msgid "Obtain token from %s"
msgstr "从 %s 获取令牌"
msgid "Please make sure there has enough space"
msgstr "请确保有足够空间"