OpenClaw + BB-Browser 在 ARM64 Ubuntu 上的实战指南:绕过 Snap 陷阱,打通自动化采集链路

0 阅读5分钟

当 BB-Browser 遭遇 Snap 的铜墙铁壁

你在 ARM64 架构的 Ubuntu 服务器上部署 OpenClaw,试图通过 BB-Browser 驱动 Chromium 完成网页自动化——可能是数据采集、截图监控,或是流程自动化。命令行输入:

openclaw browser open https://www.baidu.com

期待中的页面加载没有出现,取而代之的是一行冰冷的错误:

Command '/usr/bin/chromium-browser' requires the chromium snap to be installed.
Please install it with: snap install chromium

你照做了。snap install chromium 顺利执行,但再次运行 OpenClaw,报错依旧:

Failed to create /root/.openclaw/browser/openclaw/user-data/SingletonLock: Permission denied (13)

这是 Snap 的沙箱机制在作祟。Snap 应用运行在严格的隔离环境中,无法访问宿主机的/root/.openclaw目录,BB-Browser 与 Chromium 之间的进程通信被彻底切断。更棘手的是,Google 官方并未提供 ARM64 架构的 Chrome 构建,传统的apt install google-chrome-stable在此架构下完全失效。BB-Browser 需要的是一个原生的、非隔离的 Chromium 实例,而 ARM64 生态中,这个需求恰好处于工具链的真空地带。

解决方案:Playwright Chromium + CDP 远程调试

核心思路: 让 Playwright 提供原生 ARM64 Chromium 构建,BB-Browser 通过 Chrome DevTools Protocol (CDP) 远程调试端口与浏览器建立连接 ,彻底绕过 Snap 的权限陷阱。

第一步:清理 Snap 与错误安装的残留

# 移除 Snap Chromium(如果已安装)
sudo snap remove chromium
# 删除可能存在的错误软件源
sudo rm -f /etc/apt/sources.list.d/google.list
sudo apt-key del 7FAC5991 2>/dev/null || true
# 卸载冲突包sudo apt-get remove -y google-chrome-stable 2>/dev/null || true
sudo apt-get update

第二步:安装 Playwright 与 ARM64 Chromium

Playwright 的核心优势在于维护跨平台的浏览器二进制分发,包括 ARM64:

# 安装 Playwright 命令行工具
npm install -g playwright
# 确保缓存目录权限正确(root 环境常见坑点)
mkdir -p /root/.cache/ms-playwright
chmod -R 755 /root/.cache/
# 下载 Chromium(自动识别 ARM64 架构)
playwright install chromium
# 验证安装结果
ls /root/.cache/ms-playwright/
# 输出示例:chromium-1124
# 确认是 ARM64 原生构建,而非 x86 模拟
file /root/.cache/ms-playwright/chromium-1124/chrome-linux/chrome
# 预期输出:ELF 64-bit LSB executable, ARM aarch64

关键验证 :此步骤安装的 Chromium 是独立二进制文件,不依赖 Snap 运行时,能够正常访问文件系统、创建进程锁,满足 BB-Browser 的底层需求。

第三步:创建持久化 CDP 服务

BB-Browser 默认尝试直接启动浏览器进程,但在 ARM64 + Snap 受限环境下,改为 浏览器作为独立服务运行,BB-Browser 通过 CDP 端口连接 是更稳健的架构。

创建系统服务文件

/etc/systemd/system/chromium-cdp.service

[Unit]
Description=Chromium CDP Service for BB-Browser
After=network.target
[Service]
Type=simple
Environment="PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright"
ExecStart=/root/.cache/ms-playwright/chromium-1124/chrome-linux/chrome \
  --headless=new \
  --no-sandbox \
  --disable-gpu \
  --remote-debugging-port=18800 \ 
  --disable-dev-shm-usage \
  --disable-software-rasterizer \
  --user-data-dir=/root/.openclaw/browser/openclaw/user-data \
  about:blank
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target

注意 :将chromium-1124替换为实际版本号

(通过ls /root/.cache/ms-playwright/确认)。

启动并验证服务:

systemctl daemon-reloadsystemctl enable --now chromium-cdp# 验证 CDP 端口已响应curl -s http://127.0.0.1:18800/json/version | head -5# 应返回包含 "Browser": "HeadlessChrome/..." 的 JSON

第四步:配置 OpenClaw 使用 BB-Browser 连接 CDP

编辑~/.openclaw/openclaw.json,启用 BB-Browser 的附加模式:

{
  "browser": {
    "enabled": true,
    "attachOnly": true,
    "headless": true,
    "noSandbox": true,
    "profiles": {
      "openclaw": {
        "cdpPort": 18800,
        "color": "#4F46E5"
      }
    }
  }
}

核心配置解析:

  • attachOnly:true—— 告知 BB-Browser 不要尝试启动浏览器,而是连接到已运行的 CDP 服务
  • cdpPort: 18800—— 与 systemd 服务中暴露的远程调试端口一致

第五步:验证 BB-Browser 与 OpenClaw 的协同

# 重启 OpenClaw 网关以加载新配置
openclaw gateway restart
# 检查浏览器状态
openclaw browser status
# 预期:显示 "openclaw" 配置文件为可用状态
# 执行实际任务
openclaw browser open https://www.baidu.com

成功验证:链路打通的标志

当你执行并在看到百度热搜时,以下链路已验证通畅:

结语:架构边界处的工程智慧

在 ARM64 服务器上运行 OpenClaw + BB-Browser 的完整链路,本质上是 在工具链的架构边界处寻找连接点

Google 未提供 ARM64 Chrome 构建,Snap 隔离了进程权限,BB-Browser 的默认启动模式假设了一个可直接调用的浏览器二进制——这三重限制叠加,构成了一个看似无解的死锁。但工程问题的解法往往不在于强攻,而在于 重新设计连接方式

Playwright 的跨平台浏览器分发打破了架构限制,CDP 远程调试协议打破了进程启动的耦合,OpenClaw 的模式打破了本地依赖的假设。三者组合,在 ARM64 Ubuntu 上重建了一条与 x86 环境功能等价的自动化链路。

这套方案的价值不仅在于"能工作",更在于 可复现、可维护、不依赖 hack 。你不再需要担心 Chrome 版本更新后找不到 ARM64 构建,不再需要为 Snap 的权限错误深夜调试,不再需要维护一个脆弱的自定义编译脚本。

BB-Browser 与 Chromium 的通信,最终回归到一个简单的 HTTP WebSocket 连接——协议的标准化,正是复杂系统能够跨架构协同的根基。

欢迎关注我的公众号(onething365),最新的技术与你分享