mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 23:02:51 +08:00
🚀 Sync 2026-07-28 20:39:07
This commit is contained in:
1 parent
119e865e09
commit
0e29e5afc5
70 files changed
+121
-1101
No files matched your search
@@ -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))
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
+2
-2
@@ -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)?
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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'
|
||||
@@ -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
|
||||
|
||||
+6
-6
@@ -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
|
||||
|
||||
Regular → Executable
+4
-2
@@ -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
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
config linkease
|
||||
option port '8897'
|
||||
option enabled '1'
|
||||
option allowPublic '0'
|
||||
Regular → Executable
+9
-33
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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)))
|
||||
@@ -1,3 +0,0 @@
|
||||
config linkeasefull
|
||||
option enabled '1'
|
||||
option data_root_parent ''
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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)))
|
||||
@@ -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
|
||||
@@ -1,4 +0,0 @@
|
||||
config linkeaselite
|
||||
option enabled '1'
|
||||
option port '8897'
|
||||
option allowPublic '0'
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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)))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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 + "/')\"/>";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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
|
||||
+1
-15
@@ -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)
|
||||
File renamed without changes.
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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 "收集数据..."
|
||||
@@ -1 +0,0 @@
|
||||
zh-cn
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
|
||||
exit 0
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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 "收集数据..."
|
||||
@@ -1 +0,0 @@
|
||||
zh-cn
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
|
||||
exit 0
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
|
||||
exit 0
|
||||
+2
-2
@@ -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)?
|
||||
|
||||
Reference in new issue
Block a user