OERV 之 Pretask
pretask 作为社区入门探索,目的是帮助实习生一起搭建工作环境,熟悉 oerv 的工作流程和合作方式。pretask 分为三个步骤:
- 任务一:通过 QEMU 仿真 RISC-V 环境并启动 openEuler RISC-V 系统,设法输出 neofetch 结果并截图提交
- 任务二:在 openEuler RISC-V 系统上通过 obs 命令行工具 osc,从源代码构建 RISC-V 版本的 rpm 包,比如 pcre2。提示首先需要在 openEuler 的 OBS 上注册账号
- 任务三:尝试使用 qemu user & nspawn 或者 docker 加速完成任务二
Pretask 1: Neofetch
任务一:通过 QEMU 仿真 RISC-V 环境并启动 openEuler RISC-V 系统,设法输出 neofetch 结果并截图提交
由于工作内容是对软件包进行: 编译 -> 失败 -> 定位问题 -> 修复 -> 重新编译,所以我们倾向于直接从源码编译,根据 neofetch wiki 从 git 拉取最新数据进行构建:
|
|
![](/images/oerv/openEuler-RISC-V-neofetch.png)
Pretask 2: Open Build Service (OBS)
任务二:在 openEuler RISC-V 系统上通过 obs 命令行工具 osc,从源代码构建 RISC-V 版本的 rpm 包,比如 pcre2。提示首先需要在 openEuler 的 OBS 上注册账号
观看教学影片: openEuler构建之OBS使用指导 - bilibili 并对比阅读
- Beginnerʼs Guide
- openSUSE:Build Service 新手入门
- 如何通过OpenSUSE Open Build Service(OBS)构建Debian包 for RISCV-64
了解掌握 OBS 的基本概念、OBS 网页 以及 OSC 命令行工具 的使用方法。
这部分内容很重要,和后续工作内容息息相关,在这里不要图快,打牢基础比较好。
OBS 的 Package 中 _service 配置文件,revision 字段是对应与 Git 仓库的 commit id (如果你使用的 Source Code Management (SCM) 方式是 Git 托管的话)
参考仓库: https://gitee.com/zxs-un/doc-port2riscv64-openEuler 内的相关文档
在 openEuler RISC-V QEMU 虚拟机内完成 OBS、OSC 相关基础设施的安装:
|
|
在 openEuler RISC-V QEMU 虚拟机内完成 pcre2 的本地编译构建:
|
|
![](/images/oerv/osc-build-pcre2.png)
总计用时 1301s
Pretask 3: 容器加速构建
任务三:尝试使用 qemu user & nspawn 或者 docker 加速完成任务二
参考 文档
由于 deepin 20.9 的 Python3 版本仅为 3.7,构建 osc 和 qemu 显然不太够,所以我通过 KVM 构建了一个 openEuler 22.03 LTS SP3 的虚拟机,在上面进行这项任务。
编译 QEMU 时常见错误修正:
|
|
openEuler 22.03 LTS SP3 没有预先安装好 nspawn,所以需要手动安装:
|
|
其余同任务二。
尝试使用 nspawn 来构建 pcre2:
|
|
会遇到以下报错 (且经过相当多时间排错,仍无法解决该问题,个人猜测是平台问题):
|
|
所以退而求其次,使用 chroot 来构建:
|
|
![](/images/oerv/osc-build-pcre2-chroot.png)
总计用时 749s,比 qemu-system-riscv64 快了将近 2 倍,效能提升相当可观。
References
- https://gitee.com/zxs-un/doc-port2riscv64-openEuler/blob/master/doc/build-osc-config-oscrc.md
- https://gitee.com/zxs-un/doc-port2riscv64-openEuler/blob/master/doc/build-osc-build-tools.md
- https://gitee.com/zxs-un/doc-port2riscv64-openEuler/blob/master/doc/build-osc-obs-service.md
- https://gitee.com/openeuler/RISC-V/blob/master/doc/tutorials/qemu-user-mode.md
- https://stackoverflow.com/questions/5308816/how-can-i-merge-multiple-commits-onto-another-branch-as-a-single-squashed-commit