EulerMaker & Yocto & Open Build Service
- 1 介绍
- 1.1 概述
- 2 工具
- 2.1 Yocto 【嵌入式领域】
- 介绍
- 目标
- 好处
- 三大关键组件
- 创建流程
- 发行版本
- 2.2 Open Build Service 【OBS】【服务器领域】
- 介绍
- 应用
- 2.3 EulerMaker 【全场景】
- 介绍
- 特性
- 需求背景
- (1)能支持全场景
- (2)新的构建系统要集成测试流程
- (3)强大的定制能力
- (4)统一的包格式
- 附 吴峰光博士 介绍
- 3 openEuler
- 3.1 openEuler 使用 OBS 【服务器场景】
- 3.2 openEuler Embedded 使用的工具 Yocto 【嵌入式场景】
- 3.3 嵌入式特色
- 其他
- Buildroot
- 参考
1 介绍
1.1 概述
linux 开发中涉及系统构建、软件构建等,本文做一些工具用途知识普及。
服务器领域的 OBS、嵌入式领域的 Bitbake【Yocto】,是各自领域的代表性构建系统,历史悠久。而 Euler系统领域 后来者 EulerMaker 想实现全场景统一构建系统。
2 工具
2.1 Yocto 【嵌入式领域】
Shape the future of customizable embedded Linux.
介绍
Yocto 项目(YP)是一个开源协作项目,可帮助开发人员创建基于 Linux 的自定义系统,而不受硬件架构的影响。该项目由 Linux 基金会于 2010 年宣布,并于 2011 年 3 月与OpenEmbedded等 22 个组织合作启动。
该项目提供了一套灵活的工具和空间,全球的嵌入式开发人员可以共享技术、软件堆栈、配置和最佳实践,可用于为嵌入式和 IOT 设备或任何需要定制 Linux 操作系统的地方创建定制的 Linux 映像。
Yocto 项目的重点是改进嵌入式 Linux 发行版的软件开发流程。Yocto 项目提供可互操作的工具、元数据和流程,可实现基于 Linux 的嵌入式系统的快速、可重复开发,其中开发流程的每个方面都可以自定义。支持ARM、MIPS、PowerPC和x86 / x86-64架构的定制Linux系统开发。
除了构建 Linux 系统之外,还可以生成用于交叉编译的工具链和针对其自身发行版定制的软件开发工具包(SDK)。该项目试图与软件和供应商无关。因此,例如,可以选择要使用的包管理器格式(deb、rpm或ipk)。
目标
- 为开源项目提供协作场所,进一步开发可定制的 Linux 平台和基于嵌入式系统的系统。
- 鼓励对 Linux 平台开发的现有组件进行标准化和重用。
- 专注于创建一个构建系统基础设施和技术,以满足所有用户的需求,并在已识别和实用的地方添加缺失的功能,并且源自 OpenEmbedded 架构。
- 确定涵盖定制 Linux 产品开发(从实验和概念验证到应用程序开发和生产)的工具中缺少功能的关键领域。
- 记录可用的方法和工具,并使用户能够轻松使用它们。
- 尽可能确保这些开发的工具在架构上是独立的。
- 进一步教育社区了解这种标准化和协作在 Linux 社区和行业中的好处。
好处
三大关键组件
-
BitBake ——实质上就是 Yocto 的构建系统引擎。它负责创建配方——构建特定系统所需的任务列表——以及解析元数据和执行配方。
-
OpenEmbedded-Core ——元数据。它保存了创建系统所需的基本配方、相关文件和类。构建时设定为通用,以便适用于各种基于 OpenEmbedded 的系统。
-
Poky ——包含一个基于 Linux 的全平台构建工具和各种其他技术,帮助各大团队以可靠的方式快速地开发新系统。Poky 基于各种架构生成文件系统镜像。其中的典型示例就是 QEMU 全系统仿真,一种极其出色的嵌入式软件测试平台。
创建流程
发行版本
发行 | 代码名称 | 日期 | 支持 |
---|---|---|---|
5.1(未来版本) | 斯蒂赫德 | 10/2024 | 05/2025 |
5.0 (LTS) (当前稳定版本) | 斯卡斯盖普 | 04/2024 | 04/2028 |
4.3 (旧版本,不再维护) | 南比尔德 | 11/2023 | 05/2024 |
4.2 (旧版本,不再维护) | 米克尔多尔 | 05/2023 | 停产 |
4.1 (旧版本,不再维护) | 兰代尔 | 10/2022 | 停产 |
4.0 (LTS) (旧版本,但仍在维护) | 柯克斯通 | 05/2022 | 04/2026 |
3.4 (旧版本,不再维护) | 霍尼斯特 | 2021 年 11 月 | 停产 |
3.3 (旧版本,不再维护) | 哈德诺特 | 2021 年 4 月 | 停产 |
3.2 (旧版本,不再维护) | 盖茨加斯 | 2020 年 11 月 | 停产 |
3.1 (LTS) (旧版本,但仍在维护) | 邓费尔 | 2020 年 4 月 | 04/2024 |
3.0 (旧版本,不再维护) | 宙斯 | 2019 年 10 月 | 停产 |
2.7 (旧版本,不再维护) | 战士 | 2019 年 4 月 | 停产 |
2.6 (旧版本,不再维护) | 砰 | 2018 年 11 月 | 停产 |
2.5 (旧版本,不再维护) | 相扑 | 2018 年 4 月 | 停产 |
2.4 (旧版本,不再维护) | 洛可 | 2017 年 10 月 | 停产 |
2.3 (旧版本,不再维护) | 火焰兵 | 2017 年 4 月 | 停产 |
2.2 (旧版本,不再维护) | 莫蒂 | 2016 年 10 月 | 停产 |
2.1 (旧版本,不再维护) | 克罗格斯 | 2016 年 4 月 | 停产 |
2.0 (旧版本,不再维护) | 叶忒罗 | 2015 年 10 月 | 停产 |
1.8 (旧版本,不再维护) | 菲多 | 2015 年 4 月 | 停产 |
1.7 (旧版本,不再维护) | 晕眩的 | 2014 年 10 月 | 停产 |
1.6 (旧版本,不再维护) | 雏菊 | 2014 年 4 月 | 停产 |
1.5 (旧版本,不再维护) | 多拉 | 2013 年 10 月 | 停产 |
1.4 (旧版本,不再维护) | 迪伦 | 2013 年 4 月 | 停产 |
1.3 (旧版本,不再维护) | 丹尼 | 2012 年 10 月 | 停产 |
1.2 (旧版本,不再维护) | 丹齐尔 | 2012 年 4 月 | 停产 |
1.1 (旧版本,不再维护) | 爱迪生 | 2011年10月 | 停产 |
1.0 (旧版本,不再维护) | 伯纳德 | 2011 | 停产 |
0.9 (旧版本,不再维护) | 拉维恩 | 2010 | 停产 |
- 未来版本:带有将来发布计划的版本。
- 当前稳定版本:当前推荐使用的稳定版本。
- 旧版本,不再维护:已经停止更新和维护的版本。
- 旧版本,但仍在维护:虽然不是最新,但仍在继续维护的版本。
- 停产:产品已经停止生产,不再提供支持。
2.2 Open Build Service 【OBS】【服务器领域】
介绍
Open Build Service (OBS,开放构建服务,以前称为openSUSE Build Service) 是一个通用系统,用于以自动、一致和可重复的方式从源代码构建和分发二进制包。 您可以为各种操作系统和硬件体系结构发布软件包以及更新、附加组件、设备和整个发行版。应用在 SUSE Linux Enterprise Server 、openSUSE、Red Hat Enterprise Linux、Mandriva、Ubuntu、Fedora、Debian和Arch Linux。此外,OBS也能构建特定产品与应用程序。
Open Build Service 软件本身在 GPL 协议下发布。 Linux 基金会已经把该项目添加到 Linux 开发者网络 (LDN),认可了OBS对更广泛的Linux社区的作用。 此外,各种公司以及 MeeGo 项目、Tizen 和 EulerOS 正在使用OBS来开发他们的发行版。
build.opensuse.org支持 6 种架构上的 21 种操作系统,并且 OBS 提供对打包过程的完全控制,使其成为终极打包平台。
应用
- redhat
- debian
- ubuntu
- …
2.3 EulerMaker 【全场景】
介绍
EulerMaker 是一个支持软件包、文件级剪切的统一构建工具,目标替代 OBS 和 Yocto,如今 OBS 已经替代,替代 Yocto,还在努力中。
统一构建平台是一款软件包构建平台,实现从源码到二进制软件包与软件仓库的平台服务。该平台通过统一的软件包配置管理,软件包依赖关系分析,实现基于依赖关系的软件包高效构建。帮助开发者与合作伙伴建设自己的用户个人仓,OS核心仓,构建门禁能力。
openEuler 社区一开始是用 OBS 来构建的,2022 年 3 月,openEuler 团队开始设计新的构建系统 EulerMaker,致力于替代 OBS 和 Yocto。
特性
EulerMaker 构建系统是一款软件包构建系统,完成源码到二进制软件包的构建,并支持开发者通过搭积木方式,组装 和 定制出适合自己需求的场景化 OS。主要提供增量/全量构建,分层定制与镜像定制的能力。
增量/全量构建,基于软件包变化,结合软件包依赖关系,分析影响范围,得到待构建软件包列表,按照依赖顺序下发并行构建任务。
构建依赖关系,提供工程软件包构建依赖表,支持筛选及统计软件包依赖及被依赖的软件包内容。
分层定制,支持在构建工程中,通过选择与配置层模型,实现对软件包的patch构建依赖、安装依赖、编译选项等内容的定制,完成针对软件包的场景化定制。
镜像定制,支持开发者通过配置repo源,生成iso、qcow2、容器等OS镜像,并支持对镜像进行软件包列表定制。
分层定制,支持在构建工程中,基于 spec 或 yaml,叠加配置层模型,实现针对软件包的版本、patch、构建依赖、安装依赖、编译选项及构建流程等内容的定制。
镜像定制,支持开发者通过配置 repo 源,生成 iso、qcow2、容器等 OS 镜像,并支持对镜像进行软件包列表定制。
支持本地任务复现,通过命令行在本地复现构建任务,方便定位构建问题。
一键工程创建,基于yaml配置实现一键工程创建,支持批量加包,大大简化用户操作。
需求背景
(1)能支持全场景
就服务器 OS 来说,OBS 构建可能够用;但是当一个操作系统要支持全场景【含嵌入式】,复杂度就大大增加,对构建系统提出了更严苛的要求。
如下摘自–吴峰光博士
“服务器领域的 OBS 主打能力是什么?几大主流的 Linux 发行版它都支持,比如可以给 Redhat 打包,也可以给 Debian 打包。兼容并包是它的核心设计目标,适应了 Linux 多样化的现状。但我们认为,多样化在早期对 Linux 发展有利,但长期而言,Linux 生态的碎片化是一个需要被解决的问题。”
“嵌入式领域的 Bitbake 采用了面向任务和过程的 DSL 描述语言,这使得它非常灵活强大,但自由度和复杂性过高,以学习曲线陡峭知名。现在流行的理念是如 YAML、JSON 等通用、声明式的配置语言,和函数式编程,以实现低门槛、易理解、可控可重复的构建过程。”
(2)新的构建系统要集成测试流程
如下摘自–吴峰光博士
“在 Linux 发展的最初阶段,需求是简单的:只要功能实现了,跑一下 gcc / make 能构建出来,用户能用,构建系统的工作就完成了。那时侯 Linux 社区对测试不重视,也还没有 CI / CD 的概念,测试基本全靠用户踩坑。现在情况就不一样了,时代的要求在提高:开发者期望有质量把控,要做测试,要有一整套的构建测试 CI / CD,要覆盖一整个开发流程,一站式全部搞定,出来的 RPM 包已经是经过测试的、用户能放心用的。这已经被开发者认为是标配,是开发者的正常预期。”
“市面上的 CI / CD 通用测试服务,适合测试上层的应用;而操作系统需要测试的,既有上层软件,又有基础软件;既面向应用开发者,又面向内核开发者,还有软件厂商、硬件厂商、OS 厂商,他们都有独特的测试需求;既要做功能测试,还要做性能测试。这些不是市面上通用 CI / CD 能做的。所以,我们需要一套全栈系统,既能构建,又满足上述所有测试需求。”
早在 2020 年,吴峰光就综合分析上述需求,设计了 Compass-CI。Compass-CI 被设计为一个通用的任务执行系统,可以执行构建、功能测试、性能测试等各类任务。Compass-CI 也被设计为一个异构调度系统,可以调度物理机、虚拟机、容器等各种资源。
(3)强大的定制能力
如下摘自–吴峰光博士
“一个通用的 OS,所带的软件往往要求大而全,把常见的功能都编进去。但很多场合有着不同的需求,比如启用一个不常用的功能,或者在嵌入式设备上,因为资源受限,需要把不必要的功能裁减掉。”
类似的,当我们说一个 OS 支持全场景,是只需维护一套 OS 源代码,通过源码级 + 镜像级定制,即可构建生成各类场景化的二进制 OS 发布。强大的定制能力,是赋能一套 OS 源码支持全场景的‘究极魔法’。”
“我们引入了开发者们都很熟悉的 YAML 配置语言,用它来声明式的描述一个软件包。”
“比如您在一家大公司的基础设施团队,需要在 openEuler 基础上定制 Linux 内核,改一下 kconfig,加一个补丁。在过去,您可能需要拷贝一份 kernel.spec,然后直接在上面修改。这意味着维护上百行的 SPEC 文件,且时不时要从上游回合新的改进,这一过程枯燥而繁琐。现在从 Fork 模式转为搭积木模式,只需维护好一个小小的 kernel.yaml 文件。然后每次拉新的 BaseOS 重新构建,都会自动拿到上游欧拉内核的最新错误修复。这样就很好的降低了开发维护成本,提高了安全性。是一种更加可持续的上下游协同演进方式。”
(4)统一的包格式
openEuler 现在采用的是业界主流的软件包格式之一:RPM 。这种软件包格式不仅仅被 Redhat Linux 使用,也被 openSUSE、OpenMandriva、Oracle Linux、Tizen 等使用。
为了一统软件包的定义,openEuler 采用了新的 YAML 配置语言进行包描述,并接管 RPM 的 SPEC 文件,成为新的开发者界面。吴峰光说,SPEC 文件中采用了大量复杂的宏定义,而 EulerMaker 将这些复杂性隐藏到YAML后面。换言之,openEuler 新的统一构建系统采用的 YAML 配置语言制定了一种更通用、更灵活的包定义。
附 吴峰光博士 介绍
2022 年末,openEuler Summit 2022 上,中国 Linux 内核圈最有影响力的开发者之一——吴峰光博士做了名为《面向全场景操作系统的构建服务发布》的主题演讲,正式向开发者披露了 openEuler 统一构建服务 EulerMaker。
吴峰光博士是著名的 Linux 内核贡献者、华为计算操作系统首席专家、openEuler 社区技术委员会委员。他在 Linux 内核领域上拥有卓越贡献,在 I/O 和内存管理、内核测试服务方面做出了重要的贡献。
3 openEuler
3.1 openEuler 使用 OBS 【服务器场景】
openEuler 社区一开始是用 OBS 来构建的,22年后使用 EulerMaker 替代 OBS。
3.2 openEuler Embedded 使用的工具 Yocto 【嵌入式场景】
由于openEuler Embedded是面向嵌入式场景的,其对构建系统的核心诉求是: 交叉编译、灵活的定制化与裁剪, 而openEuler现有的 OBS 构建系统更加适合服务器场景的大型OS构建,无法有效满足嵌入式场景的需求,所以 openEuler Embeddedd 的核心构建系统是基于Yocto,但又根据自身的需求做了很多定制化的开发。
3.3 嵌入式特色
-
南向生态:openEuler Embedded Linux 当前主要支持 ARM64、x86-64 两种芯片架构,22.03 LTS SP3 版本新增支持 RK3588 芯片,未来还将支持龙芯、飞腾等芯片。
-
嵌入式弹性虚拟化底座:openEuler Embedded 的弹性虚拟化底座是为了在多核片上系统(SoC,System On Chip)上实现多个操作系统共同运行的一系列技术的集合,包含了裸金属、嵌入式虚拟化、轻量级容器、LibOS、可信执行环境(TEE)、异构部署等多种实现形态。
-
混合关键性部署框架:构建在融合弹性底座之上,通过一套统一的框架屏蔽下层弹性虚拟化底座形态的不同,从而实现 Linux 和其他 OS 运行时便捷地混合部署。
-
北向生态:350+ 嵌入式领域常用软件包的构建;支持 ROS2 humble 版本,集成 ros-core、ros-base、SLAM 等核心包,并提供 ROS SDK,简化嵌入式 ROS 开发;提供软实时能力,软实时中断响应时延微秒级;集成 OpenHarmony 的分布式软总线和 hichain 点对点认证模块,实现欧拉嵌入式设备之间互联互通、欧拉嵌入式设备和 OpenHarmony 设备之间互联互通;支持 iSula 容器,可以实现在嵌入式上部署 openEuler 或其他操作系统容器,简化应用移植和部署。
-
硬实时系统(UniProton):是一款实时操作系统,具备极致的低时延和灵活的混合关键性部署特性,可以适用于工业控制场景,既支持微控制器 MCU,也支持算力强的多核 CPU。
其他
Buildroot
类似 yocto,yocto用户多,资源丰富,buildroot 用户少,资源少。
参考
1、官网–Yocto
2、wiki–Yocto
3、官网–Open Build Service
4、wiki–Open Build Service
5、openEuler Embedded–构建系统
6、[Develop and Maintain a Distro with Open Build Service](https://www.slideshare.net/slideshow/
develop-and-maintain-a-distro-with-open-build-service/14015521)
7、Yocto Project – Build your custom linux
8、Yocto 还是 Buildroot,构建自定义嵌入式系统时,您会选择哪一种?
9、《Embedded Linux Systems with the Yocto Project》
10、openEuler–EulerMaker用户指南
11、openEuler操作系统(创新项目总览)
12、EulerMaker:构建 openEuler 全场景生态
13、欢迎使用EulerMaker
14、“多重人格”的操作系统——openEuler
15、EulerMaker特色
16、openEluer Embedded BSP雪球计划
17、rockchip/documents/openEuler镜像的构建