编者按:操作系统是一个大的软件汇合,成千盈百个软件之间有互相调用、相互依赖等各种简单的关联关系,所以对立的软件包格局,可能更敌对地治理、定义这些简单关系。明天,龙蜥社区基础设施 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
—— 完 ——