记这几天在 x86 版 OpenHarmony(KaihongOS)上折腾软件包生态的事

包我上传到了百度网网盘,分享大家:通过网盘分享的文件:bundle-x86-20261011
链接: https://pan.baidu.com/s/1xmQjaFwjWzVqjWVy_0wWyg?pwd=m4fq 提取码: m4fq

这事儿是干嘛的

先交代背景。Harmonybrew 是一个给 OpenHarmony 设备用的 Homebrew 移植版——就是 macOS 上那个 brew install 的兄弟。之前它只有 arm64 版本,跑在麒麟 X90 那类芯片的电脑上。而 x86 版的 OpenHarmony 设备(比如 KaihongOS 的 x86 机器)生态基本是荒地:系统自带 toybox 那几十个命令,没有包管理器,没有编译器,想要个新工具基本靠祈祷。

我的目标很简单:让 x86 版也能 brew install,而且要快、要全、要能一键复制到任何一台同款设备上。

听起来是"移植"活儿,实际上是把一个为 macOS 设计的包管理器,塞进一个为手机设计的操作系统里。这两者的隔阂比想象中大得多。

第一课:没有环境就造环境

QEMU 用的菜鸟5同学的镜像,开始是存储不足,让opencode扩容了一下。真机是 KaihongOS 5.0.2.60 ,同样的 musl libc,同样的 toybox。区别只有两个——QEMU 的根文件系统是只读的,内存只有 4G。整个后半程的开发都在 QEMU 里完成,真机反而成了"交付目标"。

第二课:坑是成串出现的

如果你以为移植工作是一路 A 去 B 的直线,那一定没在国产系统上装过软件。这几天踩的坑我自己数了数,光记进文档的就有三十多个。挑几个有意思的说:

brew 说:你的 CPU 太老了。 Homebrew 硬性检查 SSSE3 指令集,QEMU 默认的 CPU 模型偏偏没有。给 QEMU 加参数就行——但 -cpu host 不行,-cpu max 也不行(WHPX 加速模式直接罢工),最后用的是 qemu64,+ssse3,+sse4.1,+sse4.2 这种最保守的写法。

tar 说:磁盘满了。 实际上磁盘还有 800M。真相是 toybox(系统自带的瑞士军刀命令集)的 tar 在小盘上会报假空间错误,另外它压根解不了 GNU 的硬链接包,而且解包失败还报成功。这个坑伪装得极好,我一度以为硬盘坏了。

shell 脚本集体装死。 最阴的一个。brew 的各种 shim 脚本第一行写着 #!/usr/bin/zsh,而 QEMU 系统里 /usr/bin 整个目录都不存在(根文件系统只读,建不了)。表现不是"找不到命令"这么直白,而是各种进程无限递归把 CPU 吃满、curl 悄悄失败、configure 探测永远通过不了。最后定位到要改三个目录下的所有脚本——漏一个角落,编译产物就少了半截(比如 libz.so 永远编不出来,只剩静态库)。

Node 说:你的 OpenSSL 太老了。 装好 node 22 之后 crypto 直接报符号缺失。brew 环境里的 OpenSSL 是 3.0,node 要 3.5 的符号。解决方案很朴素——再从 Alpine 仓库拉一份新的 OpenSSL,放进 node 自己的目录,谁的孩子谁抱走。

这些坑有个共同点:每一个单看都很蠢,连起来就是一部血泪史。好在每一个我都记了编号写进文档(#47 到 #79),下次复装零补丁。

第三课:验证一次不算数

环境调通之后我干了一件当时觉得费时间、事后觉得最值的事:把整个系统打包,清空现场,从包重装一遍,再全量验证。

具体来说就是把 QEMU 里调好的环境切成 8 个分卷(1.9G),写了个 POSIX sh 安装器,然后把现场所有目录挪走,从零装回来,跑全套检查——brew 编译 zlib、Node 跑加密、opencode 起 HTTP 服务。全绿之后,这个包才算"真的能装"。

事实证明这步省不得。第一版包就暴露出 coreutils 硬链接解不开、安装器会留下旧版残留等问题——都在真机装机前拦住了。

交付

真机回来的时候,整个过程快得有点不真实:

hdc file send(8 个分卷)     6 分钟
sh install-x86.sh            一次通过
全套验证                      全绿

brew config 里 Clang 显示 OK 的那一刻,zlib 源码编译 12 秒出包,node 22 一行 crypto 代码跑通,opencode 的 web 界面从浏览器打开——这台国产系统的 x86 机器,第一次有了完整的类 Unix 开发环境。

现在这台机器上有:brew(含源码编译工具链)、Python 3.12 全功能、CMake、Node 22 + npm、bash 5.2 和 zsh 5.9(带命令历史)、opencode(终端 AI 编程助手)。全部落在 /data 分区,不碰系统分区,卸载就是删目录。

写给同样想折腾的人

三句话总结经验:

  1. 别等环境。真机不在就用 QEMU,QEMU 的局限性本身就是一份测试用例清单——只读根文件系统逼出的所有绕行方案,到了真机上都是白赚的兼容性。
  2. 坑要记账。每个坑记编号、记根因、记修法。这次 33 个坑的账本,就是下一次复装的零成本。
  3. 打包前先清场验证。"在我机器上是好的"和"装到任何一台机器上都是好的"之间,隔着一轮清空重装。

完整的过程文档、踩坑清单和分发包都在项目仓库里。下一步想把 Tier-2 的软件包批量编译跑起来,让 brew install 能直接命中的东西再多一些——Arm 版已经验证过的路,x86 版跟着走就行。


2026-10-11,于 KaihongOS x86 设备全绿之日

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐