在樹莓派設(shè)備上,軟件的多樣性令人印象深刻。樹莓派操作系統(tǒng)雖然適用于許多場景,但我們深知它并非萬能,尤其在一些特定用途的產(chǎn)品中更是如此。如果您正在開發(fā)嵌入式系統(tǒng)或工業(yè)控制器,您需要對(duì)設(shè)備上的軟件擁有絕對(duì)的掌控權(quán);而家庭用戶可能希望自行構(gòu)建操作系統(tǒng),并根據(jù)個(gè)人偏好進(jìn)行預(yù)配置。對(duì)于需要定制軟件鏡像的開發(fā)者和組織來說,擁有一個(gè)靈活且透明的構(gòu)建系統(tǒng)至關(guān)重要。為此,樹莓派推出了 rpi-image-gen,這是一款功能強(qiáng)大的全新工具,旨在讓您完全掌控樹莓派鏡像的構(gòu)建。
我們?yōu)楹未蛟?rpi-image-gen:為顧客量身定制的解決方案
目前,已經(jīng)有許多由社區(qū)維護(hù)的、支持樹莓派設(shè)備的構(gòu)建系統(tǒng)。它們提供了多種定制選項(xiàng),如今許多樹莓派用戶仍在使用。您可能好奇樹莓派為何要另起爐灶。rpi-image-gen 的誕生絕非出于“非我發(fā)明”的心態(tài),而是因?yàn)闃漭傻念櫩涂梢詮囊粋€(gè)從零設(shè)計(jì)、滿足其部署產(chǎn)品軟件所需靈活性的工具中獲益。
通過支持一個(gè)具有樹莓派操作系統(tǒng)發(fā)行包優(yōu)勢(shì)的構(gòu)建系統(tǒng),只需維護(hù)一套源碼。這意味著,一旦某處軟件得到改進(jìn)或修復(fù),它便會(huì)自動(dòng)在所有地方生效。圍繞集中式的基于包的軟件及更新交付進(jìn)行整合,意義非凡。此外,能夠減少軟件構(gòu)建時(shí)間、提供對(duì)支持的所有內(nèi)容的所有權(quán)、復(fù)用標(biāo)準(zhǔn)方法以確保軟件真實(shí)性,也是為樹莓派設(shè)備打造全新本土構(gòu)建工具的關(guān)鍵考量。
與 pi-gen 類似,rpi-image-gen 也借助了為設(shè)備安裝 Debian Linux 系統(tǒng)的強(qiáng)大、可靠與可信之力。然而,與 pi-gen 不同,rpi-image-gen 引入了一些新概念,用于規(guī)定構(gòu)建占用空間和安裝過程。
指定您的鏡像:配置文件、鏡像布局和配置文件
配置文件實(shí)際上是一組描述性圖層的集合,它們將 Debian 軟件包和安裝操作組合在一起。這些集合可以被選擇性地挑選并進(jìn)一步定制,構(gòu)成了軟件鏡像的基礎(chǔ)。鏡像布局描述了輸出軟件二進(jìn)制鏡像將如何在磁盤上創(chuàng)建和布局,以便編程到設(shè)備中,包括文件系統(tǒng)類型、分區(qū)表?xiàng)l目、鏡像格式等。配置文件是一個(gè)“頂層”文本文件,采用易于理解的 .ini 語法,用于定義 rpi-image-gen 構(gòu)建設(shè)備鏡像時(shí)所使用的配置文件和鏡像布局。
配置文件通常與底層設(shè)備硬件和產(chǎn)品相關(guān)聯(lián),因此它可以相應(yīng)地指定適用的屬性:例如,定義各個(gè)分區(qū)鏡像的大小以匹配板載 eMMC 的大小,或使用特定布局,該布局使用特定文件系統(tǒng)的掛載選項(xiàng)、微調(diào)低層暴露的選項(xiàng),或選擇特定的樹莓派設(shè)備類別作為目標(biāo)。同樣,不同派生的配置文件可用于根據(jù)產(chǎn)品的功能需求定制安裝。例如,您可以利用藍(lán)牙音頻層來引入設(shè)備支持;或使用特定層來添加一個(gè)在 kiosk 模式下運(yùn)行的最小 Wayland 桌面,以安裝一組默認(rèn)容器,為第三方開發(fā)者分發(fā)默認(rèn)環(huán)境,等等。可能性無窮無盡。
在代碼樹中有一些示例,展示了 rpi-image-gen 的不同用例。它們都創(chuàng)建了可引導(dǎo)的磁盤鏡像,展示了如何使用 rpi-image-gen 為特定目的創(chuàng)建量身定制的鏡像。隨著時(shí)間的推移,示例數(shù)量將會(huì)增加,讓我們挑選其中兩個(gè)來仔細(xì)看看:slim 和 webkiosk。
slim:創(chuàng)建小型輕量級(jí)鏡像
slim 是一個(gè)極其簡單的示例,展示了如何創(chuàng)建一個(gè)包含少量基本軟件包的輕量級(jí)鏡像,該鏡像將在您的樹莓派上引導(dǎo)。此鏡像本身并非特別有用,但它展示了如何創(chuàng)建和構(gòu)建自定義配置,以保持文件系統(tǒng)的最小化。配置文件引入了一些圖層(例如 Debian 基礎(chǔ)、核心實(shí)用工具、Linux 內(nèi)核和引導(dǎo)固件),然后創(chuàng)建了一個(gè)樹莓派操作系統(tǒng)風(fēng)格的磁盤鏡像,并留出了一些空間來運(yùn)行 apt update 和安裝一些軟件包。
webkiosk:創(chuàng)建一個(gè)引導(dǎo)至瀏覽器 kiosk 模式的鏡像
webkiosk 在一個(gè)配置文件之上進(jìn)行構(gòu)建,該配置文件再次引入了最少的組件。然后,它通過自定義鉤子添加了其他軟件包,以支持在 Wayland 下以 kiosk 模式運(yùn)行 Chromium 網(wǎng)瀏覽器。此鏡像使用自定義 systemd 服務(wù)自動(dòng)引導(dǎo)至瀏覽器,并全屏運(yùn)行,禁用了 VT 切換。所使用的 Wayland 合成器(Cage)是一個(gè)單實(shí)例合成器,非常適合需要防止用戶通過鍵盤或鼠標(biāo)進(jìn)行干預(yù)的部署;例如,用戶不應(yīng)能夠通過標(biāo)準(zhǔn)鍵盤快捷鍵從一個(gè)窗口切換到另一個(gè)窗口。
除了能夠以您想要的方式配置構(gòu)建和設(shè)備映像之外,能夠從基于包的安裝中排除原本會(huì)作為配置文件的一部分安裝的東西也很重要。實(shí)現(xiàn)這一點(diǎn)的一種方法是通過 dpkg 選項(xiàng),這由支持 rpi-image e-gen 的工具支持。mmdebstrap 引擎驅(qū)動(dòng)設(shè)備文件系統(tǒng)的創(chuàng)建,它上面的 bdebstrap 提供了一個(gè)高度可定制的框架和層的描述性文本表示。圖層是用 YAML 編寫的,這是人類可讀且易于理解的。從包安裝中排除資產(chǎn)就像在 YAML 中為配置文件拉入的特定圖層使用 dpkg—— 路徑 —— 排除和 / 或 —— 路徑 —— 包含選項(xiàng)一樣簡單。
安全性、信任與合規(guī)性:這對(duì)我們的顧客意味著什么
審計(jì)軟件以及能夠生成已部署設(shè)備的安全漏洞列表至關(guān)重要。任何軟件構(gòu)建系統(tǒng)都應(yīng)將采用標(biāo)準(zhǔn)化格式的軟件物料清單(SBOM)作為輸出工件之一。rpi-image-gen 為每次構(gòu)建生成 SBOM,并為用戶提供了一個(gè)可自定義輸出格式的選項(xiàng),以便用戶將其輸入到其他系統(tǒng)中 —— 例如,生成 CVE 列表。通過提供 SBOM 和跟蹤安全漏洞,有助于增強(qiáng)消費(fèi)者對(duì)部署在其設(shè)備上的軟件的信心。在不久的將來,這一領(lǐng)域?qū)⒂辛⒎ㄒ?,我們相信樹莓派在行業(yè)中處于有利地位,能夠?yàn)轭櫩吞峁┧麄兯柚铩?/span>
結(jié)語
從零開始創(chuàng)建一件事的優(yōu)勢(shì)在于能夠隨心所欲地塑造它 —— 擁有它并隨時(shí)間推移對(duì)其進(jìn)行調(diào)整。樹莓派自認(rèn)為很了解顧客的需求,并且努力將他們置于相當(dāng)一部分軟件開發(fā)工作的核心位置。
訪問 rpi-image-gen GitHub 倉庫開始使用。在那里,您會(huì)找到文檔和示例,指導(dǎo)您創(chuàng)建定制的樹莓派鏡像。我們鼓勵(lì)您探索該倉庫并提供反饋,以幫助我們進(jìn)一步改進(jìn)該工具。
rpi-image-gen GitHub 倉庫地址:
https://github.com/raspberrypi/rpi-image-gen
參考文章:
https://www.raspberrypi.com/news/introducing-rpi-image-gen-build-highly-customised-raspberry-pi-software-images/