创建 Fuchsia 软件包代码库

ffx repository 命令可在宿主机上创建和管理 Fuchsia 软件包代码库。

概念

当 Fuchsia 设备需要运行新软件或更新现有软件时,设备会从 Fuchsia 软件包服务器请求并下载 Fuchsia 软件包,Fuchsia 软件包服务器可以在主机上运行。然后,Fuchsia 软件包服务器从主机上配置的 Fuchsia 软件包代码库提供 Fuchsia 软件包。

Fuchsia 软件包代码库会映射到主机上的目录。处理来自 Fuchsia 设备的请求时,Fuchsia 软件包服务器会在此目录中查找 Fuchsia 软件包。如果找到这些文件,软件包服务器会直接从此目录将软件包提供给设备。因此,您应将目标设备的开发中 Fuchsia 软件包存储在宿主机上的此目录中。

创建新的 Fuchsia 软件包仓库后,您需要将该软件包仓库注册到 Fuchsia 设备(或设备),以允许设备从此软件包仓库下载 Fuchsia 软件包。Fuchsia 设备只能从其注册的 Fuchsia 软件包代码库中下载 Fuchsia 软件包。

最后,您可以将 Fuchsia 软件包服务器设置为从同一主机上的多个 Fuchsia 软件包仓库提供服务,您可以将每个软件包仓库专用于特定用途(例如,将稳定版软件包与实验版软件包分开)。

创建软件包代码库

如需在主机上创建和设置新的软件包代码库,请执行以下操作:

  1. 创建新仓库:

    ffx repository create <REPOPATH>
    

    REPO_PATH 替换为新代码库的目录路径。

    不过,系统不会检查该目录中是否存在现有内容,因此请务必先确保该目录不存在,然后再运行此命令。

  2. (可选)为代码库设置默认名称:

    ffx repository default set <REPO_NAME>
    

    REPO_NAME 替换为软件包仓库的名称,例如:

    ffx repository default set my-repo
    

    通常不需要这样做,因为 ffx 的 build 目录级配置已包含正确的值。

    设置默认代码库后,此命令将静默退出而不输出。

启动 Fuchsia 软件包服务器

为了能够在宿主机上从 Fuchsia 软件包代码库中传送软件包,该机器上必须运行 Fuchsia 软件包服务器。

如需启动新的 Fuchsia 软件包服务器,请运行以下命令:

ffx repository server start --foreground  --repo-path <REPO_PATH>

REPO_PATH 替换为主机上产品软件包的路径,例如:

$ ffx repository server start --foreground  --repo-path ~/my-product-bundle

另请注意,此命令会在前台启动软件包服务器 (--foreground)。这意味着服务器的日志消息将输出到终端窗口。或者,您也可以使用 --background 选项在后台启动软件包服务器。在这种情况下,日志消息将存储在 ${log.dir}/repo-REPO_NAME.log 文件中。如需了解更多选项,请参阅启动软件包服务器

使用产品软件包启动 Fuchsia 软件包服务器

如需从现有产品软件包中分发软件包,您需要下载该产品软件包,并使用该产品软件包启动软件包服务器。

请执行以下操作:

  1. 查看可用产品的列表:

    ffx product list
    
  2. 下载所需的产品套装:

    ffx product download <PRODUCT> <DOWNLOAD_DIR>
    

    替换以下内容:

    • PRODUCT_NAME:目标 Fuchsia 设备的商品名称。
    • DOWNLOAD_DIR:您要将商品软件包下载到的目录。

    例如:

    S ffx product download core.x64 ~/Downloads/product-bundles/
    
  3. 启动 Fuchsia 软件包服务器:

    ffx repository server start --background --product-bundle <DOWNLOAD_DIR>
    

    DOWNLOAD_DIR 替换为包含商品软件包的目录,例如:

    $ ffx repository server start --background  --product-bundle ~/Downloads/product-bundles
    

    您可以通过检查目录中是否存在 product.bundle.json 文件来确认它是否为商品软件包目录。如需了解详情,请参阅启动软件包服务器

将软件包代码库注册到 Fuchsia 设备

软件包服务器运行后,您需要将服务器地址注册到目标设备。

请执行以下操作:

  1. 启用 Fuchsia 设备以连接到新代码库:

    ffx target repository register [-r <REPO_NAME>] --alias fuchsia.com --alias chromium.org
    

    REPO_NAME 替换为您希望 Fuchsia 设备连接到的代码库的名称。

    如果未指定 -r 标志,则该命令会选择默认代码库。例如,以下命令会将您当前的 Fuchsia 设备设置为连接到位于 fuchsia.com 的默认代码库 (my-repo):

    $ ffx target repository register --alias fuchsia.com --alias chromium.org
    

    注册代码库后,此命令会静默退出,不会输出任何内容。

  2. 验证新代码库已注册:

    ffx target repository list
    

    此命令会输出类似于以下内容的输出:

    $ ffx target repository list
    REPO                  URL                              ALIASES
    fuchsia-pkg://default ["http://10.0.2.2:8083/my-repo"] ["fuchsia.com", "chromium.org"]
    

取消注册软件包代码库

如需从设备上取消注册 Fuchsia 软件包代码库,请运行以下命令:

ffx target repository deregister [-r <REPO_NAME>]

REPO_NAME 替换为已注册代码库的名称,例如:

$ ffx target repository deregister -r my-repo

如果未指定 -r 选项,该命令将选择默认代码库。

停止 Fuchsia 软件包服务器

如需停止正在运行的 Fuchsia 软件包服务器,请运行以下命令:

ffx repository server stop

此命令会输出类似于以下内容的输出:

$ ffx repository server stop
server stopped

如需了解更多选项,请参阅停止运行软件包服务器

为基于守护程序的软件包服务器创建软件包代码库

如需在宿主机上创建新的 Fuchsia 软件包仓库,请执行以下操作:

  1. 创建新仓库:

    ffx repository create <REPO_PATH>
    

    其中 REPO_PATH 是新代码库的目录路径,例如:

    $ ffx repository create ~/my-fuchsia-packages
    

    但是,系统不会检查该目录中的现有内容,因此在运行此命令之前,请确保该目录不存在。

  2. 将新代码库添加到 ffx 配置:

    ffx repository add-from-pm <PM_REPO_PATH> [-r <REPO_NAME>]
    

    请替换以下内容:

    • PM_REPO_PATH:存储 Fuchsia 软件包的目录的路径。
    • REPO_NAME:新代码库的用户定义名称。如果未指定 -r 选项,则该命令默认将新代码库命名为 devhost

    以下示例命令将创建一个新代码库,并将其命名为 my-repo

    $ ffx repository add-from-pm ~/my-fuchsia-packages -r my-repo
    

    创建新代码库后,此命令会静默退出,不会输出任何内容。

  3. 验证是否已创建新的代码库:

    ffx repository list
    

    此命令会输出类似于以下内容的输出:

    $ ffx repository list
    NAME                TYPE       ALIASES     EXTRA
    my-repo             pm                     /usr/alice/my-fuchsia-packages
    
  4. (可选)将新代码库设为默认代码库:

    ffx repository default set <REPO_NAME>
    

    REPO_NAME 替换为代码库的名称,例如:

    $ ffx repository default set my-repo
    

    通常不需要这样做,因为 ffx 的 build 目录级配置中已包含正确的值。

    设置默认代码库后,此命令会静默退出,不会输出任何内容。

    为了让 Fuchsia 设备开始从这个新代码库下载 Fuchsia 软件包,您需要将此代码库注册到设备

启动基于守护程序的软件包服务器

如需启动基于 ffx 守护程序的 Fuchsia 软件包服务器,请运行以下命令:

ffx repository server start --daemon

此命令会输出类似于以下内容的输出:

$ ffx repository server start --daemon
server is listening on [::]:8083

如需了解更多选项,请参阅启动软件包服务器

移除基于守护程序的软件包服务器的软件包代码库

如需移除 Fuchsia 软件包代码库,请运行以下命令:

ffx repository remove <REPO_NAME>

REPO_NAME 替换为仓库的名称,例如:

$ ffx repository remove my-repo

移除代码库后,此命令将静默退出,没有输出。