啟動套件伺服器

漫遊器:noindex

ffx repository server 指令可在主機上啟動及管理 Fuchsia 套件伺服器

概念

幾乎所有在 Fuchsia 上執行的軟體都會收集到 Fuchsia 套件中。Fuchsia 套件是一種階層式檔案集合,可為 Fuchsia 系統提供一或多個程式、元件或服務。Fuchsia 套件是一個代表分配單位的術語,雖然與許多其他套件系統不同,這個單位是由部分組成,而非單一二進位檔 BLOB。

除了組成 Fuchsia 平台基礎的基礎套件外,您還可以從 Fuchsia 套件伺服器下載其他套件。Fuchsia 套件伺服器是使用 TUF(更新架構) 管理 Fuchsia 套件的 HTTP (S) 伺服器。這個架構會使用經過加密編碼簽署的 BLOB,將更新套件安全地分發至執行 Fuchsia 的裝置。

針對使用 Fuchsia 的開發人員,系統會提供套件伺服器,以便協助使用做為產品基礎的套件,同時在開發週期內疊加本機編譯的套件。

啟動套件伺服器

您可以執行 ffx repository server 的子指令,控管套件存放區伺服器。這個伺服器會處理關於可用套件的中繼資料要求,並傳送構成套件內容的檔案 blob。

基本指令

ffx repository server start

伺服器選項

--address

套件伺服器接聽要求的位址。位址的格式可以是 IPv4 或 IPv6 位址。例如 [::]:8083127.0.0.1:8083。過去,套件伺服器的偏好通訊埠為 8083。不過,我們正努力讓預設通訊埠 0 可指示使用動態通訊埠,以提升靈活性。執行 ffx repository server list 時,您會看到執行中的存放區伺服器位址。

沒有任何設定屬性會影響地址選項。由於多個伺服器的連接埠號碼必須不重複,因此無法設定這個選項。

改用動態通訊埠的原因,是為了避免發生「port in use」錯誤。使用本機連線的裝置或模擬器在本機執行套件伺服器時,ffx 可以在內部管理套件伺服器的位址。

不過,在某些情況下,您應使用特定網路位址,根據目標裝置的網路連線提供套件。舉例來說,如果要使用非 ffx 指令進行隧道或防火牆設定,就必須指定連接埠,才能與其他工具中的設定相符。

--background、--daemon、--foreground

套件伺服器的執行模式。這些選項互斥,一次只能使用 1 種執行模式。

  • --background 表示套件伺服器會在背景中啟動。此方法與 --foreground--daemon 互斥。

  • --daemon 表示套件伺服器將在 ffx Daemon 中啟動。這個模式應視為已淘汰,且僅應在使用 --background--foreground 時使用。在淘汰和移除作業完成前,--daemon 是預設模式,可確保向後相容性。注意:如果您使用 --daemon,請回報問題並解釋缺少的功能,協助改善套件伺服器。

  • --foreground 表示會在前景啟動套件伺服器。此方法與 --background--daemon 互斥。

沒有任何設定資源會影響執行模式。套件伺服器的執行模式是開發人員工作流程中許多 (有時是微妙的) 問題的來源。

開發人員可以根據 UI 的個別情況,為套件伺服器在前景或背景中顯示的偏好設定。無論處理模式為何,伺服器的行為都會相同。

這些是特定切換鈕,而非具有列舉值的選項,因此可透過指令列分析收集洞察資料。分析中會顯示切換按鈕,但選項的值不會顯示。

由於透過 SDK 的預設行為是執行以 Daemon 為基礎的套件伺服器,因此目前預設為執行此伺服器。套件伺服器會以預設方式遷移至前景,因此套件伺服器正在執行,且是最簡單的執行模式。

在遠端工作流程中,背景是理想的模式,因為這樣可以保留一個遠端終端機視窗,而使用 VS Code 等 IDE 時,在多個終端機視窗之間切換的使用者體驗並不理想。

--repo-name

根據名稱識別檔案包伺服器。如果其他套件伺服器使用相同名稱執行,新套件伺服器會失敗並顯示錯誤。

預設值為 devhost。主要基於歷史原因。

沒有任何設定屬性會影響 repo-name;伺服器名稱不得重複。

--daemon 模式下,不允許使用這個選項,因為存放區是用其他指令 (例如 ffx repository add-from-pm) 管理。

--repo-path

存放區根目錄的路徑。

這個目錄可以是以 ffx repository create 初始化的存放區,也可以是產品組合的根目錄。

預設值為未定義,但可進行設定。

可以設定設定屬性 package.repository.path。這是存放區的根目錄。由於每個專案可能都有不同的存放區,因此這個值應設為每個專案,而非使用者層級。

設定這個設定屬性也有助於讓其他套件存放區工具 (例如 ffx repository publish) 使用與套件伺服器相同的存放區路徑。

發布工具也會參照這個值,代表開發專案環境的核心特性。

--daemon 模式中,系統會使用 ffx repository add-from-pm 等其他指令管理存放區,因此不允許使用這個選項。

--trusted-root

用來簽署存放區 TUF 中繼資料的根中繼資料路徑。

這樣就能為這個存放區建立信任根。如果 TUF 中繼資料並未由此根中繼資料簽署,執行這個指令就會發生錯誤。預設值為使用存放區中的 1.root.json。

沒有任何設定資源會影響 --trusted-root

開發人員很少使用這個選項。

註冊選項

這些選項會影響目標裝置上的伺服器註冊。套件伺服器可在開發裝置上註冊自身,為開發人員提供生產力輔助。以下選項會影響這項註冊行為。

--no-device

停用目標裝置上的伺服器自動註冊功能。

僅適用於 --foreground--background

這個標記最常用於使用多個裝置和多項專案,且預設行為並非如此。在排解套件解析問題時,這項功能也非常實用。

為了簡化套件服務程序,這個選項將會是預設選項,或完全移除註冊。此時,自動註冊工作流程會整合至其他指令。

--alias

用於識別此存放區的套件網域別名。

在目標裝置上註冊套件伺服器時,系統會使用這個值,藉此設定重寫規則,將每個 alias 網域對應至這個伺服器。執行 ffx repository server list 時,系統會列出執行中的存放區別名。

只有在應使用哪個套件伺服器來解析套件時,才應使用此屬性。

預設值是沒有任何別名。

沒有任何設定屬性會影響 --alias

這類專案通常用於處理產生套件的原始碼專案,這些套件必須位於「fuchsia.com」或「chromium.org」網域,但不是 Fuchsia 原始碼專案的一部分。

--alias-conflict-mode

定義別名註冊衝突時的解析機制。必須是 error-outreplace

預設行為為 replace

沒有任何設定屬性會影響 --alias-conflict-mode

--storage-type

定義使用此註冊項目解析的套件儲存類型。persistent 定義套件會在重新啟動後保留。或者,ephemeral 會定義重新啟動時會遺失的套件。

預設為 ephemeral

沒有任何設定屬性影響 --storage-type

有時候,目標裝置需要重新啟動並保留更新後的套件,而不是還原至上次 Flash 或 OTA 中的套件。這在處理啟動程序期間使用的套件時特別實用。

範例

樹狀結構內啟動存放區

如需選項,請參閱 fx serve 參考資料。實作過程中會執行 ffx repository server start

fx serve

使用 VSCode 時啟動存放區 (單一終端機視窗)

ffx repository server start --background

或在樹狀結構內

fx serve --background