在 Android 手机上跑 DeepSeek Harness,我踩了 5 个官方文档不会提的坑
别人写「如何安装」,我写「装完会死在哪、怎么救」。
在 Android 手机 + Termux + proot 里把 DeepSeek Harness(DSH)当随身终端, 踩了 5 个 Google 都搜不到的坑,每个都附根因和修法。
我为什么写这个
DeepSeek Harness(DSH)官方文档默认环境是「一台正经的 Linux 服务器」。 我偏要在一台 Android 手机上把它跑起来当随身终端,于是踩了一堆官方文档 不会提、Google 也搜不到的坑。
这篇把 5 个坑 + 根因 + 修法原样记录。如果你也在 Android/Termux/proot 里 折腾 DSH,能帮你省大半天。
坑 1:FUSE 文件系统禁止硬链接 link(),session 落盘失败
现象:第一次「保存会话到磁盘」就报错,session 永远写不进去。
根因:Android 的 /sdcard 走 FUSE 文件系统,FUSE 不支持硬链接 系统调用 link()。DSH 落盘 session 的代码用了 link() 做「原子写」, 在 ext4 上没问题,一碰 FUSE 就挂。
修法:把所有 link() 换成 rename()(rename 在 FUSE 上支持,且同样 能原子替换):
link(tmpfile, finalfile) # FUSE 上失败
rename(tmpfile, finalfile) # FUSE 上正常
坑 2:dsh web 启动假死,DSH_HOME 不设就卡住
现象:进程「起来了」但界面死等;netstat 读不到端口,以为没起; 结果 curl 一测其实是通的。
根因:web 模式启动会读写 DSH_HOME 指向的目录,没设置时它在不存在的 默认路径上兜圈子,表现为「起了但没完全起」。
修法:
export DSH_HOME=/data/data/com.termux/files/home/.dsh
dsh web
坑 3:CLI 的三个行为坑
3.1 --help 会阻塞:本该秒出帮助,某些版本却卡住不返回,直接 Ctrl+C。
3.2 headless 不支持连续对话:它不是一问一答的 REPL,每轮都要重新发起, 想连续对话得靠外部包装脚本维持上下文。
3.3 --resume 参数位置敏感:放错位置不生效或报错,正确姿势:
dsh <subcommand> --resume <session_id> # 靠后、紧跟子命令
坑 4:web 模式在手机上基本无解,走 CLI 才是正道
sharp 图像库性能极差,页面动不动卡死。在 Android/proot 这种非原生环境, 放弃 web、走 CLI:轻量、无需图像处理、还能嵌进脚本配合语音输入。
坑 5:配图别用 AI 文生图,中文必乱码
AI 文生图画中文,出来全是形近乱码「天书」。改用 HTML/SVG 代码排版渲染 成 PNG,文字 100% 准确。这也是技术文章配图最专业的做法。
顺带:DSH 的 CLI 没有 plugin 子命令,别按插件那套调用。
总结
| 坑 | 根因 | 修法 |
|---|---|---|
| 1 | FUSE 不支持 link() | 换成 rename() |
| 2 | DSH_HOME 未设导致 web 假死 | export DSH_HOME |
| 3 | CLI 三个行为坑 | headless 用包装脚本 |
| 4 | web 在手机无解 | 走 CLI |
| 5 | AI 文生图中文乱码 | HTML/SVG 渲染 |
📌 完整仓库 + SVG 源文件见 GitHub:a13418414529/dsh-android-guide