編者按:操作系統是一個大的軟件集合,成百上千個軟件之間有相互調用、相互依賴等各種複雜的關聯關係,所以統一的軟件包格式,能夠更友好地管理、定義這些複雜關係。今天,龍蜥社區基礎設施 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
—— 完 ——