OpenClaw Upgrade — OpenClaw 升级
v1.5.0OpenClaw 版本升级标准流程,适用于各类 OpenClaw 部署(WSL2/Linux VM)。自动探测代理、lossless-claw、systemd override 等可选组件,若缺失组件则自动跳过。每次执行“升级OpenClaw”、“OpenClaw升级”或“更新OpenClaw”操作时,必须执行此技能。
运行时依赖
安装命令
点击复制技能文档
OpenClaw 升级技能 每次升级 OpenClaw 都必须严格按此流程执行,不能省步骤。上次(4.14版本)因为没检查 lossless-claw 兼容性踩过坑,上次升级后忘记发完成通知,爸比等了7小时不知道结果。两个教训都已写入流程。
第零步:环境探测 在任何操作之前,先自动探测并汇报当前环境: # === 环境探测 === echo "=== OpenClaw 环境 ===" echo "用户: $(whoami)" echo "Home: $HOME" # npm global 路径 NPM_PREFIX=$(npm prefix -g 2>/dev/null || echo "unknown") echo "npm global: $NPM_PREFIX" # 代理检测 if curl -s --connect-timeout 3 -x "http://127.0.0.1:7890" https://registry.npmjs.org/ > /dev/null 2>&1; then PROXY_OPT="--proxy http://127.0.0.1:7890" echo "代理: 127.0.0.1:7890 " elif curl -s --connect-timeout 3 https://registry.npmjs.org/ > /dev/null 2>&1; then PROXY_OPT="" echo "代理: 直连 " else echo " npm 网络不通,请检查代理" fi # 可选组件检测 HAS_LOSSLESS=false [ -d "$HOME/.openclaw/extensions/lossless-claw" ] && HAS_LOSSLESS=true echo "lossless-claw: $HAS_LOSSLESS" HAS_OVERRIDE=false OVERRIDE="$HOME/.config/systemd/user/openclaw-gateway.service.d/override.conf" [ -f "$OVERRIDE" ] && HAS_OVERRIDE=true echo "override.conf: $HAS_OVERRIDE" echo "服务管理: systemd --user" # 多用户 /tmp/jiti 权限检查(防止 codex EACCES 问题) if [ -d "/tmp/jiti" ]; then JITI_PERM=$(stat -c "%a" /tmp/jiti) if [ "$JITI_PERM" != "1777" ]; then echo " /tmp/jiti 权限为 $JITI_PERM,多用户环境可能导致 codex EACCES 错误" echo "建议执行: sudo chmod 1777 /tmp/jiti" else echo "/tmp/jiti: 1777 " fi else echo "/tmp/jiti: 不存在 " fi 向爸比汇报环境探测结果,确认后继续。
第一步:确认目标版本 # 查当前版本和 npm 最新版 openclaw --version npm view openclaw version # 查目标版本 release notes GITHUB_TOKEN=$(grep GITHUB_TOKEN ~/.openclaw/.env | cut -d= -f2) TARGET_VER=<目标版本,如 2026.5.12> curl -s -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/openclaw/openclaw/releases/tags/v${TARGET_VER}" | \ python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('body','')[:3000])" 向爸比汇报:当前版本、目标版本、release highlights 摘要,等爸比确认目标版本。
第二步:检查插件兼容性 # 列出当前启用的插件 openclaw plugins list 2>/dev/null | grep "enabled" 针对每个 enabled 插件,在 release notes 里搜索对应关键词: GITHUB_TOKEN=$(grep GITHUB_TOKEN ~/.openclaw/.env | cut -d= -f2) curl -s -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/openclaw/openclaw/releases/tags/v${TARGET_VER}" | \ python3 -c " import json,sys d=json.load(sys.stdin) body = d.get('body','') keywords = ['feishu', 'lossless', 'minimax', 'anthropic', 'deepseek', 'openai', 'memory-core'] for kw in keywords: lines = [l.strip() for l in body.split('\n') if kw.lower() in l.lower() and l.strip()] if lines: print(f'=== {kw} ===') for l in lines[:5]: print(' ', l) " 重点关注: lossless-claw:手动装的 global 插件,历史上踩过坑,必须关注 @openclaw/feishu:openclaw 自管 npm,升级可能改版本 其余 stock 插件随主包升级,通常无需额外处理 向爸比汇报兼容性评估,有风险说清楚。
第三步:记录插件快照 openclaw plugins list 2>/dev/null > /tmp/plugins-before-${TARGET_VER}.txt echo " 插件快照已保存 → /tmp/plugins-before-${TARGET_VER}.txt"
第四步:备份 CURRENT_VER=$(openclaw --version 2>/dev/null | grep -oP '[\d.]+' | head -1) OVERRIDE="$HOME/.config/systemd/user/openclaw-gateway.service.d/override.conf" FEISHU_DIR="$HOME/.openclaw/npm/node_modules/@openclaw/feishu" LOSSLESS_DIR="$HOME/.openclaw/extensions/lossless-claw" # 1. 主配置 cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak-${CURRENT_VER} echo "1/5 openclaw.json " # 2. systemd override(含 Token + 代理)—— 可选,如存在才备份 if [ -f "$OVERRIDE" ]; then cp "$OVERRIDE" "${OVERRIDE}.bak-${CURRENT_VER}" echo "2/5 override.conf " else echo "2/5 override.conf 不存在,跳过 " fi # 3. 环境变量(含 API Keys) cp ~/.openclaw/.env ~/.openclaw/.env.bak-${CURRENT_VER} echo "3/5 .env " # 4. lossless-claw —— 可选,如存在才备份;自适应大小 # node_modules >500MB → 只备份 dist + package.json(避免 SIGKILL) # node_modules ≤500MB → 完整备份 if [ -d "$LOSSLESS_DIR" ]; then LOSSLESS_VER=$(cat "$LOSSLESS_DIR/package.json" | \ python3 -c "import json,sys;print(json.load(sys.stdin)['version'])") LOSSLESS_NM_SIZE=$(du -sm "$LOSSLESS_DIR/node_modules/" 2>/dev/null | cut -f1) LOSSLESS_BAK="$HOME/.openclaw/extensions/lossless-claw.bak-${LOSSLESS_VER}" mkdir -p "$LOSSLESS_BAK" if [ "${LOSSLESS_NM_SIZE:-0}" -gt 500 ]; then cp "$LOSSLESS_DIR/package.json" "$LOSSLESS_BAK/" cp "$LOSSLESS_DIR/openclaw.plugin.json" "$LOSSLESS_BAK/" cp -r "$LOSSLESS_DIR/dist" "$LOSSLESS_BAK/" echo "4/5 lossless-claw (dist only, node_modules=${LOSSLESS_NM_SIZE}MB 过大跳过) " else cp -r "$LOSSLESS_DIR/." "$LOSSLESS_BAK/" echo "4/5 lossless-claw (完整备份) " fi else echo "4/5 lossless-claw 不存在,跳过 " fi # 5. feishu 插件(只备份 package.json 作版本存档,dist 随 openclaw 安装重建) if [ -d "$FEISHU_DIR" ]; then mkdir -p "${FEISHU_DIR}.bak-${CURRENT_VER}" cp "$FEISHU_DIR/package.json" "${FEISHU_DIR}.bak-${CURRENT_VER}/" echo "5/5 feishu " else echo "5/5 feishu 插件目录不存在,跳过 " fi echo "" echo "=== 备份清单 ===" ls ~/.openclaw/openclaw.json.bak-${CURRENT_VER} 2>/dev/null && echo " openclaw.json" ls ~/.openclaw/.env.bak-${CURRENT_VER} 2>/dev/null && echo " .env" [ -f "${OVERRIDE}.bak-${CURRENT_VER}" ] && echo " override.conf" || echo " override.conf (不存在)"