Upload files to "/"

This commit is contained in:
mike 2026-05-12 11:06:41 +08:00
parent f485c92dd3
commit 2f7ebe3c4b
1 changed files with 107 additions and 0 deletions

107
nx30pro_upgrade.sh Normal file
View File

@ -0,0 +1,107 @@
#!/bin/bash
# NX30Pro 一键升级脚本
# 固件来源: https://git.stickrouter.com/mike/N30pro/raw/branch/main/nx30pro512.bin
# 目标路由器: 192.168.6.66
ROUTER_IP="192.168.6.66"
ROUTER_USER="root"
FIRMWARE_URL="https://git.stickrouter.com/mike/N30pro/raw/branch/main/nx30pro512.bin"
FIRMWARE_NAME="nx30pro512.bin"
REMOTE_PATH="/tmp/${FIRMWARE_NAME}"
R="\033[91m"; G="\033[92m"; Y="\033[93m"; C="\033[96m"; W="\033[0m"
log() { echo -e "${G}[INFO] $1${W}"; }
warn() { echo -e "${Y}[WARN] $1${W}"; }
err() { echo -e "${R}[ERR] $1${W}"; exit 1; }
step() { echo -e "\n${C}${'='*50}\n $1\n${'='*50}${W}"; }
echo -e "${C}"
echo "=================================================="
echo " NX30Pro 一键升级脚本"
echo " 目标路由器: ${ROUTER_IP}"
echo " 固件来源: Gitea"
echo "=================================================="
echo -e "${W}"
# 检查 ssh/scp 是否可用
for cmd in ssh scp wget curl; do
command -v $cmd &>/dev/null || err "缺少依赖: $cmd,请先安装"
done
# 检查路由器是否可达
echo -e "\n${C}[步骤 1/4] 检查路由器连接${W}"
ping -c 1 -W 3 ${ROUTER_IP} &>/dev/null || err "无法连接到路由器 ${ROUTER_IP},请检查网络"
log "路由器 ${ROUTER_IP} 可达"
# 下载固件到本地 /tmp
echo -e "\n${C}[步骤 2/4] 下载固件${W}"
LOCAL_FW="/tmp/${FIRMWARE_NAME}"
if [ -f "${LOCAL_FW}" ]; then
warn "本地已存在固件文件,跳过下载"
else
log "从 Gitea 下载固件..."
wget -q --show-progress "${FIRMWARE_URL}" -O "${LOCAL_FW}" || \
curl -L --progress-bar "${FIRMWARE_URL}" -o "${LOCAL_FW}" || \
err "固件下载失败"
fi
log "固件大小: $(du -h ${LOCAL_FW} | cut -f1)"
# 上传固件到路由器 /tmp
echo -e "\n${C}[步骤 3/4] 上传固件到路由器${W}"
log "正在上传到 ${ROUTER_IP}:${REMOTE_PATH}..."
scp -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-o ConnectTimeout=10 \
"${LOCAL_FW}" "${ROUTER_USER}@${ROUTER_IP}:${REMOTE_PATH}" || err "上传失败"
log "上传完成"
# 验证文件大小
REMOTE_SIZE=$(ssh -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
"${ROUTER_USER}@${ROUTER_IP}" \
"wc -c < ${REMOTE_PATH} 2>/dev/null")
LOCAL_SIZE=$(wc -c < "${LOCAL_FW}")
if [ "${REMOTE_SIZE}" != "${LOCAL_SIZE}" ]; then
err "文件大小不一致,上传可能失败 (本地: ${LOCAL_SIZE}, 远程: ${REMOTE_SIZE})"
fi
log "文件校验通过 (大小: ${LOCAL_SIZE} bytes)"
# 执行升级
echo -e "\n${C}[步骤 4/4] 执行固件升级${W}"
warn "升级过程中请勿断电!路由器将自动重启..."
warn "升级完成后请访问 http://192.168.6.66 登录管理界面"
echo ""
read -p "确认升级? (y/N): " confirm
if [[ "${confirm}" != "y" && "${confirm}" != "Y" ]]; then
warn "已取消升级"
exit 0
fi
log "开始升级..."
ssh -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
"${ROUTER_USER}@${ROUTER_IP}" \
"sysupgrade -F -n ${REMOTE_PATH}" &
echo ""
log "升级命令已发送,路由器正在重启..."
log "等待路由器重启完成 (约60秒)..."
sleep 60
# 检查路由器是否重启完成
for i in {1..10}; do
if ping -c 1 -W 3 ${ROUTER_IP} &>/dev/null; then
echo ""
echo -e "${G}=================================================="
echo " ✅ 升级完成!"
echo " 请访问 http://${ROUTER_IP} 登录管理界面"
echo -e "==================================================${W}"
exit 0
fi
log "等待路由器上线... ($i/10)"
sleep 10
done
warn "路由器未能在预期时间内上线,请手动检查"