启动软件包服务器

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 地址。例如 [::]:8083127.0.0.1:8083。一直以来,软件包服务器的首选端口为 8083。不过,我们会努力通过将默认端口 0 设为指示使用动态端口来提高灵活性。运行 ffx repository server list 可查看正在运行的代码库服务器的地址。

没有任何配置属性会影响地址选项。由于多个服务器的端口号必须是唯一的,因此无法配置此选项。

改用动态端口的目的是避免“端口正在使用”错误。使用本地连接的设备或模拟器在本地运行软件包服务器时,ffx 可以在内部管理软件包服务器的地址。

不过,在某些情况下,应使用特定网络地址根据目标设备的网络连接提供软件包。例如,当需要使用非 ffx 命令进行隧道或防火墙配置时,需要指定端口才能与这些其他工具中的配置匹配。

--background、--daemon、--foreground

软件包服务器的执行模式。这些选项是互斥的;一次只能使用一种执行模式。

  • --background 表示软件包服务器将在后台启动。这与 --foreground--daemon 互斥。

  • --daemon 表示软件包服务器将作为 ffx 守护程序的一部分启动。此模式应被视为已废弃,仅在无法使用 --background--foreground 时才应使用。在弃用和移除完成之前,--daemon 是默认模式,以确保向后兼容性。注意:如果必须使用 --daemon,请提交问题来说明缺少的功能,以便改进软件包服务器。

  • --foreground 表示软件包服务器将在前台启动。此值与 --background--daemon 互斥。

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

开发者可以根据界面上软件包服务器位于前台还是后台的具体情况,选择相应的偏好设置。无论采用何种处理模式,服务器行为都是相同的。

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

由于 SDK 的默认行为是运行基于守护程序的软件包服务器,因此这是目前的默认设置。软件包服务器将迁移到前台,这是默认情况,因此很明显,软件包服务器正在运行,并且是最简单的执行模型。

后台是远程工作流的理想模式,因此可以只有一个远程终端窗口,而对于 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”的配置属性。

有时,目标设备需要重新启动并保留更新后的软件包,而不是恢复到上次刷写或 OTA 中包含的软件包。当处理启动过程中使用的软件包时,这尤其有用。

示例

启动树内代码库

如需了解选项,请参阅 fx serve 参考文档。在实现过程中,系统会运行 ffx repository server start

fx serve

使用 VSCode(单终端窗口)时启动代码库

ffx repository server start --background

或 in-tree

fx serve --background