花 10 美元(包邮)买根 4G 随身 Wi-Fi 棒,刷进 Debian 系统当家庭服务器,还能在里面塞进一个随时通过 Telegram 聊天的 AI Agent。开发者 Laurens Bosscher 最近晒出的这台 OpenStick 迷你主机,精准挠到了极客的痒处。但如果你真信了账面上那几个漂亮的内存数字,买回来照着抄作业,大概率要经历从刷机变砖到内存溢出的连环暴击。
这根比打火机大不了多少的塑料棒,常见搭载高通 MSM8916(骁龙 410)处理器,配有 4 个 1 GHz 的 64 位 ARM Cortex-A53 核心,CPU 算力与 Raspberry Pi Zero 2 W 处于同一级别。它自带 150 Mbit/s Wi-Fi、4G 调制解调器、GPS 和一颗可编程 LED,被动散热零噪音。真正的紧箍咒在存储和内存:4 GB 板载 eMMC 闪存的原始可用空间只有约 3.3 GB,512 MB 内存扣掉系统开销后,留给用户的可用空间仅约 450 MB。
就是在这 450 MB 的螺蛳壳里,Bosscher 用 systemd 和轻量容器引擎 Podman 一口气跑起了 9 个常驻服务:跳过投屏广告的 CastSponsorSkip、内网穿透 Cloudflare Tunnel(约 8–20 MB)、替代 Grafana 的监控面板 Beszel(Server 与 Agent 共约 20 MB)、容器日志界面 Dozzle、服务状态监控 Gatus(10 MB)、RSS 阅读器 Fusion(22 MB)、带网页归档的书签工具 Shiori(约 10–20 MB)、镜像更新提醒 Diun(9 MB),外加两个重头戏——自改版 AdGuard Home Next-Gen 和 AI 框架 Zeroclaw。
40MB 拦截百万域名背后的峰值暗礁与误杀账本
智能电视偷偷做内容识别,洗衣机扫描局域网,连咖啡机都在往外发数据。为了堵住这些物联网设备的暗门,Bosscher 在小棒子里部署了 AdGuard Home,把家庭 DNS 查询的拦截率拉到了 60%(仪表盘记录 12,536 次查询中拦截了 8,091 次)。
但原版 AdGuard Home 是个内存大户。桌面合成基准测试显示,仅处理 100 万条简单域名规则,上游原版的 urlfilter 引擎就会让物理内存占用(RSS)暴增 155.0 MiB。放到只有 450 MB 可用内存的 OpenStick 上,规则列表一大就会直接把机器撑死。
Bosscher 的解法是自己动手改出一套 AdGuardHome-Next-Gen 分支,宣称无论拦截列表多大,内存都稳在 40 MB。他做到的核心机制,是把简单域名规则存成内存映射文件(mmap)里的排序哈希,直接借用 Linux 页面缓存(page cache)来省掉应用层内存对象。在 100 万条规则的测试中,生成的哈希索引文件只有 4.8 MiB。
天下没有白省的内存,翻开作者自己的基准测试文档,就能看到博文中没细说的两笔暗账。
第一笔账是稳态与峰值的剪刀差。在 465 MiB 可用内存的 aarch64 OpenStick 设备上,加载包含 HaGeZi TIF 在内的 218 万条规则时,日常稳态 RSS 确实只有约 47 MiB;但每当规则列表触发更新重建(Rebuild),峰值 RSS 会蹿升到 122 MiB,在 138 万条特定威胁情报源负载下甚至高达 139 MiB。即便是桌面合成测试,构建 100 万条记录后也会立即产生 72.3 MiB 的瞬态内存增长。一次后台列表更新,瞬间就要吃掉整台设备近三分之一的可用内存。
第二笔账是精确度折损。为了压缩体积,Next-Gen 默认采用 40-bit 短哈希。在 218 万条全量负载实测中,这套机制出现了 3 次哈希碰撞。用极小概率的过度拦截(误杀正常域名),换取低端硬件的存活空间,这是一笔算得很精的工程折中,但绝不是毫无代价的免费午餐。
3MB 跑起 AI Agent 的口径游戏与物理沙箱逃课术
家庭实验室软件栈正在经历一场去臃肿化迁移。过去极客喜欢在家里搭 Kubernetes 集群、挂 Grafana 监控,再跑个动辄吃掉上吉字节内存的 AI 框架;现在大家开始用 Rust 和 Go 写的轻量工具给系统瘦身。
最具代表性的是 AI Agent 框架的换血。拥有约 394k stars 和 82.8k forks 的明星项目 OpenClaw,官方文档最低内存要求就是 1 GB(推荐 2 GB+),其 v2026.10.5 版本在 Linux ARM64 上连对话都还没开始,实测内存占用就高达 1.89 GiB,还经常在更新时搞崩既有工作流。Bosscher 弃暗投明,换上了社区规模约 33.2k stars、5k forks 的轻量替代品 Zeroclaw(期间也考察过 Picoclaw 与 Nullclaw),并在博文中给出了一个极具冲击力的数字:空闲占用仅约 3 MB RSS。
| 对比维度 | OpenClaw (传统重栈) | Zeroclaw (边缘轻量栈) | 真实工程落差与隐患 |
|---|---|---|---|
| 社区规模 | 约 394k stars / 82.8k forks | 约 33.2k stars / 5k forks | 头部生态与文档成熟度仍有量级差距 |
| 内存开销 | 最低要求 1GB,实测达 1.89 GiB | 标称空闲 ~3MB,容器分配 64MB | 3.9–4.1MB 仅为单次 CLI,守护进程启动占 28MB |
| 历史漏洞 | GHSA-3mq7-q27j-mq7q | GHSA-93f6-34w8-5g98 | 两者均曝出过越权执行或任意文件写入漏洞 |
我对这个 3 MB 的宣传口径不太买账。查证项目文档与测试记录就会发现,所谓 3.9–4.1 MB 的峰值内存,早期是在 macOS ARM64 上运行 --help 和 status 这类短生命周期 CLI 命令测出来的瞬时值。一旦作为常驻服务跑起来,其 v0.6.8 版本的 Slack 守护进程启动就要吃掉 28 MB RSS;更要命的是,社区 Issue #5313 曾报告在 Slack Socket Mode 下,仅仅空闲两小时,内存就从 28 MB 暴涨到了 460 MB+。在小内存设备上,一次内存泄漏就足以触发系统 OOM 杀手。
最好的 AI 安全沙箱,有时候是一台只值 10 美元的独立废铁。
不过,Bosscher 在这台机器上干了一件极其聪明的事:他直接把 OpenStick 宿主机的近乎 root shell 权限交给了 Zeroclaw,自己在山上信号微弱时,通过 Telegram 发消息让 AI 检查系统日志和磁盘空间(他还顺手给项目提交了 PR #11862 增加 Telegram 富文本消息支持)。
在主力服务器上给 AI Agent 开放 root 权限无异于引狼入室。要知道,Zeroclaw 在 0.8.4 及更早版本中刚曝出过安全漏洞 GHSA-93f6-34w8-5g98(0.8.5 已修复),开启可选 plugins-wasm 构建时可能因恶意插件路径导致任意文件写入和代码执行;老大哥 OpenClaw 也曾披露过跨工作目录重用执行审批的漏洞 GHSA-3mq7-q27j-mq7q(2026.8.1 修复)。软件层面的沙箱总有百密一疏的时候,但把 Agent 关进一台物理隔离、不存核心机密、只花 10 美元买来的随身 Wi-Fi 棒里,爆炸半径(Blast Radius) 就被锁死在了这根塑料棒内。用廉价硬件做物理隔离,比在主力机上叠床架屋地写权限策略划算得多。
十美元盲盒的背面:基带铁律与搜不到星的 GPS
如果你看完也想淘一根 OpenStick 回来折腾,先泼三盆冷水。
这种华强北流出的廉价随身 Wi-Fi 本质上是硬件盲盒。哪怕塑料外壳一模一样,里面的主板和设备树也可能天差地别。刷机前必须先识别具体的 PCB 型号与版本(比如常见的 UZ801 v3.0 或 UFI001C),并在高通紧急下载模式(EDL)下执行 edl rf orig_fw.bin 备份原厂固件,尤其要单独保住 fsc、fsg、modem、modemst1、modemst2、persist、sec 这些基带与校准分区。少备份一步,刷错包就是一块彻底失联的废塑料。
硬件参数的纸面宣传同样不能全信。原文把 4G 调制解调器和 GPS 列为 10 美元的附赠卖点,但社区实测开启 NMEA 和原始位置报告后,连续挂机近 24 小时依然搜不到一颗卫星,大概率是阉割了 GNSS 硬件或根本没焊天线电路。就连极低功耗的说法也缺一把硬尺子:同级别的 Raspberry Pi Zero 2 W 在连 Wi-Fi 无头空闲状态下实测功耗为 0.504 W,四线程满载持续约 30 分钟功耗为 2.31 W,而 OpenStick 至今缺乏同条件下的标准化功耗实测。
- 风险.在 450 MB 可用内存设备上混跑 DNS 重建与常驻 AI 守护进程极易触发 OOM 死机,且随身 Wi-Fi 刷机若未备份
modemst1等基带分区将导致不可逆变砖。
古人讲,器小易盈。回看上世纪七十年代的早期微机,或是几年前树莓派还没涨价时的极客圈,硬件越是受限,越能逼出精妙的底层榨取术。今天这根 10 美元的 OpenStick 也是如此:它扯下了现代云原生与 AI 软件栈动辄吞掉几个 G 内存的遮羞布,也把 mmap 短哈希碰撞、峰值内存洪峰这些平时被大内存掩盖的工程代价,赤裸裸地摊在了桌面上。
