软件包是 Fuchsia 系统上的安装单元。本文档介绍了构建和安装软件包的各种工作流。
这些工作流如下:
如需了解详情,请参阅 ffx package build help
和 ffx repository publish help
中的帮助消息。
构建软件包
如需构建软件包,请执行以下操作:
创建
meta
目录:mkdir -p PACKAGE_DIR/meta
将 PACKAGE_DIR 替换为要构建软件包的暂存目录。
设置
$META_PACKAGE_FILE
环境变量:export META_PACKAGE_FILE=PACKAGE_DIR/meta/package
打开文本编辑器,然后创建包含以下内容的
$META_PACKAGE_FILE
文件:{ "name": "<intended name of your package here>", "version": "0" }
版本号目前必须为
0
。保存文件并关闭文本编辑器。
创建一个软件包 build 清单文件 (
$BUILD_MANIFEST_FILE
),该文件提供指向所有软件包内容文件的路径,并通过变量导出其路径:export BUILD_MANIFEST_FILE=BUILD_MANIFEST_FILE
清单文件中的每一行都映射到软件包中包含的文件,并且采用
destination=source
的格式,其中:destination
是最终软件包中文件的路径。source
是主机上文件的路径。
清单文件必须至少包含一行软件包 ID 文件,例如:
meta/package=/path/to/meta/package
要添加到软件包中的其他文件必须以相同的方式在 build 清单文件中列出。
转到 PACKAGE_DIR 目录:
cd PACKAGE_DIR
生成软件包清单文件,该文件会在 PACKAGE_DIR
/meta.far
中创建软件包元数据归档文件:ffx package build $BUILD_MANIFEST_FILE -o PACKAGE_DIR --api-level HEAD
此命令会隐式创建软件包清单文件 PACKAGE_DIR
/package_manifest.json
。请注意,最好使用
--api-level
定位到由数字参数指定的特定 API 级别。在此示例中,我们使用 HEAD,即最新的开发中 API。设置
$PACKAGE_MANIFEST_FILE
环境变量:export PACKAGE_MANIFEST_FILE="PACKAGE_DIR/package_manifest.json"
如果软件包的内容发生变化,您需要重新运行
ffx package build $BUILD_MANIFEST_FILE
命令。创建软件包归档文件,将所有软件包内容收集到单个可分发文件中:
ffx package archive create -o "PACKAGE_DIR/PACKAGE_NAME.far" "$PACKAGE_MANIFEST_FILE"
将 PACKAGE_NAME 替换为软件包的预期名称。
此命令会将软件包归档文件创建为 PACKAGE_NAME
.far
。设置
$PACKAGE_ARCHIVE
环境变量:export PACKAGE_ARCHIVE=PACKAGE_DIR/PACKAGE_NAME.far
如果软件包的内容发生变化,您需要重新运行
ffx package build
和ffx package archive create
命令。
您已成功构建软件包。现在,您可以发布软件包了。
发布软件包
如需发布软件包,请执行以下操作:
初始化一个用作软件包代码库的目录:
ffx repository create REPO
这会在目录 REPO 下创建一个目录结构,该结构已准备好发布软件包。
将软件包清单发布到代码库:
ffx repository publish --package $PACKAGE_MANIFEST_FILE REPO
ffx repository publish
会解析$PACKAGE_MANIFEST_FILE
并将软件包发布到提供的 REPO 目录中。--package
实参可以重复。如果您使用不同的软件包清单多次运行此命令,每个实例都将发布到同一代码库。您可以使用相同的命令发布同一软件包的新版本。(可选)将软件包归档文件发布到代码库:
ffx repository publish --package-archive $PACKAGE_ARCHIVE REPO
ffx repository publish
会解析$PACKAGE_ARCHIVE
并将软件包发布到提供的 REPO 目录中。--package-archive
实参可以重复。如果您使用不同的软件包归档多次运行此命令,每个实例都将发布到同一代码库。您可以使用相同的命令发布同一软件包的新版本。
您已成功发布软件包。现在,您可以安装软件包了。
安装软件包
如需安装软件包,请执行以下操作:
启动软件包服务器,并将代码库提供给目标:
ffx repository serve --repository "REPO_NAME" --repo-path "REPO"
默认情况下,这会在主机上启动一个存储库服务器,并监听端口
8083
。这会将该仓库作为更新源引入到目标中。--repository "REPO_NAME"
是可选的,但很有用。(在目标设备上)检查已配置的代码库:
pkgctl repo -v
您应该会看到已配置的代码库,其中列出了代码库网址
"repo_url": "fuchsia-pkg://<REPO_NAME>"
(以及其他配置变量)。下载软件包:
ffx target package resolve fuchsia-pkg://REPO_NAME/PACKAGE_NAME
如果系统中尚不存在该组件,目标设备上的软件包解析器会下载该软件包并将 blob 放入 blobFS 中。如果软件包已存在,但软件包服务器上有较新版本的软件包,系统会下载更新。
您已成功安装或更新软件包。现在,您可以从已安装的软件包中运行组件了。
从已安装的软件包运行组件
如需运行该组件,请使用 ffx component run
工具。如需帮助,请参阅 ffx component run --help
。
对于 url
参数,请提供采用 fuchsia-pkg://<REPO_NAME>/<PACKAGE_NAME>#meta/<COMPONENT_NAME>.cm
格式的网址。