🚀 Sync 2026-07-28 20:39:07

This commit is contained in:
github-actions[bot] 2026-07-28 20:39:07 +08:00
parent 742ed8086f
commit de14ea4674
70 changed files with 121 additions and 1101 deletions

View File

@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=UnblockNeteaseMusic
PKG_BASE_VERSION:=0.27.0
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/UnblockNeteaseMusic/server.git
PKG_SOURCE_DATE:=2022-10-09
PKG_SOURCE_VERSION:=7aa15ad92d44159d8f1ffcd94338207947cdbff2
PKG_SOURCE_VERSION:=39e21bfb4b7581f39785b190aeced201d23f0d41
PKG_MIRROR_HASH:=skip
PKG_VERSION:=$(PKG_BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION))

View File

@ -5,10 +5,10 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dae
PKG_VERSION:=2026.07.27
PKG_RELEASE:=23
PKG_VERSION:=2026.07.28
PKG_RELEASE:=24
PKG_SOURCE:=dae-src-2026.07.27-c8388938b36a.tar.gz
PKG_SOURCE:=dae-src-2026.07.28-4cea31acd905.tar.gz
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/dae-src
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_HASH:=skip

View File

@ -5,10 +5,10 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=daed
PKG_VERSION:=2026.07.27
PKG_RELEASE:=31
PKG_VERSION:=2026.07.28
PKG_RELEASE:=32
PKG_SOURCE:=daed-src-2026.07.27-ed986932608b.tar.gz
PKG_SOURCE:=daed-src-2026.07.28-e4aa232d2993.tar.gz
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_HASH:=skip

View File

@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dnsproxy
PKG_VERSION:=0.83.0
PKG_RELEASE:=13
PKG_VERSION:=0.83.1
PKG_RELEASE:=14
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/AdguardTeam/dnsproxy/tar.gz/v$(PKG_VERSION)?

View File

@ -10,7 +10,7 @@ PKG_ARCH_kaiplus:=$(ARCH)
PKG_NAME:=kaiplus
PKG_VERSION:=1.0.5
PKG_RELEASE:=2
PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/kaiplus/
PKG_HASH:=skip

View File

@ -1,6 +1,5 @@
config kaiplus
option 'enabled' '0'
option 'data_dir' ''
option 'port' '8189'
option 'base_path' '/apps/kaiplus/'
option 'port' '8198'
option 'system_role' 'istoreos'

View File

@ -6,8 +6,7 @@ USE_PROCD=1
get_config() {
config_get_bool enabled "$1" enabled 1
config_get data_dir "$1" data_dir ""
config_get port "$1" port "8189"
config_get base_path "$1" base_path "/apps/kaiplus/"
config_get port "$1" port "8198"
config_get system_role "$1" system_role "istoreos"
}
@ -62,7 +61,6 @@ start_service() {
procd_append_param command --data-dir "$data_dir"
procd_append_param command --static-dir /usr/share/kaiplus/www
procd_append_param command --defaults-dir /usr/share/kaiplus/defaults
procd_append_param command --base-path "$base_path"
procd_append_param command --system-role "$system_role"
procd_set_param stdout 1
procd_set_param stderr 1

View File

@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkease
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=1.7.5
PKG_RELEASE:=2
PKG_RELEASE:=3
ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64)
ARCH_HEXCODE=8664
@ -23,11 +23,11 @@ ARCH_HEXCODE=aa32
else ifeq ($(ARCH),mipsel)
ARCH_HEXCODE=1b0c
endif
PKG_SOURCE_VERSION:=$(ARCH_HEXCODE)
PKG_SOURCE:=linkease-binary-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://dl.istoreos.com/binary/LinkEase/LinuxStorage/
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=http://dl.istoreos.com/binary/LinkEase/LinuxStorage/
PKG_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
PKG_BUILD_PARALLEL:=1
@ -40,7 +40,7 @@ define Package/$(PKG_NAME)
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=LinkEase - the file cloud
DEPENDS:=@(arm||x86_64||aarch64)
DEPENDS:=@(arm||x86_64||aarch64) +linkmount
PKGARCH:=all
URL:=https://www.linkease.com/
endef

6
linkease/files/linkease-config.sh Normal file → Executable file
View File

@ -1,6 +1,6 @@
#!/bin/sh
. /lib/functions.sh
source /lib/functions.sh
case "$1" in
save)
@ -40,6 +40,7 @@ case "$1" in
config_get PUB_DIR main pub_dir ""
config_get DL_DIR main dl_dir ""
config_get TMP_DIR main tmp_dir ""
# echo "$MAIN_DIR $CONF_DIR $PUB_DIR $DL_DIR $TMP_DIR"
if [ "$ROOT_DIR" = "$MAIN_DIR" ]; then
exit 0
fi
@ -82,6 +83,7 @@ case "$1" in
;;
*)
echo "Usage: $0 {save|load|local_save|local_load|status}"
echo "Usage: $0 {save|load|status}"
exit 1
esac

View File

@ -1,4 +1,3 @@
config linkease
option port '8897'
option enabled '1'
option allowPublic '0'

42
linkease/files/linkease.init Normal file → Executable file
View File

@ -3,48 +3,24 @@
START=99
USE_PROCD=1
PROG=/usr/sbin/linkease
LOCAL_API=/var/run/linkease.sock
get_config() {
config_get_bool enabled "$1" enabled 1
config_get_bool logger "$1" logger 0
config_get_bool allowPublic "$1" allowPublic 0
config_get port "$1" port 8897
}
stop_linkeaselite_runtime() {
[ -x /etc/init.d/linkeaselite ] && /etc/init.d/linkeaselite stop >/dev/null 2>&1
if uci -q get linkeaselite.@linkeaselite[0] >/dev/null 2>&1; then
uci -q set linkeaselite.@linkeaselite[0].enabled="0"
uci -q commit linkeaselite
fi
}
stop_linkeasefull_runtime() {
[ -x /etc/init.d/linkeasefull ] && /etc/init.d/linkeasefull stop >/dev/null 2>&1
if uci -q get linkeasefull.@linkeasefull[0] >/dev/null 2>&1; then
uci -q set linkeasefull.@linkeasefull[0].enabled="0"
uci -q commit linkeasefull
fi
config_get_bool enabled $1 enabled 1
config_get_bool logger $1 logger
config_get_bool allowPublic $1 allowPublic
config_get port $1 port 8897
}
start_service() {
config_load linkease
config_foreach get_config linkease
[ "$enabled" != "1" ] && return 1
[ -x "$PROG" ] || return 1
stop_linkeaselite_runtime
stop_linkeasefull_runtime
rm -f "$LOCAL_API"
[ $enabled != 1 ] && return 1
procd_open_instance
procd_set_param limits nofile="65535 65535"
procd_set_param command "$PROG"
procd_append_param command --deviceAddr ":$port" --localApi "$LOCAL_API"
[ "$allowPublic" = "1" ] && procd_append_param command --allowPublic
[ "$logger" = "1" ] && procd_set_param stderr 1
procd_set_param command /usr/sbin/linkease
[ -n "$port" ] && procd_append_param command --deviceAddr ":$port" --localApi /var/run/linkease.sock
[ "$allowPublic" == 1 ] && procd_append_param command --allowPublic
[ "$logger" == 1 ] && procd_set_param stderr 1
procd_set_param respawn
procd_close_instance
}

View File

@ -8,52 +8,23 @@
EEOF
}
if ! uci -q get linkease.@linkease[0] >/dev/null; then
uci -q add linkease linkease >/dev/null
fi
set_default() {
key="$1"
value="$2"
current="$(uci -q get "linkease.@linkease[0].$key" 2>/dev/null || true)"
[ -n "$current" ] && return 0
uci -q set "linkease.@linkease[0].$key=$value"
}
set_default enabled 1
set_default port 8897
set_default allowPublic 0
uci -q commit linkease
port="$(uci -q get linkease.@linkease[0].port 2>/dev/null || true)"
[ -n "$port" ] || port=8897
allow_public="$(uci -q get linkease.@linkease[0].allowPublic 2>/dev/null || true)"
uci -q batch <<-EOF >/dev/null
delete ucitrack.@linkease[-1]
add ucitrack linkease
set ucitrack.@linkease[-1].init=linkease
commit ucitrack
EOF
if [ "$allow_public" = "1" ]; then
uci -q batch <<-EOF >/dev/null
delete firewall.linkease
set firewall.linkease=rule
set firewall.linkease.name="linkease"
set firewall.linkease.target="ACCEPT"
set firewall.linkease.src="wan"
set firewall.linkease.proto="tcp"
set firewall.linkease.dest_port="$port"
set firewall.linkease.dest_port="8897"
commit firewall
EOF
else
uci -q batch <<-EOF >/dev/null
delete firewall.linkease
commit firewall
EOF
fi
/etc/init.d/linkease enable
/etc/init.d/linkease restart
/etc/init.d/linkease start
exit 0
exit 0

View File

@ -1,76 +0,0 @@
#
# Copyright (C) 2026 iStoreOS
#
# This is free software, licensed under the GNU General Public License v3.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=linkeasefull
PKG_SOURCE_DATE:=3.0.4
PKG_RELEASE:=1
ifeq ($(ARCH),x86_64)
LINKEASE_RUNTIME_ARCH:=amd64
PKG_HASH:=skip
else ifeq ($(ARCH),aarch64)
LINKEASE_RUNTIME_ARCH:=arm64
PKG_HASH:=skip
endif
PKG_SOURCE:=linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/linkease-desktop/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
TAR_CMD=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 $(TAR_OPTIONS)
include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=LinkEase Full - the local web desktop
DEPENDS:=@(x86_64||aarch64) +linkease +ca-bundle
URL:=https://www.linkease.com/
endef
define Package/$(PKG_NAME)/description
LinkEase Full provides the local web desktop entry for LinkEase and reuses the standard LinkEase LuCI file entry.
endef
define Package/$(PKG_NAME)/conffiles
/etc/config/linkeasefull
endef
define Package/$(PKG_NAME)/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
[ -f /etc/uci-defaults/linkeasefull ] && /etc/uci-defaults/linkeasefull && rm -f /etc/uci-defaults/linkeasefull
exit 0
fi
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/bin $(1)/usr/libexec/linkeasefull/linkmount_bin $(1)/usr/libexec/linkeasefull/scripts $(1)/etc/config $(1)/etc/init.d $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/linkease-full $(1)/usr/bin/linkease-full
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/linkremote-agent $(1)/usr/bin/linkremote-agent
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/hostlink $(1)/usr/bin/hostlink
$(INSTALL_BIN) $(PKG_BUILD_DIR)/linkmount_bin/linkmount_bin $(1)/usr/libexec/linkeasefull/linkmount_bin/linkmount_bin
$(CP) $(PKG_BUILD_DIR)/linkmount_bin/lib $(1)/usr/libexec/linkeasefull/linkmount_bin/lib
$(CP) $(PKG_BUILD_DIR)/linkmount_bin/ver.json $(1)/usr/libexec/linkeasefull/linkmount_bin/ver.json
$(CP) $(PKG_BUILD_DIR)/scripts/. $(1)/usr/libexec/linkeasefull/scripts/
$(INSTALL_CONF) ./files/linkeasefull.config $(1)/etc/config/linkeasefull
$(INSTALL_BIN) ./files/linkeasefull.init $(1)/etc/init.d/linkeasefull
$(INSTALL_BIN) ./files/linkeasefull.uci-default $(1)/etc/uci-defaults/linkeasefull
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

View File

@ -1,3 +0,0 @@
config linkeasefull
option enabled '1'
option data_root_parent ''

View File

@ -1,131 +0,0 @@
#!/bin/sh /etc/rc.common
START=100
STOP=10
USE_PROCD=1
PROG=/usr/bin/linkease-full
LINKEASE_LIBEXEC=/usr/libexec/linkeasefull
LINKEASE_FULL_PORT=19290
LINKEASE_BASE_PATH=/apps/
LINKEASE_LEGACY_ADDR=0.0.0.0:8897
is_persistent_data_root_parent() {
[ -n "$1" ] || return 1
case "$1" in
/tmp|/tmp/*|/var|/var/*|/run|/run/*|/dev|/dev/*|/proc|/proc/*|/sys|/sys/*|/rom|/rom/*|/overlay|/overlay/*) return 1 ;;
esac
[ -d "$1" ] || return 1
return 0
}
resolve_data_root_parent() {
if [ -n "$data_root_parent" ]; then
is_persistent_data_root_parent "$data_root_parent"
return $?
fi
local_home="$(uci -q get linkease.@linkease[0].local_home || true)"
if is_persistent_data_root_parent "$local_home"; then
data_root_parent="$local_home"
return 0
fi
if [ -f /etc/config/quickstart ]; then
quickstart_main_dir="$(uci -q get quickstart.main.main_dir || true)"
if [ -n "$quickstart_main_dir" ]; then
if is_persistent_data_root_parent "$quickstart_main_dir"; then
data_root_parent="$quickstart_main_dir"
return 0
fi
fi
fi
return 1
}
stop_other_linkease_runtimes() {
[ -x /etc/init.d/linkease ] && /etc/init.d/linkease stop >/dev/null 2>&1
[ -x /etc/init.d/linkeaselite ] && /etc/init.d/linkeaselite stop >/dev/null 2>&1
if uci -q get linkease.@linkease[0] >/dev/null 2>&1; then
uci -q set linkease.@linkease[0].enabled="0"
uci -q commit linkease
fi
if uci -q get linkeaselite.@linkeaselite[0] >/dev/null 2>&1; then
uci -q set linkeaselite.@linkeaselite[0].enabled="0"
uci -q commit linkeaselite
fi
}
read_config() {
section="$1"
config_get_bool enabled "$section" enabled 1
config_get data_root_parent "$section" data_root_parent ""
if ! resolve_data_root_parent; then
data_root_parent=""
return 1
fi
data_root="$data_root_parent/.linkease_data"
recycle_root="$data_root_parent/.linkease_recycle"
}
start_service() {
config_load linkeasefull
config_foreach read_config linkeasefull
[ "$enabled" = "1" ] || return 1
[ -x "$PROG" ] || return 1
if [ -z "$data_root_parent" ]; then
echo "linkeasefull: please choose a persistent disk storage path in LuCI" >&2
return 1
fi
stop_other_linkease_runtimes
mkdir -p "$data_root/users/admin" "$data_root/system" "$data_root/tmp" "$recycle_root"
mkdir -p "$data_root/apptunnel" "$data_root/mountremote" "$data_root/logs"
procd_open_instance linkeasefull
procd_set_param limits nofile="65535 65535"
procd_set_param command "$PROG"
procd_set_param env \
"SERVER_HOST=0.0.0.0" \
"SERVER_PORT=$LINKEASE_FULL_PORT" \
"SERVER_MODE=release" \
"SERVER_BASE_PATH=$LINKEASE_BASE_PATH" \
"LINKEASE_AUTH_PROVIDER=openwrt_luci" \
"LINKEASE_EDITION=nas-full" \
"KAIPLUS_ENABLED=0" \
"LINKEASE_DATA_ROOT=$data_root" \
"LINKEASE_RECYCLE_ROOT=$recycle_root" \
"LINKEASE_APPTUNNEL_INTERNAL_ADDR=127.0.0.1:19810" \
"LINKEASE_APPTUNNEL_LEGACY_ADDR=$LINKEASE_LEGACY_ADDR" \
"LINKEASE_APPTUNNEL_DATA_DIR=$data_root/apptunnel" \
"LINKEASE_APPTUNNEL_CACHE_DIR=$data_root/apptunnel/cache" \
"LINKEASE_APPTUNNEL_RUNTIME_DIR=$data_root/apptunnel/runtime" \
"LINKEASE_APPTUNNEL_LOG_DIR=$data_root/logs" \
"APPTUNNEL_MOUNTREMOTE_MODE=real" \
"APPTUNNEL_MOUNTREMOTE_LINKREMOTE_AGENT_BINARY=/usr/bin/linkremote-agent" \
"APPTUNNEL_MOUNTREMOTE_SMBD_BINARY=$LINKEASE_LIBEXEC/linkmount_bin/linkmount_bin" \
"APPTUNNEL_MOUNTREMOTE_WORK_DIR=$data_root/mountremote" \
"APPTUNNEL_MOUNTREMOTE_SOCKET_DIR=$data_root/mountremote" \
"APPTUNNEL_MOUNTREMOTE_SAMBA_DIR=$data_root/mountremote/samba" \
"APPTUNNEL_MOUNTREMOTE_STORE_PATH=$data_root/mountremote/mounts.json" \
"APPTUNNEL_MOUNTREMOTE_STARTUP_RECONCILE=true" \
"APPTUNNEL_MOUNTREMOTE_ROOT_WATCH_DIR=$data_root/mountremote/root-watch" \
"APPTUNNEL_MOUNTREMOTE_ALLOWED_MOUNT_PREFIX=$data_root_parent" \
"MOUNTREMOTE_ALLOWED_MOUNT_PREFIX=$data_root_parent" \
"LINKEASE_LINKMOUNT_BIN=$LINKEASE_LIBEXEC/linkmount_bin/linkmount_bin" \
"LINKEASE_LINKMOUNT_LIB_DIR=$LINKEASE_LIBEXEC/linkmount_bin/lib" \
"USER_DATA_PATH=$data_root/users/admin" \
"SYSTEM_DATA_PATH=$data_root/system" \
"TEMP_PATH=$data_root/tmp"
procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
service_triggers() {
procd_add_reload_trigger "linkeasefull"
}

View File

@ -1,36 +0,0 @@
#!/bin/sh
[ ! -f "/usr/share/ucitrack/luci-app-linkeasefull.json" ] && {
cat > /usr/share/ucitrack/luci-app-linkeasefull.json << EEOF
{
"config": "linkeasefull",
"init": "linkeasefull"
}
EEOF
}
if ! uci -q get linkeasefull.@linkeasefull[0] >/dev/null; then
uci -q add linkeasefull linkeasefull >/dev/null
fi
set_default() {
key="$1"
value="$2"
current="$(uci -q get "linkeasefull.@linkeasefull[0].$key" 2>/dev/null || true)"
[ -n "$current" ] && return 0
uci -q set "linkeasefull.@linkeasefull[0].$key=$value"
}
set_default enabled 1
uci -q commit linkeasefull
uci -q batch <<-EOF >/dev/null
delete ucitrack.@linkeasefull[-1]
add ucitrack linkeasefull
set ucitrack.@linkeasefull[-1].init=linkeasefull
commit ucitrack
EOF
/etc/init.d/linkeasefull enable
/etc/init.d/linkeasefull restart
exit 0

View File

@ -1,75 +0,0 @@
#
# Copyright (C) 2015-2016 OpenWrt.org
# Copyright (C) 2026 LinkEaseLite Contributors
#
# This is free software, licensed under the GNU General Public License v3.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=linkeaselite
PKG_SOURCE_DATE:=3.0.0
PKG_RELEASE:=1
PKG_SOURCE:=linkeaselite-binary-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/linkeaselite-v$(PKG_SOURCE_DATE)/
PKG_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
TAR_CMD=$(HOST_TAR) -C $(PKG_BUILD_DIR) $(TAR_OPTIONS)
include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=LinkEaseLite - the file cloud
DEPENDS:=@(arm||x86_64||aarch64) +ca-bundle
URL:=https://www.linkease.com/
endef
define Package/$(PKG_NAME)/description
LinkEaseLite is a lightweight LinkEase runtime for small-memory OpenWrt devices.
endef
define Package/$(PKG_NAME)/conffiles
/etc/config/linkeaselite
endef
define Package/$(PKG_NAME)/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
[ -f /etc/uci-defaults/linkeaselite ] && /etc/uci-defaults/linkeaselite && rm -f /etc/uci-defaults/linkeaselite
exit 0
fi
endef
define Package/$(PKG_NAME)/postrm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
uci -q delete firewall.linkeaselite
uci -q commit firewall
/etc/init.d/firewall reload
fi
exit 0
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/linkease-lite.$(ARCH) $(1)/usr/sbin/linkease-lite
$(INSTALL_BIN) ./files/linkeaselite-config.sh $(1)/usr/sbin/linkeaselite-config.sh
$(INSTALL_CONF) ./files/linkeaselite.config $(1)/etc/config/linkeaselite
$(INSTALL_BIN) ./files/linkeaselite.init $(1)/etc/init.d/linkeaselite
$(INSTALL_BIN) ./files/linkeaselite.uci-default $(1)/etc/uci-defaults/linkeaselite
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

View File

@ -1,78 +0,0 @@
#!/bin/sh
. /lib/functions.sh
case "$1" in
save)
if [ -n "$2" ]; then
uci set "linkeaselite.@linkeaselite[0].preconfig=$2"
uci commit linkeaselite
fi
;;
load)
data="`uci -q get linkeaselite.@linkeaselite[0].preconfig`"
if [ -z "${data}" ]; then
echo "nil"
else
echo "${data}"
fi
;;
local_save)
if [ -n "$2" ]; then
uci set "linkeaselite.@linkeaselite[0].local_home=$2"
uci commit linkeaselite
ROOT_DIR="$2"
if [ -f "/etc/config/quickstart" ]; then
config_load quickstart
config_get MAIN_DIR main main_dir ""
config_get CONF_DIR main conf_dir ""
config_get PUB_DIR main pub_dir ""
config_get DL_DIR main dl_dir ""
config_get TMP_DIR main tmp_dir ""
[ "$ROOT_DIR" = "$MAIN_DIR" ] && exit 0
uci set "quickstart.main.main_dir=$ROOT_DIR"
if [ -z "$CONF_DIR" ] || [ "$CONF_DIR" = "$MAIN_DIR/Configs" ]; then
uci set "quickstart.main.conf_dir=$ROOT_DIR/Configs"
fi
if [ -z "$PUB_DIR" ] || [ "$PUB_DIR" = "$MAIN_DIR/Public" ]; then
uci set "quickstart.main.pub_dir=$ROOT_DIR/Public"
fi
if [ -z "$DL_DIR" ] || [ "$DL_DIR" = "$MAIN_DIR/Public/Downloads" ]; then
uci set "quickstart.main.dl_dir=$ROOT_DIR/Public/Downloads"
fi
if [ -z "$TMP_DIR" ] || [ "$TMP_DIR" = "$MAIN_DIR/Caches" ]; then
uci set "quickstart.main.tmp_dir=$ROOT_DIR/Caches"
fi
uci commit quickstart
fi
fi
;;
local_load)
if [ -f "/etc/config/quickstart" ]; then
data="`uci -q get quickstart.main.main_dir`"
fi
if [ -z "$data" ]; then
data="`uci -q get linkeaselite.@linkeaselite[0].local_home`"
fi
if [ -z "${data}" ]; then
echo "nil"
else
echo "${data}"
fi
;;
status)
if pidof linkease-lite >/dev/null 2>&1; then
echo "running"
else
echo "stopped"
fi
;;
*)
echo "Usage: $0 {save|load|local_save|local_load|status}"
exit 1
esac

View File

@ -1,4 +0,0 @@
config linkeaselite
option enabled '1'
option port '8897'
option allowPublic '0'

View File

@ -1,68 +0,0 @@
#!/bin/sh /etc/rc.common
START=99
STOP=10
USE_PROCD=1
PROG=/usr/sbin/linkease-lite
LOCAL_API=/var/run/linkeaselite.sock
read_config() {
section="$1"
config_get_bool enabled "$section" enabled 1
config_get port "$section" port 8897
config_get_bool allowPublic "$section" allowPublic 0
}
sync_firewall() {
uci -q delete firewall.linkeaselite
if [ "$allowPublic" = "1" ]; then
uci -q set firewall.linkeaselite=rule
uci -q set firewall.linkeaselite.name="linkeaselite"
uci -q set firewall.linkeaselite.target="ACCEPT"
uci -q set firewall.linkeaselite.src="wan"
uci -q set firewall.linkeaselite.proto="tcp"
uci -q set firewall.linkeaselite.dest_port="$port"
fi
uci -q commit firewall
/etc/init.d/firewall reload
}
stop_linkease_runtimes() {
[ -x /etc/init.d/linkeasefull ] && /etc/init.d/linkeasefull stop >/dev/null 2>&1
[ -x /etc/init.d/linkease ] && /etc/init.d/linkease stop >/dev/null 2>&1
if uci -q get linkease.@linkease[0] >/dev/null 2>&1; then
uci -q set linkease.@linkease[0].enabled="0"
uci -q commit linkease
fi
if uci -q get linkeasefull.@linkeasefull[0] >/dev/null 2>&1; then
uci -q set linkeasefull.@linkeasefull[0].enabled="0"
uci -q commit linkeasefull
fi
}
start_service() {
config_load linkeaselite
config_foreach read_config linkeaselite
sync_firewall
[ "$enabled" = "1" ] || return 1
[ -x "$PROG" ] || return 1
stop_linkease_runtimes
rm -f "$LOCAL_API"
procd_open_instance linkeaselite
procd_set_param limits nofile="65535 65535"
procd_set_param command "$PROG"
procd_append_param command --deviceAddr ":$port" --localApi "$LOCAL_API"
[ "$allowPublic" = "1" ] && procd_append_param command --allowPublic
procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
service_triggers() {
procd_add_reload_trigger "linkeaselite"
}

View File

@ -1,60 +0,0 @@
#!/bin/sh
[ ! -f "/usr/share/ucitrack/luci-app-linkeaselite.json" ] && {
cat > /usr/share/ucitrack/luci-app-linkeaselite.json << EEOF
{
"config": "linkeaselite",
"init": "linkeaselite"
}
EEOF
}
if ! uci -q get linkeaselite.@linkeaselite[0] >/dev/null; then
uci -q add linkeaselite linkeaselite >/dev/null
fi
set_default() {
key="$1"
value="$2"
current="$(uci -q get "linkeaselite.@linkeaselite[0].$key" 2>/dev/null || true)"
[ -n "$current" ] && return 0
uci -q set "linkeaselite.@linkeaselite[0].$key=$value"
}
set_default enabled 1
set_default port 8897
set_default allowPublic 0
uci -q commit linkeaselite
port="$(uci -q get linkeaselite.@linkeaselite[0].port 2>/dev/null || true)"
[ -n "$port" ] || port=8897
allow_public="$(uci -q get linkeaselite.@linkeaselite[0].allowPublic 2>/dev/null || true)"
uci -q batch <<-EOF >/dev/null
delete ucitrack.@linkeaselite[-1]
add ucitrack linkeaselite
set ucitrack.@linkeaselite[-1].init=linkeaselite
commit ucitrack
EOF
if [ "$allow_public" = "1" ]; then
uci -q batch <<-EOF >/dev/null
delete firewall.linkeaselite
set firewall.linkeaselite=rule
set firewall.linkeaselite.name="linkeaselite"
set firewall.linkeaselite.target="ACCEPT"
set firewall.linkeaselite.src="wan"
set firewall.linkeaselite.proto="tcp"
set firewall.linkeaselite.dest_port="$port"
commit firewall
EOF
else
uci -q batch <<-EOF >/dev/null
delete firewall.linkeaselite
commit firewall
EOF
fi
/etc/init.d/linkeaselite enable
/etc/init.d/linkeaselite restart
exit 0

63
linkmount/Makefile Normal file
View File

@ -0,0 +1,63 @@
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkmount
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=1.0.3
PKG_RELEASE:=3
ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64)
ARCH_HEXCODE=8664
else ifeq ($(ARCH),aarch64)
ARCH_HEXCODE=aa64
else ifeq ($(ARCH),arm)
ARCH_HEXCODE=aa32
else ifeq ($(ARCH),mipsel)
ARCH_HEXCODE=1b0c
endif
PKG_SOURCE_VERSION:=$(ARCH_HEXCODE)
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://dl.istoreos.com/binary/LinkEase/AutoUpgrade/linkmount/
PKG_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=LinkMount - the file cloud
DEPENDS:=@(arm||x86_64||aarch64)
PKGARCH:=all
URL:=https://www.linkease.com/
endef
define Package/$(PKG_NAME)/description
LinkMount is used by LinkEase
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/sbin/linkmount
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_ARCH_LINKEASE)/bin/linkmount_bin $(1)/usr/sbin/linkmount/linkmount_bin
$(CP) $(PKG_BUILD_DIR)/$(PKG_ARCH_LINKEASE)/bin/lib $(1)/usr/sbin/linkmount/lib
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

View File

@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=KaiPlus
PKG_VERSION:=1.0.0
PKG_RELEASE:=2
PKG_RELEASE:=3
LUCI_DEPENDS:=+kaiplus +luci-compat
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0

View File

@ -15,12 +15,10 @@ end
function kaiplus_status()
local sys = require "luci.sys"
local uci = require "luci.model.uci".cursor()
local port = uci:get_first("kaiplus", "kaiplus", "port", "8189")
local base_path = uci:get_first("kaiplus", "kaiplus", "base_path", "/apps/kaiplus/")
local port = uci:get_first("kaiplus", "kaiplus", "port", "8198")
local status = {
running = (sys.call("pidof kaiplus_bin >/dev/null") == 0),
port = port,
base_path = base_path
port = port
}
luci.http.prepare_content("application/json")
luci.http.write_json(status)

View File

@ -5,10 +5,7 @@ m = Map("kaiplus", translate("KaiPlus"), translate("KaiPlus is an AI workspace a
m:section(SimpleSection).template = "kaiplus/kaiplus_status"
m.on_after_commit = function(self)
sys.call("/etc/init.d/kaiplus restart >/dev/null 2>&1")
if sys.call("[ -x /etc/init.d/linkease ]") == 0 then
sys.call("/etc/init.d/linkease restart >/dev/null 2>&1 &")
end
sys.call("/etc/init.d/kaiplus restart >/dev/null 2>&1 &")
end
s = m:section(TypedSection, "kaiplus", translate("Global settings"))
@ -32,7 +29,7 @@ end
data_dir.default = default_path
local port = s:option(Value, "port", translate("Web port"))
port.default = "8189"
port.default = "8198"
port.rmempty = false
port.datatype = "port"
port.description = translate("Port for the KaiPlus web service.")

View File

@ -6,15 +6,8 @@ XHR.poll(5, '<%=url("admin/services/kaiplus_status")%>', null, function(x, st) {
el.innerHTML = '<br/><em style=\"color:red\"><%:The KaiPlus service is not running.%></em>';
}
if (st.running) {
var basePath = st.base_path || "/apps/kaiplus/";
if (basePath.charAt(0) !== "/") {
basePath = "/" + basePath;
}
if (basePath.charAt(basePath.length - 1) !== "/") {
basePath = basePath + "/";
}
el.innerHTML = '<br/><em style=\"color:green\"><%:The KaiPlus service is running.%></em>'
+ "<br/><br/><input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Click to open KaiPlus%> \" onclick=\"window.open('http://' + window.location.hostname + ':' + st.port + basePath)\"/>";
+ "<br/><br/><input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Click to open KaiPlus%> \" onclick=\"window.open('http://" + window.location.hostname + ":" + st.port + "/')\"/>";
}
}
});

View File

@ -6,11 +6,11 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for linkease
LUCI_DEPENDS:=+luci-lib-linkeasefile
LUCI_DEPENDS:=+linkease
LUCI_PKGARCH:=all
PKG_VERSION:=2.1.70-r4
PKG_VERSION:=2.1.70-r3
# PKG_RELEASE MUST be empty for luci.mk
PKG_RELEASE:=2
PKG_RELEASE:=3
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -9,6 +9,7 @@ function index()
entry({"admin", "services", "linkease_status"}, call("linkease_status"))
entry({"admin", "services", "linkease", "file"}, call("linkease_file_template")).leaf = true
end
@ -26,3 +27,13 @@ function linkease_status()
luci.http.write_json(status)
end
function get_params(name)
local data = {
prefix=luci.dispatcher.build_url(unpack({"admin", "services", "linkease", name})),
}
return data
end
function linkease_file_template()
luci.template.render("linkease/file", get_params("file"))
end

View File

@ -7,27 +7,13 @@ local ltn12 = require "luci.ltn12"
local table = require "table"
local util = require "luci.util"
module("luci.controller.linkease_file", package.seeall)
module("luci.controller.linkease_backend", package.seeall)
local BLOCKSIZE = 2048
local LINKEASE_UNIX = "/var/run/linkease.sock"
function index()
entry({"linkease"}, call("linkease_backend")).leaf=true
local e = entry({"admin", "services", "linkease", "file"}, call("linkease_file_template"))
e.leaf = true
e.dependent = false
end
function get_params(name)
local data = {
prefix=luci.dispatcher.build_url(unpack({"admin", "services", "linkease", name})),
}
return data
end
function linkease_file_template()
luci.template.render("linkease/file", get_params("file"))
end
local function sink_socket(sock, io_err)

View File

@ -1,18 +0,0 @@
#
# Copyright (C) 2026 iStoreOS
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for linkeasefull
LUCI_DEPENDS:=+linkeasefull +luci-lib-linkeasefile
LUCI_PKGARCH:=all
PKG_VERSION:=1.0.1
PKG_RELEASE:=1
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -1,89 +0,0 @@
module("luci.controller.linkeasefull", package.seeall)
function index()
if not nixio.fs.access("/etc/config/linkeasefull") then
return
end
entry({"admin", "services", "linkeasefull"}, cbi("linkeasefull"), _("LinkEase Full"), 21).dependent = true
entry({"admin", "services", "linkeasefull_status"}, call("linkeasefull_status"))
entry({"admin", "services", "linkeasefull", "auth"}, call("linkeasefull_auth")).leaf = true
end
local function uhttpd_has_apps_proxy_prefix()
local uci = require "luci.model.uci".cursor()
local mappings = uci:get_list("uhttpd", "main", "proxy_prefix") or {}
for _, mapping in ipairs(mappings) do
if mapping == "/apps=http://127.0.0.1:19290" then
return true
end
end
return false
end
function linkeasefull_status()
local sys = require "luci.sys"
local uci = require "luci.model.uci".cursor()
local status = {
running = (sys.call("pidof linkease-full >/dev/null") == 0),
full_port = 19290,
legacy_port = 8897,
base_path = "/apps/",
lan_ip = uci:get("network", "lan", "ipaddr") or "",
proxy_prefix_enabled = uhttpd_has_apps_proxy_prefix()
}
luci.http.prepare_content("application/json")
luci.http.write_json(status)
end
local function retrieve_luci_session()
local http = require "luci.http"
local util = require "luci.util"
for _, key in ipairs({"sysauth_https", "sysauth_http", "sysauth"}) do
local sid = http.getcookie(key)
if sid and sid ~= "" then
local sdat = util.ubus("session", "get", { ubus_rpc_session = sid })
if sdat and type(sdat.values) == "table" then
return sid
end
end
end
return nil
end
local function valid_apps_return(value)
if not value or value == "" then
return false
end
if value == "/apps" then
return true
end
local prefix = value:sub(1, 6)
return prefix == "/apps/" or prefix == "/apps?" or prefix == "/apps#"
end
local function valid_cookie_value(value)
return value and value:match("^[A-Za-z0-9._%-_]+$") ~= nil
end
function linkeasefull_auth()
local http = require "luci.http"
local sid = retrieve_luci_session()
if not valid_cookie_value(sid) then
http.status(403, "Forbidden")
return
end
local target = http.formvalue("return") or "/apps/"
if not valid_apps_return(target) then
target = "/apps/"
end
http.header("Set-Cookie", "linkease_openwrt_sid=" .. sid .. "; Path=/apps; HttpOnly; SameSite=Lax")
http.redirect(target)
end

View File

@ -1,86 +0,0 @@
local fs = require "nixio.fs"
local m, s
local function starts_with(value, prefix)
return value:sub(1, #prefix) == prefix
end
local function decode_mount_path(value)
return value:gsub("\\040", " "):gsub("\\011", "\t"):gsub("\\012", "\n"):gsub("\\134", "\\")
end
local function is_persistent_mount(path, fstype)
if path == "" or path == "/" then
return false
end
if starts_with(path, "/tmp") or starts_with(path, "/var") or starts_with(path, "/run") then
return false
end
if starts_with(path, "/dev") or starts_with(path, "/proc") or starts_with(path, "/sys") then
return false
end
if starts_with(path, "/rom") or starts_with(path, "/overlay") then
return false
end
if fstype == "tmpfs" or fstype == "devtmpfs" or fstype == "overlay" or fstype == "squashfs" then
return false
end
return true
end
local function storage_mounts()
local mounts = {}
for line in io.lines("/proc/mounts") do
local device, path, fstype = line:match("^(%S+)%s+(%S+)%s+(%S+)")
path = path and decode_mount_path(path) or ""
if device and fstype and is_persistent_mount(path, fstype) then
mounts[#mounts + 1] = {
path = path,
label = string.format("%s (%s)", path, fstype)
}
end
end
table.sort(mounts, function(a, b) return a.path < b.path end)
return mounts
end
m = Map("linkeasefull", translate("LinkEase Full"), translate("LinkEase Full uses fixed entries at port 19290 /apps/ and legacy port 8897."))
m:section(SimpleSection).template = "linkeasefull_status"
s = m:section(TypedSection, "linkeasefull", translate("Storage"))
s.addremove = false
s.anonymous = true
s:option(Flag, "enabled", translate("Enable")).rmempty = false
local data = s:option(ListValue, "data_root_parent", translate("Storage path"), translate("Choose a mounted persistent disk. /tmp is not allowed."))
data.rmempty = false
local current = m.uci:get_first("linkeasefull", "linkeasefull", "data_root_parent") or ""
local has_current = false
for _, mount in ipairs(storage_mounts()) do
data:value(mount.path, mount.label)
if mount.path == current then
has_current = true
end
end
if current ~= "" and not has_current and fs.stat(current, "type") == "dir" and is_persistent_mount(current, "") then
data:value(current, current)
end
function data.validate(self, value)
if value == nil or value == "" then
return nil, translate("Please choose a mounted persistent disk.")
end
if not is_persistent_mount(value, "") then
return nil, translate("/tmp and system paths cannot be used for LinkEase Full storage.")
end
if fs.stat(value, "type") ~= "dir" then
return nil, translate("The selected storage path does not exist.")
end
return value
end
return m

View File

@ -1,34 +0,0 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=url("admin/services/linkeasefull_status")%>', null,
function(x, st)
{
var tb = document.getElementById('linkeasefull_status');
if (st && tb)
{
var lanHost = st.lan_ip || window.location.hostname;
var fullUrl = st.proxy_prefix_enabled
? window.location.protocol + "//" + window.location.host + "/apps/"
: "http://" + lanHost + ":" + (st.full_port || 19290) + "/apps/";
var legacyUrl = "http://" + lanHost + ":" + (st.legacy_port || 8897) + "/";
var overallStatus = st.running
? '<br/><em style=\"color:green\"><%:The LinkEase Full service is running.%></em>'
: '<br/><em style=\"color:red\"><%:The LinkEase Full service is not running.%></em>';
tb.innerHTML = overallStatus;
if (st.running)
{
tb.innerHTML = tb.innerHTML
+ "<br/><br/><input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Open Full Entry%> \" onclick=\"window.open('" + fullUrl + "')\"/>"
+ " <input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Open Standard Entry%> \" onclick=\"window.open('" + legacyUrl + "')\"/>";
}
}
}
);
//]]></script>
<fieldset class="cbi-section">
<legend><%:LinkEase Full Status%></legend>
<p id="linkeasefull_status">
<em><%:Collecting data...%></em>
</p>
</fieldset>

View File

@ -1,35 +0,0 @@
msgid "LinkEase Full"
msgstr "易有云完整版"
msgid "LinkEase Full provides the local web desktop entry for LinkEase."
msgstr "易有云完整版提供本地 Web 桌面入口。"
msgid "Global settings"
msgstr "全局设置"
msgid "Enable"
msgstr "启用"
msgid "Port"
msgstr "端口"
msgid "Base Path"
msgstr "基础路径"
msgid "Data Root Parent"
msgstr "数据根目录父路径"
msgid "The LinkEase Full service is running."
msgstr "易有云完整版服务已启动"
msgid "The LinkEase Full service is not running."
msgstr "易有云完整版服务未启动"
msgid "Click to open LinkEase Full"
msgstr "点击打开易有云完整版"
msgid "LinkEase Full Status"
msgstr "易有云完整版服务状态"
msgid "Collecting data..."
msgstr "收集数据..."

View File

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

View File

@ -1,4 +0,0 @@
#!/bin/sh
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
exit 0

View File

@ -1,18 +0,0 @@
# Copyright (C) 2016 Openwrt.org
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for linkeaselite
LUCI_DEPENDS:=+linkeaselite
LUCI_PKGARCH:=all
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -1,31 +0,0 @@
module("luci.controller.linkeaselite", package.seeall)
function index()
if not nixio.fs.access("/etc/config/linkeaselite") then
return
end
local page = entry({"admin", "services", "linkeaselite"}, firstchild(), _("LinkEaseLite"), 20)
page.dependent = true
entry({"admin", "services", "linkeaselite", "config"}, cbi("linkeaselite"), _("Settings"), 10).leaf = true
entry({"admin", "services", "linkeaselite_status"}, call("linkeaselite_status"))
entry({"admin", "services", "linkeaselite", "file"}, call("linkeaselite_file_removed")).leaf = true
end
function linkeaselite_status()
local sys = require "luci.sys"
local uci = require "luci.model.uci".cursor()
local port = tonumber(uci:get_first("linkeaselite", "linkeaselite", "port"))
local status = {
running = (sys.call("pidof linkease-lite >/dev/null") == 0),
port = (port or 8897)
}
luci.http.prepare_content("application/json")
luci.http.write_json(status)
end
function linkeaselite_file_removed()
luci.http.status(404, "Not Found")
end

View File

@ -1,24 +0,0 @@
local m, s
local sys = require "luci.sys"
m = Map("linkeaselite", translate("LinkEaseLite"), translate("LinkEaseLite is an efficient data transfer tool for small-memory devices."))
m:section(SimpleSection).template = "linkeaselite_status"
m.on_after_commit = function(self)
sys.call("/etc/init.d/linkeaselite restart >/dev/null 2>&1")
end
s = m:section(TypedSection, "linkeaselite", translate("Global settings"))
s.addremove = false
s.anonymous = true
s:option(Flag, "enabled", translate("Enable")).rmempty = false
local port = s:option(Value, "port", translate("Port"))
port.rmempty = false
port.datatype = "port"
port.default = "8897"
s:option(Flag, "allowPublic", translate("AllowPublic"), translate("Allowing access via public IP addresses can lead to insufficient security.")).rmempty = false
return m

View File

@ -1,42 +0,0 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=url("admin/services/linkeaselite_status")%>', null,
function(x, st)
{
var tb = document.getElementById('linkeaselite_status');
if (st && tb)
{
var legacyUrl = "http://" + window.location.hostname + ":" + (st.port || 8897) + "/";
var overallStatus = st.running
? '<br/><em style=\"color:green\"><%:The LinkEaseLite service is running.%></em>'
: '<br/><em style=\"color:red\"><%:The LinkEaseLite service is not running.%></em>';
tb.innerHTML = overallStatus;
function appendBreak()
{
tb.appendChild(document.createElement("br"));
}
function appendButton(value, action)
{
var button = document.createElement("input");
button.className = "btn cbi-button cbi-button-apply";
button.type = "button";
button.value = value;
button.onclick = action;
tb.appendChild(button);
}
appendBreak();
appendBreak();
appendButton(" <%:Click to open LinkEaseLite%> ", function() { window.open(legacyUrl); });
}
}
);
//]]></script>
<fieldset class="cbi-section">
<legend><%:LinkEaseLite Status%></legend>
<p id="linkeaselite_status">
<em><%:Collecting data...%></em>
</p>
</fieldset>

View File

@ -1,35 +0,0 @@
msgid "LinkEaseLite"
msgstr "易有云Lite"
msgid "LinkEaseLite is an efficient data transfer tool for small-memory devices."
msgstr "易有云Lite是面向小内存设备的轻量数据传输工具。"
msgid "Global settings"
msgstr "全局设置"
msgid "Enable"
msgstr "启用"
msgid "Port"
msgstr "端口"
msgid "AllowPublic"
msgstr "公网访问"
msgid "Allowing access via public IP addresses can lead to insufficient security."
msgstr "允许公网IP访问会导致不够安全。"
msgid "Click to open LinkEaseLite"
msgstr "点击打开易有云Lite"
msgid "The LinkEaseLite service is running."
msgstr "易有云Lite服务已启动"
msgid "The LinkEaseLite service is not running."
msgstr "易有云Lite服务未启动"
msgid "LinkEaseLite Status"
msgstr "易有云Lite服务状态"
msgid "Collecting data..."
msgstr "收集数据..."

View File

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

View File

@ -1,4 +0,0 @@
#!/bin/sh
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
exit 0

View File

@ -1,16 +0,0 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for linkease file
LUCI_DEPENDS:=+linkease
LUCI_PKGARCH:=all
PKG_VERSION:=2.1.70-r3
# PKG_RELEASE MUST be empty for luci.mk
PKG_RELEASE:=1
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -1,4 +0,0 @@
#!/bin/sh
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
exit 0

View File

@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=Xray-core
PKG_VERSION:=26.7.11
PKG_RELEASE:=20
PKG_VERSION:=26.7.28
PKG_RELEASE:=21
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/XTLS/Xray-core/tar.gz/v$(PKG_VERSION)?