Fuchsia 套件

Fuchsia 套件是一組階層的檔案集合,會提供一或多個程式。 專屬元件或服務Fuchsia 套件是代表 與其他許多套件系統不同,該單位是由 並非單一二進位 BLOB

啟動時,Fchsia 系統中存在部分套裝方案。 您可以在 BLOB 內的 Fuchsia 套件伺服器中下載其他套件。 Fuchsia 套件伺服器為 HTTP(S) 伺服器。這些 BLOB 是由 Merkle 特別定義 根目錄。BLOB 會依據其內容命名,並使用 Fuchsia Merkle Root 演算法。如果兩個 BLOB 含有相同的內容, 因為兩者的名稱相同因此,每個 BLOB 都有專屬 ID, 使用這個 Merkle 寫入永久儲存空間 作為金鑰。此程序是為了避免重複 BLOB 可能存在於套件之間例如,位於 裝置只會儲存一次多個套件。

套件伺服器會驗證其真實性,因此可做為信任根 每個套件

套件也可以宣告 子套件 ,建立巢狀結構套件的階層。 建構規則可將套件連結至每個子套件的建構目標。建立期間 時間,套件建構工具會記錄父項套件 中繼資料,將每個子套件名稱對應至其套件雜湊 (BLOB ID 識別子套件)。這可確保子套件和 必須同時變更 Merkle,才能變更每個子套件的內部結構 (套件雜湊)。

子套件可讓您:

  • 封裝的依附元件 (套件本身為「套件樹狀結構」)
  • 已隔離的 /pkg 目錄 (已分組的元件不需要合併) 將檔案、程式庫和中繼資料整合到單一共用命名空間中
  • 安全依附元件解析 (系統與建構工具可確保子套件) 一律使用「Travel with」的包裹)

如要進一步瞭解如何使用 子套件請參閱子套件元件一節。

套件類型

包含 Fuchsia 作業系統的套件可分為以下類別: 分別會影響管理方式:

基本套件

這些是 Fuchsia 基礎的套裝方案 而且對於安全性和系統而言至關重要。 解決 Fuchsia 系統一直運作中的套件 會傳回裝置上的版本,而不是 可能存在於套件伺服器上不過,基本套件可透過 OTA 程序

由於應用程式執行階段的執行階段,這些套件無法變更 那麼這些套件就必須以 fx ota,會觸發 無線更新 (OTA)。

快取套件

這些是裝置上的套件,不屬於底座。這些 套件會在裝置刷新或鋪面時存在,因此這些套件 適用於裝置在沒有網路連線的情況下啟動的情形。快取套件 如果有其他套件可用,問題解決程序就會更新 。這些套件在系統更新期間不會更新, 但會在週邊更新

Fuchsia 也可以在運作中的系統移除快取套件,以釋出資源 選擇 Cloud CDN

宇宙套件

這些是套件伺服器上存在的套件,但並不在裝置上。

套件的結構

在大多數情況下, Fuchsia 中的套件是一組 BLOB, 最少包含一個名為「meta.far的內容位址 BLOB

在 Fuchsia 中,您可以使用 ffx package build 指令建構套件。

通常,套件是由零或多個內容定址項目的樹狀結構。 套件包含以下內容:

meta.far

套件中繼資料封存檔案 meta.far,含有關於 以 meta/ 目錄形式呈現的套件meta.far具有 實際術語中的 merkleroot,也稱為 套件的 Merkleroot。

套件的 meta/ 目錄至少包含兩個檔案:

  • meta/package

    套件身分檔案。這是一個 JSON 檔案,內含 套件的版本。

  • meta/contents

    內容檔案。此檔案是透過 ffx package build 指令建立。 這個檔案會將使用者看到的套件檔案名稱對應至 Merkle 根層級 這些檔案

如果套件宣告了子套件,meta/ 目錄也會包含:

  • meta/fuchsia.pkg/subpackages

    子套件檔案。這是包含名稱和版本的 JSON 檔案 每個宣告的子套件中從父項套件的角度來看 系統會在解析 子套件。

    套件建構工具掃遍子套件參照 (透過建構宣告) 依附元件宣告,以及參照其他項目的套件資訊清單檔案 每個子套件的套件資訊清單檔案),才能計算版本 (套件) 然後產生 subpackages 檔案。

此外,meta/ 目錄可以包含元件資訊清單等檔案。 如要進一步瞭解元件資訊清單,請參見 元件資訊清單

meta/ 以外的 BLOB

套件的大部分檔案都位於 meta/ 目錄之外,每個檔案都是 BLOB

這類檔案內容可能如下所示:

  • bin/foo
  • lib/libfdio.so
  • data/mydata.db

套件的識別資訊

Fuchsia 中的每項套件都是以 package-url 識別。

絕對套件網址

絕對的 Fuchsia 套件網址可識別系統可定址的套件,而沒有 需要任何其他背景資訊,如下所示:

fuchsia-pkg://repository/package-name?hash=package-hash#resource-path

Fuchsia 根據 fuchsia-pkg 網址的不同解讀方式 網址的部分內容:

  • 如果有存放區、套件和資源部分,則網址的 用於識別套件中的指定資源。
  • 如果只有存放區和套件部分,則網址會識別 指定的套件本身
  • 如果只有存放區部分,則網址會指出 指定的存放區本身

套裝組零件可以表示不同程度的特異程度。請至少 必須提供套件名稱,後面加上套件雜湊。

如果缺少套件雜湊,套件解析器會擷取資源 來自用戶端可用的套件變化版本最新修訂版本。

相對套件網址

相關的 Fuchsia 套件網址可識別先前載入的子套件 套件 (或子套件) 做為「context」。存放區和父項套件 隱含,並使用子套件名稱查詢 父項套件的 "meta/fuchsia.pkg/subpackages" 檔案。(套件雜湊 無法覆寫)。相對套件網址如下所示:

package-name#resource-path

和絕對套件網址一樣,資源路徑不一定包含。