这份指南是为 小米9 Termux (Ubuntu容器) 环境下专门定制的。如果你重装了系统,或者 OpenClaw 更新后重新出现 FTS5 错误,请严格按照以下步骤操作即可修复。


🦞 OpenClaw 修复指南 (FTS5 + Vector 完整版)

准备工作

确保你已经:

  1. 安装了 Termux。
  2. 在 Termux 中安装了 Ubuntu 容器(使用 proot-distro)。
  3. 在 Ubuntu 容器内安装了 Node.js 和 OpenClaw。

修复步骤

第一步:进入 Ubuntu 容器
如果还在 Termux 原始界面,先进入 Ubuntu:

1
2
proot-distro login ubuntu
# 或者你使用的登录命令

第二步:安装编译工具
在 Ubuntu 容器内,确保有编译环境(编译 better-sqlite3 需要):

1
2
apt update
apt install -y build-essential python3

第三步:进入 OpenClaw 安装目录

1
cd /data/data/com.termux/files/usr/lib/node_modules/openclaw

第四步:安装支持 FTS5 的数据库驱动
下载并编译 better-sqlite3,强制开启 FTS5 支持:

1
2
3
4
5
# 设置编译参数,开启 FTS5
export CPPFLAGS="-DSQLITE_ENABLE_FTS5"

# 安装并从源码编译
npm install better-sqlite3 --build-from-source

(等待几分钟,直到安装完成)

第五步:执行核心补丁 (关键步骤)
这是最重要的一步,用于欺骗 OpenClaw 使用新驱动,并修复加载扩展的错误。

直接复制并运行以下整段命令:

1
sed -i 's/require("node:sqlite")/(()=>{const b=require("better-sqlite3"); b.prototype.enableLoadExtension=function(){}; return {DatabaseSync:b} })()/g' dist/*.js

第六步:验证修复结果
运行状态检查命令:

1
openclaw memory status --deep

检查标准:

  • 看到 FTS: ready (全文搜索正常)
  • 看到 Vector: ready (向量搜索正常)
  • 没有红字报错 (如 fts unavailableenableLoadExtension is not a function)

💡 原理简述 (备忘)

  1. 问题根源:OpenClaw 默认调用 Node.js 内置的 node:sqlite,该模块在你的环境下未包含 FTS5 组件。
  2. 解决方案
    • 安装独立的 better-sqlite3 驱动(编译时带上了 FTS5)。
    • 通过 sed 命令修改 dist/*.js 文件,将程序内部的 require("node:sqlite") 替换为一段“适配代码”。
    • 这段适配代码不仅让程序使用新驱动,还补上了 enableLoadExtension 方法,确保向量搜索扩展也能正常加载。

⚠️ 注意事项

如果未来 OpenClaw 版本更新,可能会覆盖掉 dist/*.js 文件。如果更新后再次报错,只需重新执行 第五步 即可(不需要重新安装驱动)。