Skip to content

[Bug] Web后台升级机制与 Standalone 独立包模式冲突,自动加 sudo 导致双目录及版本脱节 #319

Description

@sc-yx

问题描述

https://github.com/qingchencloud/clawpanel/blob/main/docs/linux-deploy.md
文档中提到 “ClawPanel 现已自动检测非 root 用户并加 sudo” 试图解决 npm 全局安装的权限问题。但该逻辑与 Standalone(独立包)安装模式 存在严重冲突。

当用户初始使用 Standalone 独立包模式(运行于 ~/.openclaw-bin/)部署时,如果后续在 Web 后台点击升级/降级,面板会自动调用 sudo npm install -g 强刷。
这导致新版本被用 root 权限错误地写入了全局路径(如 ~/.npm-global/),而原本运行的 ~/.openclaw-bin/ 独立包文件未被覆盖,同时 systemd 服务文件内的路径和 OPENCLAW_SERVICE_VERSION 环境变量也未被同步重写。最终导致系统内存在两套脱节的 OpenClaw,升级无法生效。

复现步骤

当前运行:~/.openclaw-bin/ (Standalone 稳定版)

点击Web升级后:面板后台自动加 sudo 降级通过 npm 安装到了 ~/.npm-global/。

后果:两套目录并存,systemd 依然读取旧的 bin 目录,版本完全脱节。

期望行为

模式识别:后台升级脚本应当优先检测当前 systemd 服务实际指向的运行目录。如果原本是 Standalone 独立包模式,应该去拉取对应的 standalone-zh.tar.gz 压缩包并覆盖原 bin 目录,而不是无脑切换到 sudo npm install -g。

环境同步:如果升级过程中由于网络或策略原因,发生安装模式切换(如从 Standalone 变更为 npm 全局),脚本必须动态重写 systemd 服务文件中的 ExecStart 路径和版本号环境变量,不能各走各的路径。

操作系统

Ubuntu / Debian

系统版本

Ubuntu 24.04.4 LTS

ClawPanel 版本

0.17.0

截图或日志

回退到推荐稳定版 📦 尝试 standalone 独立安装包(汉化版专属,自带 Node.js 运行时,无需 npm) 查询最新版本...
CDN 下载失败(standalone 版本 2026.5.26-zh.1 与请求版本 2026.5.18-zh.1 不匹配),尝试从 GitHub Releases 下载...
📦 尝试 standalone 独立安装包(汉化版专属,自带 Node.js 运行时,无需 npm) 查询最新版本...
standalone 不可用(GitHub: standalone 版本 2026.5.26-zh.1 与请求版本 2026.5.18-zh.1 不匹配),降级到 npm 安装...

Git HTTPS 规则已就绪 (6/6)
安装完成 (@qingchencloud/openclaw-zh@2026.5.18-zh.1)

【核心铁证】:npm verbose 显示当前工作目录被强制指向了用户家目录

npm verbose cwd /home/用户名/.local/share/clawpanel
npm verbose os Linux 6.8.0-124-generic
npm verbose node v22.22.2
npm verbose exit 0
npm info ok

补充信息

服务器上发生冲突的实际路径对比(双版本分裂)
在执行完上述升级后,通过命令行排查服务器,发现系统内部生成了两套完全独立的、没有互通的文件:

路径 A (原本实际运行的 Standalone 目录):~/.openclaw-bin/ (版本依然停留在 2026.5.28-zh.1)

路径 B (Web 端升级后自动创建的 npm 目录):~/.npm-global/ (新版本 2026.5.18-zh.1 被装在了这里)

[Service]

问题 1:即使网页端用 npm 方式升级成功,ExecStart 依然固执地指向旧的 bin 路径

ExecStart=/home/用户名/.openclaw-bin/openclaw

问题 2:环境变量里的版本号死活不会更新,导致面板识别紊乱

Environment=OPENCLAW_SERVICE_VERSION=2026.4.9

问题 3:环境路径中并未包含新写入的 npm-global 路径

Environment=PATH=/usr/local/bin:/usr/bin:/bin

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions