Fuchsia 软件包网址

Fuchsia 软件包网址如下所示:

fuchsia-pkg://<repository>/<package-name>?hash=<package-hash>#<resource-path>

它由以下部分组成,组成了完整的软件包网址:

网址格式

fuchsia-pkg 网址架构结合了识别特征,根据包含的具体部分来建立引用代码库、软件包或资源的方法。

语法

必需

fuchsia-pkg://<repository>[/<package-name>[?hash=<package-hash>][#<resource-path>]]

Fuchsia 软件包的架构为不区分大小写的字符 fuchsia-pkg://

虽然规范化形式是小写,但网址架构编码不区分大小写,因此系统会处理所有情况。

代码库

软件包网址包含用于标识软件包来源的代码库主机名RFC 1123RFC 5890 指定主机名是以点 (.) 分隔的 IDNA A 标签序列,其中每个 A 标签均包含 1 到 63 个以任意顺序排列的以下 lat-1 字符:

  • 数字(09
  • 小写字母(az
  • 连字符 (-)

不允许包含其他字符。

主机名的总长度上限为 253 个字符(包括点)。

代码库根验证(已知来源)

代码库的根角色(由一个或多个公钥或私钥对组成的仲裁)建立了一个信任链,以便以加密方式验证软件包的真实性、完整性和新鲜度。根角色为密钥签名,范围较为受限的角色,然后用于为软件包元数据和目标本身签名。如需了解详情,请参阅 TUF 安全性以及 TUF 角色和元数据

如需验证软件包是否真实,您必须验证从中下载该软件包的代码库是否真实。

具体实现方法是在设备上维护一个已知源代码库列表及其公钥。来自未知来源的软件包会被拒绝,但在某些 build 类型中,可以在运行时添加新的代码库。

语法

必需

fuchsia-pkg://<repository>/<package-name>?hash=<package-hash>#<resource-path>

示例

fuchsia-pkg://fuchsia.com

软件包名称

软件包名称是用于标识软件包的符号标签。软件包名称用于在代码库中查找软件包元数据。软件包元数据必须由代码库根目录信任的角色签名。

软件包名称由以下一系列拉丁字符(最多 255 个)组成(按任意顺序排列):

  • 数字(09
  • 小写字母(az
  • 连字符 (-)
  • 下划线 (_)
  • 时间段 (.)

不允许包含其他字符。

每个软件包名称在代码库中的所有软件包中必须是唯一的。不同代码库中的软件包即使名称相同,也会被视为不同。

语法

必需

fuchsia-pkg://<repository>/<package-name>?hash=<package-hash>#<resource-path>

代码库和软件包名称之间必须有一个 / 字符。

示例

  • fuchsia-pkg://fuchsia.com/fuchsia-shell-utils
  • fuchsia-pkg://fuchsia.com/fuchsia-shell-fonts
  • fuchsia-pkg://fuchsia.com/fuchsia-shell-scenic

软件包哈希值

软件包哈希值是软件包的 meta.far 的 merkleroot。由于软件包的元数据对软件包文件的内容地址进行编码,因此对软件包的元数据或内容所做的任何更改都会产生不同的软件包哈希,从而可以区分软件包的每个唯一修订版本。

如果缺少软件包哈希,软件包解析器会从客户端可用的软件包的最新修订版本中提取资源。

软件包哈希表示为一个十六进制编码字符串,由以下 64 个 lat-1 字符组成:数字(09)和小写字母(af)。不允许使用其他字符。

语法

可选

fuchsia-pkg://<repository>/<package-name>?hash=<package-hash>#<resource-path>

仅在指定了软件包名称时才有效。

必须以字符串 ?hash= 开头,后跟软件包哈希值

示例

fuchsia-pkg://google.com/chrome?hash=80e8721f4eba5437c8b6e1604f6ee384f42aed2b6dfbfd0b616a864839cd7b4a#meta/webview.component

资源路径

资源路径是一个 UTF-8 字符串,用于标识软件包中的资源。 这是一个文件路径,由一系列单个以 / 分隔的路径段组成,每个路径段都是一个非空序列,由不等于 .../ 的非零 UTF-8 字符组成。必须以单个 # 字符开头。

它必须相对于软件包的根目录。

根据 RFC 3986,包含预留字符的网址组成部分进行百分号编码。该定义与紫红色文件系统路径的定义兼容,但它强制使用 UTF-8 编码,而不是接受任意二进制字符串,因为此类字符串无法始终编码为有效网址。

例如,hello/unicode/%F0%9F%98%81 会解码为 hello/unicode/😁

语法

可选

仅在指定了软件包时才有效。

fuchsia-pkg://<repository>/<package-name>?hash=<package-hash>#<resource-path>

示例

  • fuchsia-pkg://fuchsia.com/fuchsia-shell-utils#bin/ls
  • fuchsia-pkg://google.com/chrome#meta/webview.component
  • fuchsia-pkg://google.com/chrome#lib/mylibrary.so

构建软件包网址

您可以使用可修改的变量构建软件包网址,然后将其复制:

fuchsia-pkg://repository/package-name?hash=package-hash#resource-path