Upload files to "/"
This commit is contained in:
parent
f485c92dd3
commit
2f7ebe3c4b
|
|
@ -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 "路由器未能在预期时间内上线,请手动检查"
|
||||
Loading…
Reference in New Issue