收尾:CHANGELOG 补 1.7.1 + 清历史产物 + 修验证脚本路径

- _build/CHANGELOG.md 补上 1.7.1 条目(发版说明的唯一来源)
- 两个验证脚本还在用旧的管理页路径 zhingzhuanzhan,
  跑起来会误报失败,改成 zhongzhuanzhan
- dist 里清掉 1.6.x 的历史产物(Gitee 发行版里有,删了能下回来)
This commit is contained in:
xmz7891
2026-10-07 00:17:55 +08:00
parent 7b7830d8c5
commit e29b741ddf
7 changed files with 144 additions and 42 deletions
+21 -2
View File
@@ -1,4 +1,23 @@
## 1.7.0 ## 1.7.1
- 修手表连上后**一片白屏**:分页初始化函数从没被调用过,
标签栏里只剩一个孤立的指示器
- 修「被控端已关闭新设备配对」把重装手表的人永久挡在外面:
配对码本身就是钥匙,拿着正确的码就该放行
- 手表端应用名改成 ykxmz
- 修跨网络**延迟高**:隧道退回了 QUIC(`--protocol http2` 参数丢失),
可用率只有 48%;恢复 HTTP/2 后可用率 100%
- 网络调优持久化:TCP 缓冲 4 MB、FastOpen、
空闲后不重置拥塞窗口(长轮询场景关键)
- 手表提示改成自诊断式:连不上时直接打出双方地址,
一眼看出是网段不同还是连错了 WiFi
- 中转站的官网和管理后台分开:
`/` 是官网(公开),`/zhongzhuanzhan` 是管理后台(要登录)
- 官网重新设计:导航 / 功能 / 三步上手 / 下载 / 常见问题
- 官网和管理页统一改成白色简洁风格
- 管理入口从官网上移除
## 1.7.0
- 电脑端改成 **Windows 安装包**(Inno Setup),双击安装,不再需要解压 zip - 电脑端改成 **Windows 安装包**(Inno Setup),双击安装,不再需要解压 zip
- 安装向导里填 6 位配对码,装完手表直接连,不用再跑一次设置 - 安装向导里填 6 位配对码,装完手表直接连,不用再跑一次设置
@@ -7,4 +26,4 @@
- 修配置分裂问题:管理员装的配对码,普通用户账号看不到(数据目录改成按安装位置判断) - 修配置分裂问题:管理员装的配对码,普通用户账号看不到(数据目录改成按安装位置判断)
- 修装到 Program Files 后报「拒绝访问」:ProgramData 数据目录自动授权 - 修装到 Program Files 后报「拒绝访问」:ProgramData 数据目录自动授权
- 修安装卡死:`--code` 命令处理完不返回 - 修安装卡死:`--code` 命令处理完不返回
- 中转管理页加上网站图标 - 中转管理页加上网站图标
-30
View File
@@ -1,30 +0,0 @@
阶段3+4+5:管理页白色化 + 局域网诊断 + 全量验收
阶段3 管理页
- 清掉全部深色主题残留(地址框 #0b1220、按钮悬停 #262c36、
删除按钮 #2d1214 等 11 处),现在 0 处深色
- 接口全部正常:health / downloads / netcheck
阶段4 局域网诊断
- 查清楚"电脑不在同一网络"是怎么回事:被控端是**对的**
(lan_ips() 报 ['192.168.2.64', '169.254.83.107'],真实地址排第一),
是手表当时真不在 192.168.2.x —— 可能连了 5G 频段的另一个路由器,或开着移动数据
- 所以改了手表的提示:不再只说"不在同一网络",
而是把**双方地址都打出来**,用户一眼能看出是网段不同还是连错 WiFi
- 端到端验证局域网路径:认证 1 ms,功能列表 207 项
阶段1 结论修正(一天内推翻自己两次,如实记录)
- 第一次判断"优选 IP 无用":错。半小时内确实能避开超时 IP
- 第二次固定优选 IP:也错。那些实测 138ms 的 IP 半小时后全不通了
—— Cloudflare anycast 可达性随运营商路由变化,固定 IP 等于钉死到会失效的地址
- 最终:不固定,靠 GeoDNS + cloudflared 重试 + ha-connections 2 冗余
- 撤销后立即变好:连接稳定 2 条、超时告警 0 次、设备侧延迟 4.40s -> 1.66s
- **真正的瓶颈**:分段实测发现本机到 Cloudflare 的**裸 RTT 就 1439 ms**,
比经隧道的请求(1215 ms)还慢。说明瓶颈是这条网络的 4G 上行本身,
不是设备的隧道。公网侧已无优化空间。
- 局域网 118 ms vs 公网 1215 ms,快 10 倍 —— 这才是该走的路
阶段5 验收
- 全量回归 29 项全通过
- 设备侧验收 38 项全通过
- 成品:setup exe 14.37 MB / server zip / watch apk,已同步到设备下载区
+3 -3
View File
@@ -13,8 +13,8 @@ for n in 'ykxmz' '老师抬一下手腕' '电脑端' '服务器端' '手表端';
done done
echo echo
echo " 2) 管理页 /zhingzhuanzhan(未登录应看到登录框)" echo " 2) 管理页 /zhongzhuanzhan(未登录应看到登录框)"
curl -s -o /tmp/login.html --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null curl -s -o /tmp/login.html --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null
for n in 'name=username' 'name=password' 'favicon'; do for n in 'name=username' 'name=password' 'favicon'; do
grep -q "$n" /tmp/login.html && echo " OK $n" || echo " XX $n" grep -q "$n" /tmp/login.html && echo " OK $n" || echo " XX $n"
done done
@@ -27,7 +27,7 @@ echo
echo " 4) 登录" echo " 4) 登录"
curl -s -c /tmp/ck2.txt -o /dev/null --max-time 15 -X POST \ curl -s -c /tmp/ck2.txt -o /dev/null --max-time 15 -X POST \
-d 'username=xmz7891&password=@REVAedu120830' "$BASE/admin/login" 2>/dev/null -d 'username=xmz7891&password=@REVAedu120830' "$BASE/admin/login" 2>/dev/null
curl -s -b /tmp/ck2.txt -o /tmp/admin.html --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null curl -s -b /tmp/ck2.txt -o /tmp/admin.html --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null
for n in 'id=dlPanel' '网络体检' '退出登录' 'favicon'; do for n in 'id=dlPanel' '网络体检' '退出登录' 'favicon'; do
grep -q "$n" /tmp/admin.html && echo " OK $n" || echo " XX $n" grep -q "$n" /tmp/admin.html && echo " OK $n" || echo " XX $n"
done done
+113
View File
@@ -0,0 +1,113 @@
# -*- coding: utf-8 -*-
r'''收尾清理:
1. 两个验证脚本还在用旧的管理页路径,跑起来会误报失败
2. dist 里堆着 1.6.x 的历史产物(Gitee 发行版里都有,删了也能下回来)
3. 把改动提交
'''
from __future__ import annotations
import subprocess
import sys
from pathlib import Path
ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote")
GIT = r"C:\Program Files\Git\bin\git.exe"
OLD, NEW = "zhingzhuanzhan", "zhongzhuanzhan"
def fix_scripts() -> None:
"""只改还在用的验证脚本;_build 里的一次性历史脚本不动。"""
print(" 一、修还在用的验证脚本")
for name in ("check_web.sh", "final_web_check.sh", "verify_site_admin.sh"):
path = ROOT / "_build" / name
if not path.is_file():
continue
text = path.read_text(encoding="utf-8")
if OLD not in text:
print(" %-24s 已经是新路径" % name)
continue
n = text.count(OLD)
path.write_text(text.replace(OLD, NEW), encoding="utf-8", newline="\n")
print(" %-24s 改了 %d 处" % (name, n))
def clean_dist() -> None:
"""删掉 1.6.x 的历史产物。"""
print()
print(" 二、清理 dist 里的历史版本")
dist = ROOT / "dist"
if not dist.is_dir():
print(" dist 不存在")
return
removed = []
for path in sorted(dist.iterdir()):
if not path.is_file():
continue
# 保留 1.7.x
if "1.7." in path.name:
continue
if any(tag in path.name for tag in ("1.6.0", "1.6.1", "1.6.2")):
path.unlink()
removed.append(path.name)
for name in removed:
print(" 删除 %s" % name)
if not removed:
print(" 没有要删的")
print()
print(" 剩下的:")
for path in sorted(dist.iterdir()):
if path.is_file():
print(" %-34s %6.2f MB"
% (path.name, path.stat().st_size / 1024 / 1024))
def commit() -> None:
print()
print(" 三、提交")
subprocess.run([GIT, "add", "-A"], cwd=str(ROOT), check=False)
message = (
"收尾:CHANGELOG 补 1.7.1 + 清历史产物 + 修验证脚本路径\n"
"\n"
"- _build/CHANGELOG.md 补上 1.7.1 条目(发版说明的唯一来源)\n"
"- 两个验证脚本还在用旧的管理页路径 zhingzhuanzhan,\n"
" 跑起来会误报失败,改成 zhongzhuanzhan\n"
"- dist 里清掉 1.6.x 的历史产物(Gitee 发行版里有,删了能下回来)\n"
)
msg_file = ROOT / "_build" / "_cmsg.txt"
msg_file.write_bytes(message.encode("utf-8"))
result = subprocess.run([GIT, "commit", "-q", "-F", str(msg_file)],
cwd=str(ROOT), capture_output=True, text=True,
encoding="utf-8", errors="replace")
msg_file.unlink(missing_ok=True)
print(" commit exit=%s" % result.returncode)
if result.returncode != 0 and result.stdout:
print(" " + result.stdout.strip()[:200])
show = subprocess.run([GIT, "log", "--oneline", "-1"],
cwd=str(ROOT), capture_output=True, text=True,
encoding="utf-8", errors="replace")
print(" " + (show.stdout or "").strip())
env_push = {"GIT_SSH_COMMAND": r'"C:\Program Files\Git\usr\bin\ssh.exe"'}
import os
push_env = dict(os.environ)
push_env.update(env_push)
push = subprocess.run([GIT, "push", "origin", "main"], cwd=str(ROOT),
capture_output=True, text=True,
encoding="utf-8", errors="replace",
env=push_env)
tail = (push.stderr or push.stdout or "").strip().splitlines()[-2:]
for line in tail:
print(" " + line)
def main() -> int:
fix_scripts()
clean_dist()
commit()
return 0
if __name__ == "__main__":
sys.exit(main())
+3 -3
View File
@@ -14,15 +14,15 @@ echo " 主文字色: $(grep -o 'color:#1f2328' /tmp/s.html | head -1)"
echo " 底色: $(grep -o 'background:#ffffff' /tmp/s.html | head -1)" echo " 底色: $(grep -o 'background:#ffffff' /tmp/s.html | head -1)"
echo echo
echo " 管理页 /zhingzhuanzhan" echo " 管理页 /zhongzhuanzhan"
curl -s --max-time 15 "$BASE/zhingzhuanzhan" -o /tmp/l.html 2>/dev/null curl -s --max-time 15 "$BASE/zhongzhuanzhan" -o /tmp/l.html 2>/dev/null
echo " 登录框: $(grep -c 'name=username' /tmp/l.html) 个账号框" echo " 登录框: $(grep -c 'name=username' /tmp/l.html) 个账号框"
echo " 底色: $(grep -o 'background:#ffffff' /tmp/l.html | head -1)" echo " 底色: $(grep -o 'background:#ffffff' /tmp/l.html | head -1)"
echo echo
echo " 登录后管理页" echo " 登录后管理页"
KEY=$(cat /root/lanremote-relay/data/admin_key.txt 2>/dev/null) KEY=$(cat /root/lanremote-relay/data/admin_key.txt 2>/dev/null)
curl -s --max-time 15 -H "X-Admin: $KEY" "$BASE/zhingzhuanzhan" -o /tmp/a.html 2>/dev/null curl -s --max-time 15 -H "X-Admin: $KEY" "$BASE/zhongzhuanzhan" -o /tmp/a.html 2>/dev/null
echo " 下载区: $(grep -c 'dlPanel' /tmp/a.html)" echo " 下载区: $(grep -c 'dlPanel' /tmp/a.html)"
echo " 深色值残留: $(grep -c '0d1117' /tmp/a.html) 处" echo " 深色值残留: $(grep -c '0d1117' /tmp/a.html) 处"
echo " 白色底色: $(grep -o '\-\-bg:#ffffff' /tmp/a.html | head -1)" echo " 白色底色: $(grep -o '\-\-bg:#ffffff' /tmp/a.html | head -1)"
+4 -4
View File
@@ -14,10 +14,10 @@ for n in 'ykxmz' '老师抬一下手腕' '下载' '电脑端' '服务器端' '
done done
echo echo
echo "===== 2. 管理页 /zhingzhuanzhan(应该要登录)=====" echo "===== 2. 管理页 /zhongzhuanzhan(应该要登录)====="
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null) code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null)
echo " HTTP $code" echo " HTTP $code"
login=$(curl -s --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null) login=$(curl -s --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null)
echo "$login" | grep -q 'name=username' && echo " OK 有账号输入框" || echo " XX 没有账号框" echo "$login" | grep -q 'name=username' && echo " OK 有账号输入框" || echo " XX 没有账号框"
echo "$login" | grep -q 'name=password' && echo " OK 有密码输入框" || echo " XX 没有密码框" echo "$login" | grep -q 'name=password' && echo " OK 有密码输入框" || echo " XX 没有密码框"
@@ -41,7 +41,7 @@ grep -o 'lr_admin.*' /tmp/ck.txt 2>/dev/null | head -1 | sed 's/^/ /'
echo echo
echo "===== 6. 带 Cookie 访问管理页(应该看到管理内容)=====" echo "===== 6. 带 Cookie 访问管理页(应该看到管理内容)====="
admin=$(curl -s -b /tmp/ck.txt --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null) admin=$(curl -s -b /tmp/ck.txt --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null)
for n in 'id=dlPanel' '网络体检' '退出登录' 'favicon'; do for n in 'id=dlPanel' '网络体检' '退出登录' 'favicon'; do
echo "$admin" | grep -q "$n" && echo " OK $n" || echo " XX $n" echo "$admin" | grep -q "$n" && echo " OK $n" || echo " XX $n"
done done
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB