编者按:操作系统是一个大的软件集合,成百上千个软件之间有相互调用、相互依赖等各种复杂的关联关系,所以统一的软件包格式,能够更友好地管理、定义这些复杂关系。今天,龙蜥社区基础设施 Contributor 单凯伦带大家了解龙蜥社区官方构建平台 ABS,熟悉 Anolis OS 软件包、镜像构建流程以及 ABS 未来规划等。本文整理自龙蜥大讲堂 86 期,以下为本次分享内容:
01 ABS 介绍
(图 1/ABS 介绍)
ABS(Anolis Build Service),龙蜥社区官方构建平台。它提供免费、安全、可靠的一站式的构建能力,以及简单易用的编译构建环境。通过 ABS 可以完成 RPM 包、镜像 、内核源码、云原生等构建功能,支撑社区开发者构建和社区产品发行构建。同时 ABS 在软件包、镜像上的构建是可信构建,在构建环境、指令、源代码一致的情况下、构建产物也是完全一致的(Bit to Bit)。
02 系统架构
(图 2/ABS 系统架构介绍)
ABS 是一个分层设计实现的平台,从上到下依次是业务服务层、基础服务层、通用逻辑层、数据层、存储库、依赖服务。使用的存储库有 MySQL、Redis、NAS 和SLS等,依赖的服务有 Koji、Gtss、T-One 等。
- 最上层实现的业务层包括软件构建服务、镜像构建服务、内核源码构建服务、云原生构建服务、LifseaOS 构建服务、OOT 构建服务。
- 基础服务层包括 Koji 构建服务、机器调度服务、构建分发服务、软件包管理服务、镜像管理服务、日志服务、数据统计服务。
- 通用逻辑层包括软件包管理类、内核源码类、镜像管理类、云原生管理类等以及调度策略和构建分发策略。
- 数据层包括软件包 DAO、镜像 DAO、内核源码 DAO,云原生 DAO 和用户 DAO 等。
- 存储库包括 MySQL、Redis、NAS、SLS。
- 依赖服务包括 Anrel、Koji、Gtss、T-One。其中 Anrel 是对 Koji 服务做了一层封装,Gtss 是一个机器调度服务的系统,T-One 是一个测试服务平台。
图 2 右侧是日志切面,它对系统架构有全流程的日志监控,包括业务监控、监控系统,让所有日志都可追溯,也就是如果构建出现问题,方便开发者进行问题调试。
03 构建服务
- 软件包、镜像构建
(图 3/构建服务)
目前 ABS 提供四大类构建服务,包括软件包构建服务、镜像构建服务、内核源码构建服务、云原生构建服务。
- 软件包构建服务允许开发者构建官方软件包和自定义软件包。
镜像构建服务主要分成:
- REBRAND ISO 构建,基于龙蜥操作系统定制化构建,包括指定操作系统的名称、版本、Logo、参数等等。
- ISO、VHD 构建,基于 ISO、VHD 做镜像构建。
- 内核源码构建服务提供基于 Anolis OS 7、Anolis OS 8 的源码构建。
- 云原生构建支持开发者自定义 DOCKERFILE 文件构建和 ACNS 构建,并且在软件包、镜像上的构建是可信构建,保证供应链安全。
(图 4/软件包构建)
操作系统是一个大的软件集合,成百上千个软件之间有相互调用、相互依赖等各种复杂的关联关系,所以统一的软件包格式,能够更友好地管理、定义这些复杂关系。
目前在 Linux 操作系统中常见的软件包格式有 rpm 系列和 deb 系列。其中 rpm 使用 rpmbuild 系列命令,配合 spec 文件进行打包;deb 使用 dpkg 系列命令,配合 control 文件进行打包。龙蜥操作系统使用 rpm 格式进行软件包构建。
图 4 下侧有两张图,左边是龙蜥社区 rpm 包示例,采用 rpm 格式进行软件包构建。右边是在 ABS 上软件包打包的步骤:
第一步,登录系统。登录系统的账号是龙蜥社区的账号,因此需要先在龙蜥社区上注册账号,才能登录这个系统。
第二步,创建项目。创建项目时可以选择公开的项目或者私有的项目。公开的项目是指其他开发者也可以看到的项目。如果只是想做一个构建测试,不想让别人看到,就可以选择私有的项目。
第三步,软件包选项。它有两个选项供大家选择,官方软件包和自定义软件包。官方软件包就是官方提供的一些软件包,可以直接选择进行构建。自定义软件包即自己的软件包,大家只需要把软件包放在开源的仓库上,将这些仓库的信息写进ABS,ABS 就可以帮助大家完成构建了。
第四步,添加软件包。即官方软件包或者自定义软件包。
第五步,构建触发。
第六步,构建触发后会生成一个 rpm 包供下载。另外还会把构建完的软件包放到 yum 源仓库里。可以把 yum 源仓库开放到自己的本机上,通过 yum 源仓库进行安装。
(图 5/镜像构建)
接下来介绍一下镜像构建的步骤。
REBRAND ISO 镜像定制化构建,支持开发者自定义操作系统版本号、系统 Logo 等参数,提供全量构建和最小化构建两种构建模式。全量构建是指会把 Anolis OS 提供的官方软件全部装进去做整体的构建,最小化构建是指只会针对一小部分做精简的构建。
REBRAND ISO 镜像构建的流程如下:
- BaseOS 提供了两个可选择版本的龙蜥操作系统,分别是 Anolis OS 8.4 和 Anolis OS 8.6。
- CPU 架构包括 X86_64 和 Aarch64,也是可以选择的。
- 构建模式是全量镜像和最小化镜像。目前全量镜像构建出来的大小约在 8.6G,最小化镜像约在 1.3G。
- REBRAND ISO 支持自定义软件包的版本信息包括自定义版本号、系统 ID、系统名称等等。
- 构建完之后会生成一个ISO的构建镜像的文件,把这个文件下载下来,装到本机上运行即可。
ISO/VHD 镜像构建的流程如下:
- BaseOS 提供了两个最新版本的龙蜥操作系统,分别是 Anolis OS 8 和 Anolis OS 23。
- CPU 架构包括 X86_64 和 Aarch64,也是可以选择的。
- 构建产物是 Anolis OS 8/Anolis OS 23 最新的 ISO、VHD 镜像。
如果您想了解龙蜥操作系统 Anolis OS 目前的更新程度,可在 ABS 上构建。
- 内核源码、云原生构建
(图 6/内核源码构建)
内核源码构建主要基于 Anolis OS 7、Anolis OS 8 的内核源码包构建,目前 Anolis OS 23 版本暂不支持,但后面会慢慢集成进来的。云原生构建提供自定义 Dockfile 文件构建和云原生 ACNS 构建。
先来看一下内核源码的构建。目前支持 Anolis OS 7 4.19 版本,Anolis OS 8 4.19、5.10 版本的基础包、全量包构建。基础包只生成三个 rpm 文件(kernel、kernel-headers、kernel-devel),构建速度快;全量包生成最全的 rpm 包(包含基础包以外的包),构建速度慢。
内核源码构建流程如下:
- BaseOS 是 Anolis 7 v4.19、Anolis 8 v4.19、Anolis 8 v5.10。
- CPU 架构是 Anolis 8 v4.19、Aarch64。
- 构建模式有基础包和全量包可选择。
在此基础上可以自定义内核源码仓库,也可以使用龙蜥社区提供的官方的内核源码仓库。下面是官方的内核源码仓库:
- 仓库地址:https://gitee.com/anolis/cloud-kernel.git
- 仓库分支:devel-5.10/4.19。
- 仓库 Commit:选填。
- 构建完成后就会生成对应的 rpm 包,然后可以针对 rpm 包进行安装、测试等其他操作。
图 6 右侧的图展示的是 5.10 版本的构建产物,下面是生成的 rpm 包,包括 X86 架构的源码包等等。
云原生构建目前支持 DOCKER 构建和 ACNS 构建。DOCKER 构建支持自定义 DOCKERFILE 文件, 基于 ABS 构建平台构建出容器镜像。
(图 7/云原生构建)
DOCKER 的构建流程如下:
- 自定义 DCOKERFILE,在这里大家可以自己写,FROM Anolis OS 7/Anolis OS 8/Anolis OS 23,都是可以的。
大家需要把自定义的 Dockerfile 放在一个开源的仓库上,然后把这个开源仓库的信息、仓库分支、Dockerfile 路径放在 ABS 上跑。
- 仓库地址:https://gitee.com/openanolis-copy/community.git
- 仓库分支:master。
- Dockerfile 路径:(根目录/xx/xx/Dockerfile)。
- ABS 帮大家构建一个容器镜像,然后还会推送到一个 DOCKERHUB 仓库上。
云原生 ACNS 是龙蜥社区云原生 SIG 输出的基于 Kubernetes 发行版本为基础而集成的套件能力,可以提供一键式部署、开箱即用以及丰富的云原生基础能力。
云原生 ACNS 的构建流程如下:
- 最下层基础设施是 Anolis Kernel。
- BaseOS 是 LifseaOS(精简、安全、原子更新)。
- CPU 架构是 x86_64 和 Aarch64。
构建仓库可以使用官方提供的云原生 ACNS 仓库,也可以自定义构建仓库。下面是官方的云原生 ACNS 仓库:
- 仓库地址:https://gitee.com/anolis/anolis-cloud-native.git
- 仓库分支:master。
- 仓库 Commit:选填。
- 构建产物会生成一个云原生镜像:sealer pull cr.openanolis.cn/…它会把这个镜像推到龙蜥社区的官方镜像平台上,然后大家可以通过镜像拉取命令,把镜像拉到自己的本地去做后续的处理。
- 可信构建
(图 8/可信构建)
可信构建(可重复构建)( Reproducible Builds)是证明软件供应链安全的必要手段。在给定相同的源代码、构建环境和构建指令的情况,任何人均可重建出 Bit to Bit 完全相同的指定制品。ABS 软件包、镜像构建已支持可信构建。
那么 ABS 针对可信构建是如何实现的呢,又有哪些构建措施来保证可信构建呢?可以分为以下两个部分:
第一部分,构建过程文档化。详细地说明构建所需的输入、使用的工具和方法,以确保任何人在任何时间都可以根据这个文档使用原来的源代码和数据文档,建立同样的构建环境,就能同样正确地执行构建过程,产生同样的结果。
第二部分,构建过程自动化。对于重复性的工作,自动化相比人工操作来说,出错的概率会大大降低。将构建活动的操作流程自动化,就能大大提高构建执行过程的正确性;将人工参数设置通过脚本来自动实现,就能大大降低选错工具或选错工具版本之类的错误。
- 构建优势
(图 9/构建优势)
目前在开源社区能够进行构建的不只 ABS 一个,那么相对于其他构建平台,ABS 建构优势有哪些呢?
- UI 可视化构建。ABS 提供可视化界面,大家在界面上选择需要构建的选项即可完成一次很好的构建。
- 可信构建。龙蜥社区软件包镜像上构建是一个可信的构建。
- 多产品化构建。目前 Anolis OS 主要分为 Anolis 7、Anolis 8、Anolis 23,如果想进行多产品化构建,只需在这三个中选择对应的产品即可。
- 分布式构建。如果我有很多个软件包镜像任务,这个是支持通过 ABS 进行构建的。
- 镜像定制化构建。基于 Anolis OS 官方的开源操作系统制作一个衍生版,可以指定参数、操作系统版本、系统 Logo、桌面背景图等等。
- 隐私构建空间。大家在 ABS 上创建项目的时候,可以选择公开的项目也可以选择私有的项目。如果选择私有的项目别人是不知道的,可以完全保证开发者或者合作伙伴的构建隐私。
- 多样化构建场景。除了上面提到的 UI 可视化构建之外,还提供了命令行构建,所以在命令行或者终端里使用 ABS 进行构建也是可以的。除此之外,龙蜥还提供了开放的 API 构建。
- 构建发布全流程。在 API 系统上不仅能够完成构建,还能完成发布。在构建完后会先进行测试构建,自己验证通过后就可以正式结束 PR,然后会触发线上的生产构建,接着会有专门的人进行审核,最后就会触发发布流程了。另外,在开发者开发这些软件包或者镜像的时候,也支持在 ABS 做测试构建、生产构建、发布审核等全流程。
上图右侧是三大平台的数据。目前软件包数量大概有 2 万+,构建数量大概有 1 万+,项目数量大概有 1800+。
- 功能演示
(图 10/功能演示)
接下来主要针对软件包构建和镜像构建做一个功能演示。
ABS 登录可通过链接(见文末),或可以通过龙蜥社区-开发者-ABS 构建服务进入。然后点击右上角进行登录,这个账号和官网账号是同一个,它们是同一个账号体系。
(图 11/ABS 首页)
进来之后在首页可以看到免费、稳定可靠、安全这三个特性;目前的构建指标;正在跑的构建服务以及龙蜥的各方面介绍。
(图 12/ABS 页面)
然后点击“我的”,就可以看到主项目和全部项目。可以在全部项目下创建项目,首先填写项目名称,然后选择产品类型,包括 Anolis 7、Anolis 8、Anolis 23。这些产品类型都是基于项目的维度进行配置的,也就是说如果在这里 Anolis 7、Anolis 8、Anolis 23 都选了,在构建软件包的时候,一个软件包可以在三个 Anolis OS 产品上同时跑。即只要触发一次,三个操作系统上都会进行统一构建,如果这里只选了两个,那么就会在两个软件包上进行构建。
(图 13/ABS 页面创建项目)
下面 OS 架构也是一样,如果两个都选了,这两个会同时在两个机器上进行构建,选一个就会在一个机器上构建。项目属性可以设置成公开的,也可以设置成私有的。公开的就是所有人可见,私有的就是仅个人可见,保证了开发者的隐私。
再往下有一个“允许 Fork 项目”(私有的项目是不支持这个的,只有公开的项目有这个选项)。如果其他开发者看到你的项目和自己的相关,他就是可以 Fork 一下你的项目,这样他就拥有了一个和你相同的项目,也可以方便共同开发者之间的构建协同。
然后可以在最下面填写一些项目的描述,最后点击“创建”。
(图 14/ABS 页面创建的项目)
点击进入这个项目,可以看到项目的名称,旁边的 Logo 以及 Logo 的颜色都是可以指定的。右边是一些关于项目的配置,包括 Fork、复制、编辑项目,如果创建完之后想修改可以在这里修改。还支持项目的删除,如果我不想要了,可以在这里把项目移除掉。
下面是 ABS 目前支持的六大功能,软件包、镜像、内核源码、云原生、LifswaOS 镜像、OOT 构建。
下面作者将针对软件包和镜像进行构建演示。
(图 15/软件包创建)
首先添加一个软件包,大家可以看到会有两个选项,分别是从外部导入和从平台上选择,大家从平台上选择一个官方软件包,点击添加。但现在还没有构建,大家需要手动触发一次构建。还有一种添加方式是从外部导入,填写一个开源的仓库地址就可以,然后填写分支名称。
(图 16/软件包演示)
然后用官方平台的软件包继续演示,点击进入详情。一眼就可以看到“测试构建”的按钮,只要点击这个按钮,软件包就会开始构建了。它的构建参数包括下面的 Anolis 7、Anolis 8、Anolis 23,这三个就是前面选择的产品类型,下面的 CPU 架构也一样是前面选择的。下面是官方软件包提供的代码库,包括仓库地址、分支、提交编码。
接下来点击“测试构建”,上面会提示 success 表示任务已经提交了。过几秒,它就会真正的去执行构建,可以看到 Anolis 7、Anolis 8、Anolis 23 已经在跑了。如果构建成功了,会在下面“软件包信息”这里把生成的 rpm 包列出来,以及 yum 源。大家可以下载 rpm 包安装或者使用 yum 源安装。
如果没有构建成功,下面“软件包信息”和“yum 源”就什么都不会有。如果想要知道失败的原因可以点进去,看一下报错的详细内容。
(图 17/软件包创建)
再来看一下镜像,点击“新建”,镜像类型有三个选项,Rebrand ISO 镜像、ISO 镜像、VHD 镜像。Rebrand ISO 镜像支持的产品是 Anolis 8.4 和 Anolis 8.6,支持的架构是 X86_64 和 Aarch64,构建模式支持全量镜像和最小化镜像。
现在创建一个 Rebrand ISO 镜像,看一下它有哪些参数可以选择,以及构建成功后的效果。点击完构建后,需要大家先写镜像名称,描述是可选的。下面的产品版本选择 Anolis 8.4 进行测试,CPU 架构选择 X86_64。目前最小化镜像安装后,无GUI 界面服务;而全量比较大,所以 GUI 和全量的软件包都会有。
如果选择全量镜像,配置的系统信息包括侧导航的 Logo、产品名称、自定义版本号等等。自定义版本号和产品版本号的区别是,产品版本号是官方提供的 Anolis 8.4 版本,大家要基于这个版本构建衍生版的名称。我们在这里指定一下,自定义版本号为 1.2。
这里选择最小化镜像跑一下,填写产品名称、自定义版本号、系统 ID、系统名称、官方地址。填写完成后,点击“提交”。可以看到这个镜像就已经在构建中了。
(图 18/镜像构建完成)
经过 10 分钟,这个镜像构建已经完成了。可以看到右边生成了一个“下载镜像”的按钮,下载下来的 ISO 镜像可以装到自己本机上去做其他的服务。
接下来演示一下构建内核源码。首先要填写构件名称,然后选择构建模式,基础包还是全量包,再然后选择产品及版本和 CPU 架构。再往下是仓库地址,可以选择官方提供的内核源码仓库,也可以自定义填写自己的仓库地址。然后填写分支名称、Commit ID,就可以触发构建了,构建完成后会生成一个内核源码 rpm 包。
云原生的构建主要分为两个部分,Docker 镜像和云原生 ACNS 版本。Docker 镜像支持自定义的 Dockerflie,包括自定义的仓库、分支、路径。填写完成后它会基于你的 Dockerflie 做一个镜像构建,构建完之后会帮你推到 Github 上。另外的云原生 ACMS 版本,它是云原生提供的一个构建服务。同样还是填写构建名称、选择产品及版本,仓库地址、分支、Commit ID,这个仓库地址也支持自定义。
Lifsea OS 的镜像可选择的参数比较多,产品及版本选择 Lifsea OS 8,往下看可以选择软件包,这里大概提供了 100-200 的软件包。可以安装到基于 Lifsea OS 的 Base OS 上。构建完之后就是一个 ISO 镜像,它就是把你选择的软件包都自动安装上。
OOT 的构建,目前提供的是基于 Anolis OS 8 的 OOT 测试。主要会让你选择一些内核版本,目前大概有几十个。下面的 CPU 架构都是可选的,仓库地址可以使用官方也可以使用自己修改的。
04 未来规划
(图 19/ABS 未来规划)
目前 ABS 无论是在功能,还是在开源操作系统构建领域的影响力上,都已经完成了一个里程碑。未来将从以下四个方向帮助开发者在开源社区完成构建工作:
离线部署,目前 ABS 提供了多样化的构建模式、ABS 的 UI 可视化、开放的 API。除此之外,如果想要使用 ABS,龙蜥还提供了离线部署。未来 ABS 将依托于 ACNS 平台在官网提供快速部署构建设施的线上线下的基础设施服务。也就是说未来龙蜥将会把 ABS 开源出去,给大家提供一个开源的组件。那时大家就可以直接把这些安装部署组件部署到自己的本机上做离线的使用。
全量构建,ABS 未来将提供开箱即用的全量包构建服务,包括处理软件包的依赖等等。
全流程,也就是上面提到的构建、测试、发布全流程。辅助开发者或者合作伙伴在龙蜥社区做贡献。
轻量运维,龙蜥会提供一些更易用的服务入口和构建簇管理。
那么 ABS 未来是否考虑开源呢?
秉承龙蜥社区开源精神,社区基础设施组件都会逐步开源。目前在龙蜥社区开发者服务平台上,基础设施包括测试服务、安全服务、构建服务等等。ABS 作为基础设施组件的一部分,未来将开源!
关于直播课件及视频回放获取方式:
【PPT 课件获取】:关注微信公众号(OpenAnolis),回复“龙蜥课件” 即可获取。有任何疑问请随时咨询龙蜥助手—小龙(微信:openanolis_assis)。
【视频回放】:视频回放可在龙蜥视频号(账号:龙蜥社区_小龙)或龙蜥官网 https://openanolis.cn/video 查看。
相关链接:
ABS 构建平台:https://abs.openanolis.cn/home
龙蜥安全公告:https://anas.openanolis.cn/errata
CBC 内核检测工具:https://cbc.openanolis.cn
龙蜥镜像平台:https://cr.openanolis.cn
Tone 测试平台:https://tone.openanolis.cn
—— 完 ——