ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

介绍一个容器化的鸿蒙环境

介绍一个容器化的鸿蒙环境 前言最近一年多以来我开展了一些与鸿蒙相关的开发工作。在开发过程中我做了一些自用的效率工具其中一个就是容器化的鸿蒙环境。现在我把这个自用的工具开源了https://github.com/hqzing/dockerharmony这个鸿蒙容器使我们能够使用 Linux 服务器来运行和测试我们的命令行程序而不用依赖 OpenHarmony 物理设备。环境准备要使用这个鸿蒙容器你首先要有一个 Docker 运行环境最好是 arm64 的硬件例如 arm 服务器、Mac 电脑、鸿蒙 PC 等。如果没有 arm64 硬件则需要通过 QEMU 进行指令集翻译性能极差。推荐使用 arm 服务器并且买在香港或国外的区域阿里云、华为云等云厂商有卖。因为后续你可能会需要从 GitHub 下载各种开源软件如果你的服务器位于中国大陆区域可能很多软件会下载不下来。鸿蒙 PC 原生环境不支持 Docker 和 Podman 等容器技术但可以在“融合开发引擎”官方虚拟机中使用 Podman 来运行容器。基础用法这个镜像同时上传到了 Docker Hub 和 GitHub Container Registry你可以任选其一从上面下载这个镜像使用。从 Docker Hub 拉取镜像并运行dockerpull hqzing/dockerharmony:latestdockerrun-itd--nameohos hqzing/dockerharmony:latestdockerexec-itohossh从 GitHub Container Registry 拉取镜像并运行dockerpull ghcr.io/hqzing/dockerharmony:latestdockerrun-itd--nameohos ghcr.io/hqzing/dockerharmony:latestdockerexec-itohossh工具获取为了保持轻量这个容器内默认只包含了一个最小化系统除toybox提供的少量基础命令和我内置的curl外不含其他开发工具。为了支撑实际的开发工作我们需要根据需求往里面安装工具。1. 快捷安装使用 Harmonybrew 包管理器目前Harmonybrew 项目已经可用。你可以在容器中直接安装此包管理器像在普通 Linux 或 Mac 上一样一键下载、更新和管理你需要的软件包。项目主页https://atomgit.com/Harmonybrew2. 手动获取已移植的常用工具链如果你想手动集成或者参考相关工具的编译方法也可以直接使用我已经针对 OpenHarmony 平台移植并验证好的核心包。工具项目地址coreutilshttps://github.com/Harmonybrew/ohos-coreutilsbusyboxhttps://github.com/Harmonybrew/ohos-busyboxgrephttps://github.com/Harmonybrew/ohos-grepgawkhttps://github.com/Harmonybrew/ohos-gawkmakehttps://github.com/Harmonybrew/ohos-maketarhttps://github.com/Harmonybrew/ohos-targziphttps://github.com/Harmonybrew/ohos-gzippatchhttps://github.com/Harmonybrew/ohos-patchdiffutilshttps://github.com/Harmonybrew/ohos-diffutilsperlhttps://github.com/Harmonybrew/ohos-perlm4https://github.com/Harmonybrew/ohos-m4autoconfhttps://github.com/Harmonybrew/ohos-autoconftexinfohttps://github.com/Harmonybrew/ohos-texinfogithttps://github.com/Harmonybrew/ohos-gitrubyhttps://github.com/Harmonybrew/ohos-rubyzshhttps://github.com/Harmonybrew/ohos-zshbashhttps://github.com/Harmonybrew/ohos-bashvimhttps://github.com/Harmonybrew/ohos-vimopensshhttps://github.com/Harmonybrew/ohos-opensshpythonhttps://github.com/Harmonybrew/ohos-python当然你也可以根据 DockerHarmony 项目 README 中的操作指南直接去 Alpine Linux 的软件仓库获取或者寻找其他社区开发者移植好的产物。实践案例这个鸿蒙容器搭配上面给出的这些工具一起使用再加上 ohos-sdk就可以胜任很多开发工作了。上面贴出来的各种 ohos-xxx 工具里面除少量是在 Ubuntu 上面交叉编译出来以外大部分都是在鸿蒙容器中原生编译出来的。你可以尝试模仿这些项目里面的做法把鸿蒙容器作为编译环境或测试环境使用。迭代过程这个鸿蒙容器截止到现在已经经历了 3 个版本迭代现在开源出来的是最后一个最成熟的版本。第 1 个版本早期最简版本最开始做的时候OpenHarmony 还是 4.0 版本。当时只要编一份 arm64 架构的 rk3568 镜像把里面的 ramdisk.img 解压、打成 tar 包、导入到 Docker 中就能直接用。因为当时我找到的官方 rk3568 镜像只有 32 位的而我编的软件要在 64 位系统上进行测试所以需要自己编 64 位的系统。第 2 个版本事情逐渐变得复杂到了 OpenHarmony 5.1 版本的时候我对环境进行了一次升级。这时候发现 OpenHarmony 官方社区的日构建流水线里面就有提供 dayu200-arm64_5.1.0-Release 的产物不用我自己去编 64 位系统了。但是这个新版本带来了一个新问题单把 ramdisk.img 里面的内容导到 Docker 里面是跑不起来的因为这里面的 toybox 被改造了它依赖了一个 system.img 里面的 so。我不得不分别从两个镜像各取一部分内容放在一起导入到 Docker 中。第 3 个版本需要改造系统源码升级完版本之后发现它时不时会在各进程的 stderr 里面输出一些类似于HiLogAdapter: Cant connect to server.这样的报错。定位之后发现是 OpenHarmony 社区把 musl libc 进行了改造做了很多日志输出而且日志是对接到 HiLog 里面的。我在容器里面没有启动 init 进程也没把 HiLog 相关的东西带进来容器中自然就不会有 HiLog 服务于是 musl libc 没法通过 socket 跟 HiLog 服务进行通信因此就时不时会有错误日志从各个进程的 stderr 里面冒出来这会在一些情况下会导致业务异常。为了处理这个问题我只好放弃使用 OpenHarmony 官方编好的包又换回了自己编包的方案。只有这样做我才能通过改源码的方式去处理这个 musl libc 对 HiLog 的依赖问题。
返回列表