啟動套件伺服器

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 時,您會看到執行中的存放區伺服器位址。

沒有任何設定屬性會影響地址選項。無法設定這個選項,因為多個伺服器的通訊埠編號不得重複。

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

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

--background、--daemon、--foreground

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

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

  • --daemon 表示套件伺服器將在 ffx Daemon 中啟動。您應將此模式視為已淘汰,只有在無法使用 --background--foreground 時才能使用。在完成淘汰和移除程序之前,為確保回溯相容性,--daemon 會預設為預設模式。 注意:如果您必須使用 --daemon,請回報問題,說明缺少的功能,以便改善套件伺服器。

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

沒有任何設定屬性會影響執行模式。套件伺服器的執行模式是開發人員工作流程的許多問題 (有時可能不易察覺)。

開發人員會因位於前景或背景的套件伺服器 UI 上的個別情況而異。無論處理模式為何,伺服器的行為都會相同。

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

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

背景是遠端工作流程的理想模式,可以有一個遠端終端機視窗,而透過 IDE (例如 VS Code),使用者體驗在多個終端機視窗間切換並不容易。

--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

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

範例

啟動樹狀結構內存放區

請參閱 fx serve 參考資料瞭解選項。做為實作的一部分,系統會執行 ffx repository server start

fx serve

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

ffx repository server start --background

或樹狀結構內

fx serve --background