openclaw
shell
sudo apt update && sudo apt upgrade -y

这是 Ubuntu 系统更新后弹出的服务重启提示,部分守护进程仍在使用旧版本的库文件,需要重启才能生效。直接选择ok即可

shell
sudo apt install -y nodejs npm git chromium-browser chromium-chromedriver

有如下报错:

安装 chromium-browser 时,dpkg 子进程返回了错误代码 (1),导致安装失败。
shell
# 修复损坏的包状态
sudo dpkg --configure -a
# 清理并重新更新源
sudo apt clean
sudo apt update
# 强制重新安装 chromium-browser
sudo apt install -f
报错:

shell
sudo dpkg -i --force-script-chrootless /var/cache/apt/archives/chromium-browser_1%3a85.0.4183.83-0ubuntu2.22.04.1_amd64.deb
报错:

ping api.snapcraft.io 显示正常,那就是包的问题。
先绕开 snap,再彻底放弃 chromium,改用 Chrome
先清理当前失败状态
shell
sudo apt remove --purge chromium-browser chromium-chromedriver
sudo apt autoremove -y
sudo dpkg --configure -a
sudo apt install -f
# 禁用 snap 相关依赖(避免再次触发网络超时)
sudo apt-mark hold snapd
# 直接安装 Google Chrome 替代 chromium(推荐)
# 下载 Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
报错:

shell
sudo apt install -f # 修复依赖
google-chrome --version # 返回版本号成功

shell
# 下载对应版本的 ChromeDriver
curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE

shell
wget https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver
# 继续部署 OpenClaw
sudo apt install -y nodejs npm git
sudo npm install -g openclaw@latest
报错:

shell
git clone https://github.com/whiskeysockets/libsignal-node.git
cd libsignal-node
npm install
npm link
# 重新安装 OpenClaw
sudo npm install -g openclaw@latest
报错:

需要 Node.js 20+
shell
# 移除旧版本 Node.js
sudo apt remove --purge nodejs npm -y
sudo apt autoremove -y
# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# 安装 Node.js 20
sudo apt install -y nodejs
# 验证版本
node -v
# 回显v20.20.0后执行
sudo npm install -g openclaw@latest
# 执行后发现一直不动,于是查询日记
tail -f /root/.npm/_logs/$(ls -t /root/.npm/_logs/ | head -1)
# 日记也无更新。更换国内源
sudo npm config set registry https://registry.npmmirror.com
sudo npm install -g openclaw@latest
# 依然不行,忽略编译试一下
sudo npm install -g openclaw@latest --ignore-scripts
# 依然不行。手动下载 OpenClaw 源码看看,准备依赖
# 开始手动部署
sudo apt install -y build-essential python3 make g++
# 创建工作目录并克隆源码
mkdir -p ~/openclaw && cd ~/openclaw
git clone https://github.com/whiskeysockets/openclaw.git .
# 报404
# 从 npm 仓库下载 OpenClaw 源码包(自动匹配最新版本)
npm pack openclaw
# 解压下载的 tar 包(文件名会是 openclaw-x.x.x.tgz,* 匹配版本号)
tar -zxvf openclaw-*.tgz
# 进入解压后的源码目录
cd package
# 安装构建依赖(确保编译环境完整),已安装完成,忽略执行
sudo apt install -y build-essential python3 make g++
# 安装源码依赖(分步执行,避免卡顿)
npm config set registry https://registry.npmmirror.com
npm install --ignore-scripts
# 手动执行构建
npm run build
# 报错(意思是包已经是预编译好的发布版,不需要build了):

shell
sudo npm link

shell
# openclaw 命令找不到
# 包的 package.json 里没有配置 bin 字段,或者,openclaw 的入口脚本没有执行权限
cat package.json | grep -A 5 "bin"
# 发现无回显
# 如果 bin 字段缺失,我们可以手动创建一个软链接,指向包的入口文件:
# 先找到入口文件(通常是 index.js 或 cli.js):
ls -la ~/openclaw/package
# 假设入口文件是 index.js,创建软链接:
sudo ln -s ~/openclaw/package/index.js /usr/local/bin/openclaw
sudo chmod +x /usr/local/bin/openclaw
# 验证:
openclaw --version

shell
# 如果 index.js 是一个 Node.js 脚本,需要在脚本顶部添加 Shebang:
nano ~/openclaw/package/index.js
# 在第一行添加:
#!/usr/bin/env node
# 保存后,重新执行 chmod +x:
sudo chmod +x /usr/local/bin/openclaw
openclaw --version
# 依然无回显
# 检查 package.json 里的 main 和 bin 字段
cat ~/openclaw/package/package.json | grep -E '("main"|"bin")' -A 2

main:包的主入口文件
bin:定义的可执行命令和对应的脚本
从截图来看,node ~/openclaw/package/index.js --version 没有输出,说明这个入口文件本身可能不是 CLI 入口,或者缺少必要的参数 / 配置,导致它静默退出了。
检查 package.json 里的 main 和 bin 字段
shell
cat ~/openclaw/package/package.json | grep -E '("main"|"bin")' -A 2
这会告诉你:
main:包的主入口文件
bin:定义的可执行命令和对应的脚本
如果 bin 字段存在
比如 package.json 里有:
shell
json
"bin": {
"openclaw": "./dist/cli.js"
}
CLI 入口是 ./dist/cli.js,将该文件软连接到openclaw,然后加x权限启动即可
如果 bin 字段不存在,说明这个包本身就不是 CLI 工具,或者 CLI 入口在别的地方。你可以:
查看 package.json 的 scripts 字段,看看有没有 start 或 cli 脚本:
shell
cat ~/openclaw/package/package.json | grep -A 10 "scripts"
如果有 start 脚本,直接用 npm start 启动:
shell
cd ~/openclaw/package
npm start -- --version
如果还是没有,手动创建 CLI 包装脚本
shell
cat > ~/openclaw/package/cli.js << 'EOF'
#!/usr/bin/env node
const openclaw = require('./index.js');
// 解析命令行参数
const args = process.argv.slice(2);
if (args.includes('--version') || args.includes('-v')) {
console.log('OpenClaw v0.1.0 (手动包装)');
process.exit(0);
}
if (args.includes('onboard')) {
openclaw.onboard().then(() => {
console.log('Onboard completed.');
}).catch(console.error);
} else if (args.includes('gateway') && args.includes('start')) {
openclaw.startGateway({ daemon: true }).then(() => {
console.log('Gateway started in daemon mode.');
}).catch(console.error);
} else {
console.log('Usage: openclaw [onboard|gateway start] [--version]');
process.exit(1);
}
EOF
# 赋予执行权限
chmod +x ~/openclaw/package/cli.js
# 创建软链接到 /usr/local/bin
sudo ln -sf ~/openclaw/package/cli.js /usr/local/bin/openclaw
openclaw --version

初始化配置
shell
openclaw onboard

openclaw.onboard() 方法并不存在,查看 index.js 导出的内容
shell
node -e "const oc = require('./index.js'); console.log('导出的内容:', oc); console.log('导出的方法/属性:', Object.keys(oc));"

说明index.js 导出的是一个空对象 {},没有任何可调用的方法或属性。
到此手动部署的方式宣告失败。