From fbcfd96e1b1671635e4b5534e7c6836cb0b17fc4 Mon Sep 17 00:00:00 2001 From: Ray Wang Date: Wed, 1 Jan 2025 20:39:32 +0800 Subject: [PATCH] fsh: add new package Fsh helps you access local shell and TCP services behind a NAT or firewall. More details: https://github.com/heiher/hev-fsh Signed-off-by: Ray Wang --- net/fsh/Makefile | 41 +++++++++++++++++++++++++++++++ net/fsh/files/fsh.config | 12 +++++++++ net/fsh/files/fshc.init | 50 +++++++++++++++++++++++++++++++++++++ net/fsh/files/fshs.init | 53 ++++++++++++++++++++++++++++++++++++++++ net/fsh/test.sh | 3 +++ 5 files changed, 159 insertions(+) create mode 100644 net/fsh/Makefile create mode 100644 net/fsh/files/fsh.config create mode 100644 net/fsh/files/fshc.init create mode 100644 net/fsh/files/fshs.init create mode 100755 net/fsh/test.sh diff --git a/net/fsh/Makefile b/net/fsh/Makefile new file mode 100644 index 0000000000..dbfd01512a --- /dev/null +++ b/net/fsh/Makefile @@ -0,0 +1,41 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fsh +PKG_VERSION:=4.8.7 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=https://github.com/heiher/hev-fsh/releases/download/$(PKG_VERSION) +PKG_HASH:=4b89857915fd6c9a39c66203ac7098d4fa5ff1bef6c2f7467f4ea617a0933ea2 + +PKG_MAINTAINER:=Ray Wang +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=License + +PKG_BUILD_FLAGS:=no-mips16 +PKG_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/fsh + SECTION:=net + CATEGORY:=Network + TITLE:=Fsh helps you access local shell and TCP services behind a NAT or firewall + URL:=https://github.com/heiher/hev-fsh +endef + +define Package/fsh/conffiles +/etc/config/fsh +endef + +define Package/fsh/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/hev-fsh $(1)/usr/bin/fsh + $(INSTALL_DIR) $(1)/etc/config/ + $(INSTALL_CONF) ./files/fsh.config $(1)/etc/config/fsh + $(INSTALL_DIR) $(1)/etc/init.d/ + $(INSTALL_BIN) ./files/fshs.init $(1)/etc/init.d/fshs + $(INSTALL_BIN) ./files/fshc.init $(1)/etc/init.d/fshc +endef + +$(eval $(call BuildPackage,fsh)) diff --git a/net/fsh/files/fsh.config b/net/fsh/files/fsh.config new file mode 100644 index 0000000000..f6ea9b1b09 --- /dev/null +++ b/net/fsh/files/fsh.config @@ -0,0 +1,12 @@ +config fshs + option enable '0' + option addr '[::]' + option port '6339' + option tokens '/etc/fsh' + +config fshc + option enable '0' + option addr '127.0.0.1' + option port '6339' + option token '' + option params '-f -p -w 127.0.0.1:22' diff --git a/net/fsh/files/fshc.init b/net/fsh/files/fshc.init new file mode 100644 index 0000000000..37c0cbc8f8 --- /dev/null +++ b/net/fsh/files/fshc.init @@ -0,0 +1,50 @@ +#!/bin/sh /etc/rc.common + +START=99 +USE_PROCD=1 + +NAME=fsh +PROG=/usr/bin/$NAME + +validate_section_fshc() { + uci_load_validate "${NAME}" fshc "$1" "$2" \ + 'enable:bool:0' \ + 'addr:string' \ + 'port:port' \ + 'token:string' \ + 'params:string' +} + +fshc_instance() { + [ "$2" = 0 ] || { + echo "validation failed" + return 1 + } + + [ "${enable}" = 0 ] && return 1 + + procd_open_instance "$1" + + procd_set_param command "$PROG" + procd_append_param command ${params} + if [ -z "$token" ]; then + procd_append_param command "$addr":"$port" + else + procd_append_param command "$addr":"$port"/"$token" + fi + + procd_close_instance +} + +start_service() { + config_load "${NAME}" + config_foreach validate_section_fshc fshc fshc_instance +} + +service_triggers() { + procd_add_reload_trigger "$NAME" + + procd_open_validate + validate_section_fshc + procd_close_validate +} diff --git a/net/fsh/files/fshs.init b/net/fsh/files/fshs.init new file mode 100644 index 0000000000..17875f6568 --- /dev/null +++ b/net/fsh/files/fshs.init @@ -0,0 +1,53 @@ +#!/bin/sh /etc/rc.common + +START=99 +USE_PROCD=1 + +NAME=fsh +PROG=/usr/bin/$NAME + +validate_section_fshs() { + uci_load_validate "${NAME}" fshs "$1" "$2" \ + 'enable:bool:0' \ + 'addr:string' \ + 'port:port' \ + 'tokens:string' +} + +fshs_instance() { + [ "$2" = 0 ] || { + echo "validation failed" + return 1 + } + + [ "${enable}" = 0 ] && return 1 + + procd_open_instance "$1" + + procd_set_param command "$PROG" "-s" + [ -n "$tokens" ] && [ -e "$tokens" ] && { + procd_append_param command -a "$tokens" + } + procd_append_param command "$addr":"$port" + + procd_set_param limits core="unlimited" + procd_set_param limits nofile="1000000 1000000" + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_set_param respawn + + procd_close_instance +} + +start_service() { + config_load "${NAME}" + config_foreach validate_section_fshs fshs fshs_instance +} + +service_triggers() { + procd_add_reload_trigger "$NAME" + + procd_open_validate + validate_section_fshs + procd_close_validate +} diff --git a/net/fsh/test.sh b/net/fsh/test.sh new file mode 100755 index 0000000000..9ae615ccdc --- /dev/null +++ b/net/fsh/test.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +"$1" 2>&1 | grep "$2" -- 2.30.2