启动软件包服务器

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 互斥。

没有会影响执行模式的配置属性。软件包服务器的执行模式是开发者工作流程中许多(有时是细微的)问题的根源。

开发者有自己的偏好,具体取决于软件包服务器在前台还是后台运行的界面。无论处理模式如何,服务器行为都相同。

这些是特定开关,而不是具有枚举值的选项,因此可以通过命令行分析来收集数据洞见。开关会显示在分析中,但选项的值不会。

前台是默认设置,因此很明显,软件包服务器正在运行,并且是最简单的执行模型。

对于远程工作流,后台模式是一种理想的模式,因为这样可以有一个远程终端窗口,并且对于 VS Code 等 IDE,用户在多个终端窗口之间切换的体验并不轻松。

--repo-name

通过名称唯一标识软件包服务器。如果另一个软件包服务器正在以相同名称运行,则新的软件包服务器将因错误而失败。

默认值为 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