在加拿大机房落地的 M4 远程 Mac 上装 OpenClaw,最容易踩坑的不是「能不能跑起来」,而是安装路径分裂:官方 install.sh 把二进制与配置写到哪里、交互 shell 里 which openclaw 与 launchd 里是不是同一条 PATH、Homebrew 装的 Node 与 npm i -g 装的 CLI 谁覆盖谁。本文按实战顺序把路径对齐、把 Homebrew 与 npm 的分工说清,并给 Gateway 默认 127.0.0.1:18789 预留 CPU/内存/磁盘,最后附一张常见报错优先排查表。更完整的 onboard、LaunchDaemon 与日志对照可延续阅读 OpenClaw 2026 在远程 Mac 上跑稳:安装脚本与 onboard、Gateway 18789/Token/LaunchDaemon、日志对照与加拿大 M4 的 7×24 场景。
install.sh 与「谁在 PATH 里」
官方一键脚本通常会下载 release、解压并把可执行文件放到固定前缀(常见为 ~/.openclaw 或版本目录,具体以当前仓库说明为准),再在安装收尾提示你把某目录加入 PATH,或写入 profile。远程机上务必用同一登录用户执行脚本与后续 openclaw doctor,避免 root 与用户目录混装。装完后立刻记录:which openclaw、openclaw --version 的绝对路径,供 launchd plist 引用。
type -a openclaw openclaw doctor
若 doctor 在 SSH 会话里全绿,但守护进程仍报 command not found,根因几乎总是 plist 未继承交互式 PATH——这与 OpenClaw 2026 远程 Mac 安装部署与排障:openclaw onboard、Gateway 守护进程与加拿大 M4 中高配资源规划实战 中的守护进程章节同一类问题,应回到「绝对路径或 EnvironmentVariables」修 plist,而不是反复重装。
Homebrew 与 npm:分工对照
| 维度 | Homebrew(brew install) |
npm 全局(npm i -g) |
|---|---|---|
| 典型用途 | 系统级依赖:Node LTS、git、证书工具链 | Node 生态 CLI:与 OpenClaw 同栈的工具包 |
| PATH 位置 | /opt/homebrew/bin(Apple Silicon)等固定前缀 |
常落在 npm 全局 prefix 下,随 Node 安装方式而变 |
| 升级与回滚 | brew upgrade / pin 版本较清晰 |
多版本并存需 nvm/fnm 或谨慎改 prefix |
| 与 Gateway 关系 | 保证 launchd 能解析到稳定的 node |
保证 openclaw 与依赖包版本与项目 lockfile 一致 |
建议:在团队 runbook 里写死「加拿大节点统一用 Brew 装 Node LTS + 用官方脚本装 openclaw」,避免有人用 npm 全局、有人用 brew,导致两台机 doctor 结果不一致。
加拿大 M4 节点:Gateway 18789 与资源规划
Gateway 控制面默认监听 127.0.0.1:18789 时,CPU 开销主要来自请求编排与日志 IO;内存需同时容纳 Node 堆、通道缓冲与系统缓存。24GB 档远程机可给 Gateway 与常驻 agent 预留约 6–8GB 心理水位,其余留给编译或本地模型缓存;磁盘为日志与 npm 缓存单独预留分区或目录配额,避免与 Time Machine 或用户下载目录抢满根分区。跨区访问隧道与端口策略仍建议与 SSH 拓扑文章交叉核对。
常见报错与排查顺序
| 现象 / 日志关键字 | 优先检查 | 建议动作 |
|---|---|---|
command not found: openclaw(仅守护进程) |
plist PATH 或 ProgramArguments | 改为绝对路径;在 EnvironmentVariables 中补全 Homebrew 前缀 |
EADDRINUSE + 18789 |
重复启动或僵尸进程 | lsof -i :18789;launchctl bootout 后只加载一份 job |
Cannot find module / 版本漂移 |
npm 全局与 brew 混用 | 统一安装入口;删全局重复包后重装 |
401 / invalid token |
gateway.remote.token 或环境变量残留 |
重新 onboard;清代理剥 header 的配置 |
| 磁盘写满导致静默失败 | 日志目录与 npm cache | 日志轮转;把 cache 指到独立数据盘 |