本文說明使用 Fuchsia 套件開發 Fuchsia 產品的基本概念。
總覽
Fuchsia 套件是檔案和資源的階層式集合,可為 Fuchsia 系統提供一或多個程式、元件或服務。無論是否立即顯示,您在 Fuchsia 上看到的所有內容幾乎都位於 Fuchsia 套件中。
在 Fuchsia 產品開發期間提供新軟體 即可建立 Fuchsia 套件,將變更內容納入目標 並發布到在開發主體機器上執行的本機套件伺服器。 接著,Fuchsia 裝置會下載套件並更新軟體。
在這個設定中,開發主機會執行簡單的靜態檔案 HTTP 伺服器,讓目標裝置可使用 Fuchsia 套件。這個 HTTP
伺服器 (又稱為
Fuchsia 套件伺服器) 是 Fuchsia 來源的一部分
,並在執行 fx build
指令時自動建立。
Fuchsia 目標裝置通常是設為用來檢查 Fuchsia 套件伺服器。當目標裝置上的更新系統偵測到變更時,就會從套件伺服器擷取新套件。套件送達後 時,套件中的新軟體便可在目標上取得 裝置。
必要條件
開發主機和 Fuchsia 目標裝置必須能夠透過 TPC/IP 通訊。具體來說,機構必須能 從開發主機機器到目標裝置的 SSH 連線。 這個 SSH 連線可用來向目標裝置發出指令。
建立套件
如要在 Fuchsia 原始碼結帳時建構包含程式碼的套件, 您必須指定套件建構規則進一步瞭解如何新增版本 請參閱 Fuchsia 建構系統。
新增適當的建構規則後,請執行下列指令來產生套件:
fx build
檢查套件
Fuchsia 隨附 ffx
工具,可用於處理套件封存檔。在
Fuchsia 建構作業 (fx build
) 完成後,您可以使用
用於建立、列出、傾印或執行的 ffx package archive
指令
解壓縮套件封存檔,例如:
ffx package archive list
下方的 ffx package archive list
指令範例會列出 ~/fuchsia/out/default/obj/third_party/sbase/sed_pkg/
目錄中名為 meta.far
的套件內容:
$ ffx package archive list ~/fuchsia/out/default/obj/third_party/sbase/sed_pkg/meta.far
+-------------------------------+
| NAME |
+===============================+
| meta/contents |
+-------------------------------+
| meta/fuchsia.abi/abi-revision |
+-------------------------------+
| meta/package |
+-------------------------------+
請注意,這個 meta.far
套件包含名為 meta/contents
的檔案。meta/contents
檔案會將套件的使用者檔案名稱對應至這些檔案的梅克爾根目錄,例如:
$ ffx package archive cat ~/fuchsia/out/default/obj/third_party/sbase/sed_pkg/meta.far meta/contents
bin/sed=361c6e3a027cf38af0d53e1009ef3b3448f4aeb60270910a116396f5ec8eccba
lib/ld.so.1=c8ec55a14590e7e6f06f311d632744012f85084968d98a335c778f29207caa14
lib/libc++.so.2=d8a45259c74cf65c1f8470ac043c6459403fdd0bbf676092ba82f36451e4e571
lib/libc++abi.so.1=f12b37c2b9bfb43fbe33d446794a6ffeee1452b16b7c8d08b3438f3045d1f19a
lib/libfdio.so=9834d890adedc8e532899a673092271e394458e98e6cee049cb78f5a95372b11
lib/libunwind.so.1=89e5dee07ff8d2a03c58d524d8d832e79c70dcb81508f8a83c6fbf07e1539e83
若要進一步瞭解 Fuchsia 套件及其內容, 請參閱「套件的結構」一節。
管理套件伺服器
幾乎所有在 Fuchsia 系統上執行的軟體都會收集至 Fuchsia 套件。除了組成 Fuchsia 平台基礎的基礎套件外,您也可以從 Fuchsia 套件伺服器下載其他套件。Fuchsia 套件伺服器 使用 TUF(更新架構) 管理 Fuchsia 套件的 HTTP (S) 伺服器。 這個架構會使用經過加密編譯簽署的 BLOB,將更新套件安全地分發至執行 Fuchsia 的裝置。
如要進一步瞭解如何在開發主機上啟動、停止及列出 Fuchsia 套件伺服器,請參閱下列指南:
正在連結主機和目標
Fuchsia 來源檢查作業 (fuchsia.git
) 包含 Fuchsia 套件伺服器,這是一項提供靜態檔案的簡易 HTTP 伺服器。以及 Fuchsia 版本
產生 TUF 檔案樹狀結構並提供給伺服器。
目標 Fuchsia 裝置上的更新代理程式一開始不知道要從何處尋找更新。如要將目標上的更新代理程式連結至在開發主機上執行的套件伺服器,目標必須知道開發主機的 IP 位址。
根據預設,Fchsia 套件伺服器會自動向
預設目標您可以使用 --no-device
選項停用這項行為
啟用的 Cloud Storage 伺服器
下列指令可用於管理目標裝置上的套件存放區:
ffx target repository list
:檢查已註冊的檢查項目 套件存放區ffx target repository register
:註冊新的 或是更新現有項目ffx target repository deregister
:移除 從目標裝置註冊套件存放區。
如要啟動 Fuchsia 套件伺服器,並在目標裝置上設定更新代理程式,您可以執行下列指令 (或直接執行 fx serve
):
fx serve -v
fx serve
指令會執行套件伺服器,通常是開發人員會使用的指令。不過,建議您使用 -v
選項,因為這個選項可讓指令列印更多輸出內容,有助於進行偵錯。如果套件製作伺服器成功連線至目標裝置,指令就會在開發主機上,在殼層中顯示 Ready to push packages!
訊息。
目標裝置上的更新代理程式會維持設定狀態,直到重新刷新為止。出現錯誤時,Fchsia 套件伺服器會嘗試重新設定更新代理程式 目標裝置已重新啟動。
觸發套件更新
Fuchsia 中的套件未「安裝」但會視需要 。
Fuchsia 生態系統中有兩種套件:
基礎:
base
套件組合是一組與 必須保持全等Fuchsia 建構系統 向fx set
指令提供套件時,會將套件指派給base
透過--with-base
旗標標記。這類軟體只能透過執行整個系統更新 (通常稱為 OTA 更新) 來更新,而這項作業會使用
fx ota
指令執行。暫時性軟體:
cache
或universe
套件組合中包含的套件是暫時性軟體。這些更新會按照需求提供。紫紅色 建構系統在universe
取得套件時,就會將套件指派給 使用--with
旗標的fx set
指令。新版軟體會更新至最新的可用版本 系統會將套件擷取到目標。
您可以使用以下指令發布及更新 Fuchsia 套件 指定裝置:
fx serve
:在本機執行 Fuchsia 套件伺服器,用於兩者 建構及下載 OTA 來達成目標裝置fx ota
:在目標裝置上觸發完整系統更新並重新啟動。fx test
:建構並執行測試,以便測試目標裝置。
觸發 OTA
有時可能會變更很多套件。舉例來說,如果核心
或是系統套件可能有所變更。如要將核心變更或系統套件中的變更內容導入目標裝置,您必須使用 OTA 或閃燈,因為 base
套件在系統執行階段是不可變動的。(OTA 更新通常比刷新裝置更快)。
如要觸發目標裝置的 OTA 更新,請執行下列指令:
fx ota
fx ota
指令會要求目標裝置從可用的任何更新來源執行更新。如要將開發主機機器上的版本以 OTA 方式更新至同一區域網路 (LAN) 上的目標裝置,您必須先建構系統 (fx build
)。建構完成後,如果開發主機機器上尚未執行 fx serve [-v]
指令,請執行該指令,讓目標裝置能夠使用 Fuchsia 套件伺服器做為更新來源。-v
選項會針對
目標裝置正在從套件伺服器要求。使用 -v
選項時,當目標裝置擷取所有新檔案時,系統會產生大量輸出內容。
完成 OTA 後,目標裝置將重新啟動。
問題與注意事項
使用 Fuchsia 時可能發生的問題,如下所示 套件
您可以填滿磁碟
所有推送的更新都會儲存在內容定址檔案系統 blobfs
中。
重新啟動後,更新的套件可能無法使用,因為在 blobfs
中找出這些套件的索引僅保留在 RAM 中。系統目前
未垃圾收集無法存取或未使用過的套件 (
最近的創新技術是一項創新功能!
fx gc
指令會重新啟動目標裝置,然後移除所有舊裝置
裝置的暫時軟體,藉此釋出空間。
在不重新啟動的情況下重新啟動
如果要更新的套件代管由 Fuchsia 管理的服務,則可能需要重新啟動該服務。重新啟動不理想,因為這會導致速度變慢,且套件會還原至裝置上閃過的版本。通常,開發人員可以要求元件正常終止,或使用 ffx component stop
指令強制停止元件,藉此終止系統上執行的一或多個元件。Upon
重新連線至元件服務
ffx component start
或 fx test
,套件伺服器有新版本
在啟動前快取
在 Fuchsia 樹狀結構外包裝程式碼
有可能封裝和推送 Fuchsia 樹外的程式碼,但
還需要執行更多作業Fuchsia 套件格式非常簡單,其中包含描述套件內容的中繼資料檔案,詳情請參閱 Fuchsia 套件說明文件。中繼資料檔案是
新增到 TUF 檔案樹狀結構,其中每個內容都會以他們的 Merkle 命名
根雜湊並放入 TUF 檔案樹狀結構根目錄的 blobs
目錄中。