在鸿蒙PC上使用pkgsrc进行包管理
1 前言
本文是《在OpenHarmony设备上使用pkgsrc进行包管理》的续作。
在前文中,我们手动完成了 pkgsrc 在鸿蒙环境上的安装与使用验证,并走通了从软件源在线安装软件包的基础流程。但当时还遗留了两个问题:
- 没有支持鸿蒙 PC:鸿蒙 PC 上没有 root 权限,只能在应用沙箱中执行命令,前文的实验是在鸿蒙开发板和鸿蒙容器上完成的。
- 没有 pkgin:前文只能通过
pkg_add配合手动设置PKG_PATH来安装软件包,使用体验远不如 pkgin。
这段时间我把这两个问题都解决了,并搭建了一套完整的 CI/CD 流水线和分发体系,发布了 pkgsrc-ohos 项目。现在用户可以开箱即用地在鸿蒙上使用 pkgsrc,包括鸿蒙 PC。本文就来讲讲这些进展。
2 现在的使用体验
先看效果。以鸿蒙 PC 为例,只需三步:
# 第一步:下载并解压 bootstrap kit
curl -f -O https://cdn.pkgsrc-ohos.com/bootstrap/bootstrap-2025Q4-arm64.zip
unzip -uq bootstrap-2025Q4-arm64.zip -d /storage/Users/currentUser
export PATH=/storage/Users/currentUser/.pkg/bin:/storage/Users/currentUser/.pkg/sbin:$PATH
# 第二步:更新包索引
pkgin update
# 第三步:安装软件包(以 xz 为例)
pkgin install xz
鸿蒙开发板和鸿蒙容器也类似,只是 bootstrap kit 的格式和安装方式略有不同,具体可参考项目文档。
跟前文相比,你不需要再手动准备工具链、下载源码树、打补丁、bootstrap、搭建软件源……全部都省了。下载一个压缩包,加一下 PATH,直接就能用 pkgin 装软件。
3 鸿蒙 PC 的适配思路
前文中我分析过,鸿蒙 PC 上有两大挑战:一是 uname 返回值不是 Linux,二是没有 root 权限。这次适配的核心思路就是绕过这两个问题,而不是正面硬碰。
3.1 uname 问题
由于鸿蒙 PC 的 uname 返回值不是 Linux,在鸿蒙 PC 上直接进行源码编译会触发各种平台识别问题。但我们完全可以不在鸿蒙 PC 上编译——在 OpenHarmony(开源鸿蒙)上把二进制包构建好,然后在鸿蒙 PC 上只做在线安装就行了。
OpenHarmony 用的就是 Linux 内核,uname 返回值是 Linux,编译过程不存在任何平台识别问题。而编译出来的二进制文件,只要安装路径对得上,在鸿蒙 PC 上就能正常使用。
这个思路本质上是把“构建”和“使用”解耦了:构建在 OpenHarmony 上做,使用在 HarmonyOS 上做。
3.2 root 权限与安装路径
鸿蒙 PC 上没有 root 权限,只能在应用沙箱中执行命令。应用沙箱中的用户家目录是 /storage/Users/currentUser,因此我把 pkgsrc 的安装前缀设为 /storage/Users/currentUser/.pkg。
鸿蒙开发板和鸿蒙容器有 root 权限,只要创建出同名目录,就能使用同一套 bootstrap kit,三者统一。
3.3 代码签名
鸿蒙 PC 上未签名的二进制文件无法执行。因此在构建阶段需要启用代码签名,pkgsrc-ohos 通过在 mk.conf 中加入 OHOS_CODE_SIGN+=yes 来实现自动签名。这个配置只在构建时生效,对用户透明。
4 流水线与分发体系
要让用户开箱即用,光解决适配问题还不够,还需要一套自动化的构建和分发体系。不可能让用户自己去跑前文那一大堆手动操作。
4.1 项目组成
pkgsrc-ohos 项目由四个仓库组成:
| 仓库 | 功能 |
|---|---|
| ci-runner | Docker 容器镜像,提供 ohos-sdk 及编译工具链的完整构建环境 |
| pkgsrc | pkgsrc 2025Q4 的 fork,包含鸿蒙适配补丁(dl 库、ranlib、m4 等) |
| ci | GitHub Actions 工作流与构建脚本 |
| docs | 安装指南与贡献指南 |
其中 ci 仓库定义了两条流水线,是整个分发体系的核心:
- Bootstrap 流水线:在 arm64 容器中执行 pkgsrc bootstrap,预装 openssl、CA 证书、libfetch、pkgin,然后打包成 bootstrap kit 上传到云端。这个阶段只在工具链升级时才需要重新执行。
- Bulk-build 流水线:下载 bootstrap kit,遍历白名单中的软件包逐个编译,每编译完一个就上传到云端并更新包索引。支持增量构建——已存在的包会自动跳过。
所有制品存储在阿里云 OSS,通过 CDN 加速分发给用户。pkgin 的软件源地址在 bootstrap 阶段就被预配置好了,用户不需要手动设置 PKG_PATH。
4.2 为什么能跑在 GitHub Actions 上
有一个关键约束:目标平台是 arm64 架构的鸿蒙系统,所以构建环境必须是 arm64 的。GitHub Actions 在 2024 年开放了 arm64 runner(ubuntu-24.04-arm),这恰好满足了需求。整个构建过程在 arm64 架构的鸿蒙容器中完成,编译出来的二进制文件天然就是 arm64 架构的,无需交叉编译。
4.3 白名单机制
pkgsrc 源码树里面有超过两万个软件包,流水线只构建白名单中列出的软件包。白名单目前包含 pkgsrc 工具链自身的依赖以及一些常用基础库,后续可以逐步扩展。
如果想要新增软件包,需要先在 ci-runner 容器内做本地构建验证,确认能成功构建后,再把软件包及其级联依赖加入白名单。具体操作可以看项目文档中的贡献指南。
5 小结
从手动在鸿蒙开发板上跑通 pkgsrc bootstrap,到支持鸿蒙 PC 开箱即用,这条路的本质就是把“构建”和“使用”解耦——构建在 OpenHarmony 容器中通过流水线自动化完成,用户只需要下载 bootstrap kit,就能直接用 pkgin 装软件。
pkgsrc-ohos 目前仍然是 POC 项目,还有不少可以继续探索的方向。如果你感兴趣,欢迎基于 pkgsrc-ohos 进行二次开发或模仿其中思路实现自己的移植项目。项目中已经准备了完善的二次开发指南。
更多推荐




所有评论(0)