Skip to content

Commit 389bfd5

Browse files
authored
Add files via upload
更新frpc核心,支持新版本的webui功能
1 parent 7390223 commit 389bfd5

13 files changed

Lines changed: 211 additions & 156 deletions

File tree

app/ui/config

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
".url": {
3+
"mefrp.Application": {
4+
"title": "ME Frp 内网穿透",
5+
"icon": "images/icon_{0}.png",
6+
"type": "iframe",
7+
"protocol": "http",
8+
"port": "1201",
9+
"url": "/",
10+
"allUsers": false
11+
}
12+
}
13+
}

app/ui/images/ICON.PNG

1.53 KB
Loading

app/ui/images/icon_64.png

4.51 KB
Loading

app/www/mefrpc

16.3 MB
Binary file not shown.

cmd/config_callback

Lines changed: 2 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,5 @@
11
#!/bin/bash
22

3-
### This script is called after the user changes environment variables in the application setting page.
3+
### This script is called after the user change environment variables in application setting page.
44

5-
# 设置日志文件
6-
LOG_FILE="${TRIM_APPDEST}/config_callback.log"
7-
echo "=== $(date): config_callback started (Merged Logic) ===" >> "$LOG_FILE"
8-
9-
# 获取 start_cmd 值
10-
START_CMD=""
11-
12-
# 1. 尝试从环境变量获取 (fnOS 会将向导字段作为环境变量传入)
13-
if [ -n "$start_cmd" ]; then
14-
START_CMD="$start_cmd"
15-
echo "Got start_cmd from environment: $START_CMD" >> "$LOG_FILE"
16-
fi
17-
18-
# 2. 如果环境变量为空,尝试从配置文件读取作为回退
19-
if [ -z "$START_CMD" ] && [ -n "$TRIM_APP_CONFIG_DIR" ]; then
20-
ENV_FILE="$TRIM_APP_CONFIG_DIR/environment"
21-
if [ -f "$ENV_FILE" ]; then
22-
START_CMD=$(grep "^start_cmd=" "$ENV_FILE" | cut -d'=' -f2- | tr -d '"')
23-
echo "Got start_cmd from config file: $START_CMD" >> "$LOG_FILE"
24-
fi
25-
fi
26-
27-
# 如果获取到了启动命令,执行更新流程
28-
if [ -n "$START_CMD" ]; then
29-
COMPOSE_FILE="${TRIM_APPDEST}/docker/docker-compose.yaml"
30-
31-
# 步骤 1: 更新启动命令 (生成新的 docker-compose.yaml)
32-
echo "Step 1: Updating docker-compose.yaml with new command..." >> "$LOG_FILE"
33-
34-
# 备份旧文件
35-
if [ -f "$COMPOSE_FILE" ]; then
36-
cp "$COMPOSE_FILE" "$COMPOSE_FILE.backup.$(date +%s)"
37-
fi
38-
39-
cat > "$COMPOSE_FILE" << EOF
40-
services:
41-
my-app:
42-
restart: always
43-
container_name: mefrp
44-
network_mode: host
45-
command: "$START_CMD"
46-
image: mefrp/core-next:latest
47-
EOF
48-
49-
cd "${TRIM_APPDEST}/docker"
50-
51-
# 步骤 2: 删除容器
52-
echo "Step 2: Deleting existing containers (docker-compose down)..." >> "$LOG_FILE"
53-
docker-compose down --remove-orphans >> "$LOG_FILE" 2>&1
54-
55-
# 步骤 3: 重新拉取并启动
56-
echo "Step 3: Pulling latest image and starting (docker-compose pull && up)..." >> "$LOG_FILE"
57-
docker-compose pull my-app >> "$LOG_FILE" 2>&1
58-
docker-compose up -d my-app >> "$LOG_FILE" 2>&1
59-
60-
if [ $? -eq 0 ]; then
61-
echo "SUCCESS: Configuration applied, containers deleted and re-pulled." >> "$LOG_FILE"
62-
else
63-
echo "ERROR: Failed to complete the update flow." >> "$LOG_FILE"
64-
fi
65-
else
66-
echo "WARNING: No start_cmd found, skipping update." >> "$LOG_FILE"
67-
fi
68-
69-
echo "=== $(date): config_callback finished ===" >> "$LOG_FILE"
70-
echo "" >> "$LOG_FILE"
71-
72-
exit 0
5+
exit 0

cmd/config_init

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,4 @@
22

33
### This script is called before the user change environment variables in application setting page.
44

5-
# 确保环境变量正确加载
6-
if [ -n "$TRIM_APP_CONFIG_DIR" ]; then
7-
ENV_FILE="$TRIM_APP_CONFIG_DIR/environment"
8-
if [ -f "$ENV_FILE" ]; then
9-
# 导出环境变量,确保后续脚本可以访问
10-
set -a
11-
source "$ENV_FILE"
12-
set +a
13-
fi
14-
fi
15-
16-
# 如果环境文件不存在,尝试从其他位置加载
17-
if [ -z "$start_cmd" ] && [ -n "$TRIM_APPDEST" ]; then
18-
ENV_FILE="$TRIM_APPDEST/../environment"
19-
if [ -f "$ENV_FILE" ]; then
20-
set -a
21-
source "$ENV_FILE"
22-
set +a
23-
fi
24-
fi
25-
265
exit 0

cmd/install_init

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
#!/bin/bash
22

3-
### This script is called before the user installs the application.
3+
LOG_FILE="${TRIM_TEMP_LOGFILE:-${TRIM_PKGVAR}/install.log}"
4+
PKG_DIR="${TRIM_APPDEST}"
5+
WWW_DIR="${PKG_DIR}/www"
6+
TARGET="${WWW_DIR}/mefrpc"
7+
SRC=""
48

5-
exit 0
9+
mkdir -p "${WWW_DIR}" >> ${LOG_FILE} 2>&1
10+
11+
for p in "${WWW_DIR}/mefrpc" "${PKG_DIR}/app/www/mefrpc" "${PKG_DIR}/mefrpc" "${PKG_DIR}/target/mefrpc" "${PKG_DIR}/app/mefrpc" "${PKG_DIR}/app/bin/mefrpc"; do
12+
if [ -f "${p}" ]; then
13+
SRC="${p}"
14+
break
15+
fi
16+
done
17+
18+
if [ -n "${SRC}" ] && [ "${SRC}" != "${TARGET}" ]; then
19+
cp "${SRC}" "${TARGET}" >> ${LOG_FILE} 2>&1
20+
fi
21+
22+
if [ -f "${TARGET}" ]; then
23+
chmod +x "${TARGET}" >> ${LOG_FILE} 2>&1
24+
fi
25+
26+
exit 0

cmd/main

Lines changed: 123 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,148 @@
11
#!/bin/bash
22

3-
FILE_PATH="${TRIM_APPDEST}/docker/docker-compose.yaml"
3+
LOG_FILE="${TRIM_TEMP_LOGFILE:-${TRIM_PKGVAR}/info.log}"
4+
PID_FILE="${TRIM_PKGVAR}/app.pid"
5+
MEFRPC_LOG="${TRIM_PKGVAR}/mefrpc.log"
6+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7+
PKG_DIR="${TRIM_APPDEST:-$(cd "${SCRIPT_DIR}/.." && pwd)}"
8+
MEFRPC_BIN=""
9+
for p in "${PKG_DIR}/www/mefrpc" "${PKG_DIR}/app/www/mefrpc" "${PKG_DIR}/mefrpc" "${PKG_DIR}/target/mefrpc" "${PKG_DIR}/app/mefrpc" "${PKG_DIR}/app/bin/mefrpc" "${SCRIPT_DIR}/../mefrpc"; do
10+
if [ -f "${p}" ]; then
11+
MEFRPC_BIN="${p}"
12+
break
13+
fi
14+
done
15+
if [ -z "${MEFRPC_BIN}" ]; then
16+
MEFRPC_BIN="${PKG_DIR}/mefrpc"
17+
fi
18+
MEFRPC_BIND_HOST="${MEFRPC_BIND_HOST:-0.0.0.0}"
19+
MEFRPC_RUN="\"${MEFRPC_BIN}\""
20+
if command -v stdbuf >/dev/null 2>&1; then
21+
MEFRPC_RUN="stdbuf -oL -eL ${MEFRPC_RUN}"
22+
fi
23+
CMD="cd \"${PKG_DIR}\" && exec ${MEFRPC_RUN} --webui-addr \"${MEFRPC_BIND_HOST}\" >> \"${MEFRPC_LOG}\" 2>&1"
424

5-
is_docker_running () {
6-
DOCKER_NAME=""
25+
log_msg() {
26+
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> ${LOG_FILE}
27+
}
728

8-
if [ -f "$FILE_PATH" ]; then
9-
DOCKER_NAME=$(cat $FILE_PATH | grep "container_name" | awk -F ':' '{print $2}' | xargs)
10-
echo "DOCKER_NAME is set to: $DOCKER_NAME"
29+
start_process() {
30+
if status; then
31+
return 0
1132
fi
1233

13-
if [ -n "$DOCKER_NAME" ]; then
14-
docker inspect $DOCKER_NAME | grep -q "\"Status\": \"running\"," || exit 1
15-
return
34+
log_msg "Starting process ..."
35+
log_msg "app: ${TRIM_APPNAME} ver: ${TRIM_APPVER}"
36+
log_msg "appdir: ${TRIM_APPDEST}"
37+
log_msg "etc: ${TRIM_PKGETC} var: ${TRIM_PKGVAR} port: ${TRIM_SERVICE_PORT}"
38+
log_msg "mefrpc log: ${MEFRPC_LOG}"
39+
log_msg "mefrpc bin: ${MEFRPC_BIN}"
40+
log_msg "mefrpc bind: ${MEFRPC_BIND_HOST}"
41+
if [ ! -f "${MEFRPC_BIN}" ]; then
42+
log_msg "mefrpc not found"
43+
return 1
44+
fi
45+
chmod +x "${MEFRPC_BIN}" >> ${LOG_FILE} 2>&1
46+
# run cmd to start process
47+
bash -c "${CMD}" >> ${LOG_FILE} 2>&1 &
48+
# write pid to pidfile
49+
local start_pid=$!
50+
printf "%s" "${start_pid}" > ${PID_FILE}
51+
sleep 1
52+
if ! check_process "${start_pid}"; then
53+
log_msg "process exited immediately, check ${MEFRPC_LOG}"
54+
return 1
1655
fi
56+
# log_msg "CMD = ${CMD}"
57+
# log_msg "pid = $!"
58+
return 0
59+
}
60+
61+
stop_process() {
62+
log_msg "Stopping process ..."
63+
64+
if [ -r "${PID_FILE}" ]; then
65+
pid=$(head -n 1 "${PID_FILE}" | tr -d '[:space:]')
66+
67+
log_msg "pid=${pid}"
68+
if ! check_process "${pid}"; then
69+
rm -f "${PID_FILE}"
70+
log_msg "remove pid file 1"
71+
else
72+
log_msg "send TERM signal to PID:${pid}..."
73+
kill -TERM ${pid} >> ${LOG_FILE} 2>&1
74+
75+
local count=0
76+
while check_process "${pid}" && [ $count -lt 10 ]; do
77+
sleep 1
78+
count=$((count + 1))
79+
log_msg "waiting process terminal... (${count}s/10s)"
80+
done
81+
82+
if check_process "${pid}"; then
83+
log_msg "send KILL signal to PID:${pid}..."
84+
kill -KILL "${pid}" >> ${LOG_FILE} 2>&1
85+
sleep 1
86+
rm -f "${PID_FILE}"
87+
else
88+
log_msg "process killed... "
89+
fi
90+
fi
91+
fi
92+
93+
if [ -n "${MEFRPC_BIN}" ]; then
94+
pkill -f "${MEFRPC_BIN}" >> ${LOG_FILE} 2>&1
95+
fi
96+
if [ -n "${TRIM_SERVICE_PORT}" ]; then
97+
pkill -f "mefrpc.*${TRIM_SERVICE_PORT}" >> ${LOG_FILE} 2>&1
98+
else
99+
pkill -f "mefrpc" >> ${LOG_FILE} 2>&1
100+
fi
101+
102+
return 0
103+
}
104+
105+
check_process() {
106+
local pid=$1
107+
if kill -0 "${pid}" 2>/dev/null; then
108+
return 0 # process exist
109+
else
110+
return 1 # process not exist
111+
fi
112+
}
113+
114+
status() {
115+
if [ -f "${PID_FILE}" ]; then
116+
pid=$(head -n 1 "${PID_FILE}" | tr -d '[:space:]')
117+
if check_process "${pid}"; then
118+
return 0
119+
else
120+
# Process is not running but pidfile exists - clean it up
121+
rm -f "${PID_FILE}"
122+
fi
123+
fi
124+
125+
return 1
17126
}
18127

19128
case $1 in
20129
start)
21130
# run start command. exit 0 if success, exit 1 if failed
22-
# do nothing, docker application will be started by appcenter
23-
exit 0
131+
start_process
24132
;;
25133
stop)
26134
# run stop command. exit 0 if success, exit 1 if failed
27-
# do nothing, docker application will be stopped by appcenter
28-
exit 0
135+
stop_process
29136
;;
30137
status)
31138
# check application status command. exit 0 if running, exit 3 if not running
32-
# check first container by default, you cound modify it by yourself
33-
if is_docker_running; then
139+
if status; then
34140
exit 0
35-
else
141+
else
36142
exit 3
37143
fi
38144
;;
39145
*)
40146
exit 1
41147
;;
42-
esac
148+
esac

config/privilege

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,5 @@
22
"defaults":
33
{
44
"run-as": "package"
5-
},
6-
"username": "docker-mefrpfn",
7-
"groupname": "docker-mefrpfn"
5+
}
86
}

config/resource

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
11
{
2-
"docker-project": {
3-
"projects": [
2+
"data-share":
3+
{
4+
"shares":
5+
[
46
{
5-
"name": "my-app",
6-
"path": "docker"
7+
"name": "mefrp",
8+
"permission":
9+
{
10+
"rw":
11+
[
12+
"mefrp"
13+
]
14+
}
15+
},
16+
{
17+
"name": "mefrp/data",
18+
"permission":
19+
{
20+
"rw":
21+
[
22+
"mefrp"
23+
]
24+
}
725
}
826
]
927
}

0 commit comments

Comments
 (0)