fix(core): 回滚之前引入的过度防御逻辑,使用纯净的原版代码覆 盖子模块,配合根目录引导程序的 exec </dev/tty 彻底解决终端污染与 Telegram 报文解析崩溃问题

This commit is contained in:
hotyue
2026-06-03 02:36:44 +00:00
parent 40a41cc9ea
commit 10c0b75ce6
3 changed files with 54 additions and 54 deletions

View File

@@ -1,11 +1,22 @@
#!/bin/bash
# ==========================================================
# 脚本名称: install.sh (v4.3.0 Bootstrapper)
# 核心功能: 极简引导入口。包含 Ctrl+C 优雅中断与 TTY 终端重连
# 脚本名称: install.sh (v4.3.0 模块化终极引导入口)
# 核心功能: 权限鉴定、沙盒创建、Ctrl+C 熔断保护、TTY 绝缘挂载
# ==========================================================
# 1. 严格权限鉴权
if [ "$EUID" -ne 0 ]; then
echo -e "\033[31m❌ 权限被拒绝: 部署 IP-Sentinel 需要最高系统权限。\033[0m"
echo -e "💡 请切换到 root 用户 (执行 su root 或 sudo -i) 后重新运行指令。"
exit 1
fi
# 2. [沙盒机制] 创建安全挂载点
SECURE_TMP=$(mktemp -d /tmp/ips_install.XXXXXX)
# ----------------------------------------------------------
# [中断防护] 捕获 Ctrl+C 执行优雅的战场清理
# [中断防护] 严格捕获 Ctrl+C 人为中断,执行优雅的战场清理
# ----------------------------------------------------------
cleanup_and_exit() {
echo -e "\n\n\033[33m⚠ 检测到中断信号 (Ctrl+C),安装操作已被手动中止。\033[0m"
@@ -13,24 +24,20 @@ cleanup_and_exit() {
rm -rf "$SECURE_TMP" 2>/dev/null
exit 1
}
# 绑定中断信号
# 绑定系统级中断引信
trap cleanup_and_exit INT QUIT TERM
trap 'rm -rf "$SECURE_TMP" 2>/dev/null' EXIT HUP
if [ "$EUID" -ne 0 ]; then
echo -e "\033[31m❌ 权限被拒绝: 部署 IP-Sentinel 需要最高系统权限。\033[0m"
exit 1
fi
SECURE_TMP=$(mktemp -d /tmp/ips_install.XXXXXX)
# 测试期指向当前重构开发分支
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/feature/v4.3.0-modular"
echo -e "\n⏳ 正在拉取 IP-Sentinel v4.3.0 安装模块引擎..."
# 3. 仅拉取总指挥大管家
curl -fsSL --connect-timeout 10 --retry 3 "${REPO_RAW_URL}/install/build_agent.sh" -o "${SECURE_TMP}/build_agent.sh"
if [ ! -s "${SECURE_TMP}/build_agent.sh" ]; then
echo -e "\033[31m❌ 致命错误:核心安装引擎拉取失败!\033[0m"
echo -e "\033[31m❌ 致命错误:核心安装引擎拉取失败!网络阻断或 GitHub Raw 异常。\033[0m"
exit 1
fi
@@ -39,10 +46,8 @@ export REPO_RAW_URL
chmod +x "${SECURE_TMP}/build_agent.sh"
# ==========================================================
# 【核心黑科技】强制终端重连 (TTY Re-attach)
# 彻底粉碎 curl | bash 管道流劫持,将 stdin 交还给键盘!
# 【核心黑科技】挂载真实 TTY 执行域
# 强行使下层所有子模块脱离 curl 管道污染100% 还原原版 read-p 键盘原生体验
# ==========================================================
exec < /dev/tty
source "${SECURE_TMP}/build_agent.sh"
exit 0
bash "${SECURE_TMP}/build_agent.sh" < /dev/tty
exit $?

View File

@@ -1,11 +1,13 @@
#!/bin/bash
# ==========================================================
# 模块名称: build_agent.sh (v4.3.0 Orchestrator)
# 核心功能: Agent 安装业务的总指挥,负责拉取子模块并按序调用逻辑函数
# 模块名称: build_agent.sh (Orchestrator 编排大管家)
# 核心功能: 严格遵循原版 install.sh 判定树时序,实现无损热更新
# ==========================================================
# 1. 定义需要按需加载的子模块清单
# 传递中断引信
trap 'exit 1' INT QUIT TERM
MODULES=(
"env_setup.sh"
"ui_menu.sh"
@@ -13,9 +15,7 @@ MODULES=(
"sys_daemon.sh"
)
echo "⏳ 正在装载底层设施依赖..."
# 2. 从云端拉取所有子模块到沙盒中
# 1. 串行拉取子模块资产
for mod in "${MODULES[@]}"; do
curl -fsSL --connect-timeout 10 --retry 3 "${REPO_RAW_URL}/install/${mod}" -o "${SECURE_TMP}/${mod}"
if [ ! -s "${SECURE_TMP}/${mod}" ]; then
@@ -25,41 +25,39 @@ for mod in "${MODULES[@]}"; do
source "${SECURE_TMP}/${mod}"
done
echo -e "\033[32m✅ 模块装载完毕,正在进入部署流程...\033[0m"
# ==========================================================
# 3. 核心业务编排流 (原版 install.sh 的时序严格执行)
# (注:这些 do_* 函数将在对应的子模块中定义,原汁原味地保留原有逻辑)
# 2. 核心业务原子流 (100% 忠实于原版 install.sh 执行时序)
# ==========================================================
# [模块: env_setup.sh]
do_env_precheck # 靶机架构预检与调度器降级决策
do_fetch_version # 解析运行态版本约束
do_install_deps # 多分支包管理器嗅探与极简系统补全
# [环境预检阶段]
do_env_precheck # 架构预检、系统级诊断 (原版第 26-55 行)
do_fetch_version # 动态解析远端版本约束 (原版第 59-66 行)
do_install_deps # 多分支包管理器嗅探与系统补全 (原版第 70-137 行)
# [模块: ui_menu.sh]
do_fetch_map # 拉取全球节点地图
do_handle_menu # 拦截交互菜单 / 决定是否平滑升级 / 卸载
# [菜单与策略拦截阶段]
do_fetch_map # LBS 地理图谱树预载 (原版第 141-146 行)
do_handle_menu # 区分全新安装、平滑升级与一键卸载 (原版第 149-188 行)
# 如果用户选择了卸载,子模块会直接 exit不会执行后续流程
# [物理清洗阶段]
do_clean_env # 幽灵进程抹除、无损清空与数据保护 (原版第 192-225 行)
# [模块: sys_daemon.sh]
do_clean_env # 安装前的环境纯净度构建与幽灵进程抹除
# [配置生成阶段 (仅限全新安装)]
do_interactive_setup # 逐级锁定战区城市、联控配置、端口探测 (原版第 229-373 行)
# [模块: ui_menu.sh]
do_interactive_setup # 摘取节点信息并构建关联 / 接入 Master 司令部 (仅限全新安装)
# [网络雷达与身份装配阶段]
do_network_probe # 冗余双栈探测、网卡锁、WARP假公网隔离 (原版第 375-430 行)
do_assemble_fallback # 智能多宿主容灾弹匣装填、主键别名分离 (原版第 432-475 行)
do_write_config # 固化本地本地 config.conf 档案 (原版第 477-512 行)
# [模块: net_engine.sh]
do_network_probe # 冗余网络栈探测与多出口智能嗅探
do_assemble_fallback # 智能主副容灾弹药装填 (Multi-IP Fallback)
do_write_config # 远程拉取冷数据并解析固化配置 (仅限全新安装)
do_smooth_migrate # 老节点数据格式迁移兼容机制 (仅限平滑升级)
# [老节点热重载平滑升级阶段 (仅限升级模式)]
do_smooth_migrate # 强行覆写、重铸双栈容灾装甲 (原版第 516-590 行)
# [模块: sys_daemon.sh]
do_deploy_core # 防变砖双缓冲下载执行域 (覆写引擎)
do_inject_daemon # Systemd 原生注入与微内核定时降级兜底
# [核心引擎原子覆写阶段]
do_deploy_core # 双缓冲防变砖下载域、物理覆写核心文件 (原版第 594-620 行)
# [模块: ui_menu.sh]
do_final_report # 部署后首播,打入中枢通信网关及指令态势传递
do_show_summary # 打印结束横幅与开源推广
# [进程守护与首播激活阶段]
do_inject_daemon # Systemd/Alpine 看门狗死循环双重注入 (原版第 622-728 行)
do_final_report # 首播暗号同步、Markdown防断开下划线发送 (原版第 732-793 行)
do_show_summary # 防火墙端口提示、装机量统计、开源 Star 推广 (原版第 795-832 行)
exit 0

View File

@@ -285,13 +285,10 @@ do_final_report() {
else
echo -e "\n📡 正在向指挥部发送注册暗号..."
# 这里的防截断转义是全新安装流程特有的,原版代码就是这么写的
SAFE_COMM_IP_ESC=$(echo "$SAFE_COMM_IP" | sed 's/_/\\_/g')
TEXT_MSG="✨ *IP-Sentinel 部署成功!*
📍 区域:${REGION_NAME}
🌐 养护 IP\`${SAFE_PUBLIC_IP}\`
📡 容灾 IP\`${SAFE_COMM_IP_ESC}\`
📡 容灾 IP\`${SAFE_COMM_IP}\`
🔌 端口:\`${AGENT_PORT}\`
🔑 *请点击下方指令复制并回复给机器人:*