ffx repository server 指令可在主體機器上啟動及管理 Fuchsia 套件伺服器。
概念
Fuchsia 上執行的幾乎所有軟體都會收集到 Fuchsia 套件中。Fuchsia 套件是檔案的階層式集合,可為 Fuchsia 系統提供一或多個程式、元件或服務。Fuchsia 套件是代表發布單位的術語,但與許多其他套件系統不同,這個單位是由多個部分組成,並非單一二進位 BLOB。
除了構成 Fuchsia 平台基礎的基礎套件外,您還可以從 Fuchsia 套件伺服器下載其他套件。Fuchsia 套件伺服器是 HTTP(S) 伺服器,使用 TUF (更新架構) 管理 Fuchsia 套件。這個架構會使用經過加密簽署的 BLOB,將更新的套件安全地發布至執行 Fuchsia 的裝置。
對於使用 Fuchsia 的開發人員,系統會提供套件伺服器,方便處理做為產品基礎的套件,以及在開發週期中疊加本機編譯的套件。
啟動套件伺服器
執行 ffx repository server 的子指令,即可控管套件存放區伺服器。這個伺服器會處理可用套件的中繼資料要求,並傳送構成套件內容的檔案 Blob。
基本指令
ffx repository server start伺服器選項
--address
套件伺服器監聽要求的位址。位址格式可以是 IPv4 或 IPv6 位址。例如 [::]:8083 或 127.0.0.1:8083。從歷史來看,套件伺服器的偏好通訊埠是 8083。不過,我們正努力提升彈性,方法是將預設通訊埠設為 0,表示使用動態通訊埠。執行 ffx repository server list 即可查看正在執行的存放區伺服器位址。
沒有任何設定屬性會影響地址選項。由於多部伺服器的連接埠號碼必須不重複,因此無法設定這個選項。
改用動態連接埠是為了避免連接埠使用中錯誤。在本機執行套件伺服器,並連線至本機連結裝置或模擬器時,ffx 可以在內部管理套件伺服器的位址。
不過,在某些情況下,應根據目標裝置的網路連線,使用特定網路位址提供套件。舉例來說,如果需要非 ffx 指令進行通道或防火牆設定,就必須指定通訊埠,才能與其他工具中的設定相符。
--background、--foreground
套件伺服器的執行模式。這些選項互斥,一次只能使用 1 種執行模式。
--background表示套件伺服器會在背景啟動。這與--foreground互斥。--foreground表示套件伺服器將在前台啟動。這是預設模式。這與--background互斥。
沒有任何設定屬性會影響執行模式。套件伺服器的執行模式是開發人員工作流程中許多問題的根源,有時問題很細微。
開發人員可根據套件伺服器在前台或背景的個別情況,在 UI 中設定偏好選項。無論處理模式為何,伺服器行為都相同。
這些是特定切換開關,而非具有列舉值的選項,因此可透過指令列分析收集洞察資料。分析資料會顯示切換按鈕,但不會顯示選項值。
前景是預設值,因此套件伺服器正在執行是顯而易見的事,也是最簡單的執行模式。
背景是遠端工作流程的理想模式,因為可以有一個遠端終端機視窗,而且使用 VS Code 等 IDE 時,使用者體驗不適合在多個終端機視窗之間切換。
--repo-name
以名稱做為套件伺服器的專屬 ID。如果另一個套件伺服器正在執行同名作業,新的套件伺服器就會失敗並顯示錯誤。
預設值為 devhost。主要是基於歷史因素。
沒有任何設定屬性會影響 repo-name;伺服器名稱不得重複。
--repo-path
存放區根目錄的路徑。
這個目錄可以是使用 ffx repository create 初始化的存放區,也可以是產品套裝組合的根目錄。
預設值為未定義,但可以設定。
您可以設定 package.repository.path 設定屬性。這是存放區的根目錄。預期這個值是依專案設定,而非依使用者設定,因為每個專案可能都有不同的存放區。
設定這個設定屬性也有好處,因為其他套件存放區工具 (例如 ffx repository publish) 會使用與套件伺服器相同的存放區路徑。
發布工具也會參考這個值,代表開發專案環境的核心特徵。
--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-out 或 replace。
預設行為為 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