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://。

配置必須為小寫;Fuchsia 網址剖析器 (//src/lib/fuchsia-url) 會拒絕大寫字元。

存放區

套件網址包含存放區主機名稱,用於識別套件來源。主機名稱定義為以點 (.) 分隔的 LDH 標籤序列,每個標籤由 1 到 63 個下列 latin-1 字元組成,且開頭或結尾不得為連字號 (-):

  • 數字 (0 到 9)
  • 小寫字母 (a 至 z)
  • 連字號 (-)

不得使用其他字元。

主機名稱的總長度上限為 253 個字元 (包括點號)。

存放區根目錄驗證 (已知來源)

存放區的根角色 (一或多個公開或私密金鑰組的仲裁) 會建立信任鏈,以便透過加密方式驗證套件的真實性、完整性和新鮮度。根角色會為權限較有限的角色簽署金鑰,這些角色則會用於簽署套件中繼資料和目標本身。詳情請參閱「TUF 安全性」和「TUF 角色和中繼資料」。

如要驗證套件是否真實,您必須驗證下載套件的存放區是否真實。

具體做法是在裝置上維護已知來源存放區及其公開金鑰的清單。系統會拒絕不明來源的套件,但在特定建構類型中,可以在執行階段新增存放區。

語法

必要

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

範例

fuchsia-pkg://fuchsia.com

套件名稱

套件名稱是用來識別套件的符號標籤。套件名稱用於在存放區中找出套件中繼資料。套件中繼資料必須由存放區根目錄信任的角色簽署。

套件名稱由最多 255 個下列 latin-1 字元組成,順序不限:

  • 數字 (0 到 9)
  • 小寫字母 (a 至 z)
  • 連字號 (-)
  • 底線 (_)
  • 經期 (.)

不得使用其他字元。

存放區中所有套件的名稱不得重複。即使名稱相同,不同存放區中的套件仍視為不同。

語法

必要

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 個下列 Latin-1 字元組成:數字 (0 到 9) 和小寫字母 (a 到 f)。不得使用其他字元。

語法

選用

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

必須指定套件名稱才會生效。

查詢必須僅由 ?hash= 後接套件雜湊組成;Fuchsia 網址剖析器會拒絕任何其他查詢參數或第二個 hash= 參數。

範例

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

資源路徑

資源路徑是 UTF-8 字串,用於識別套件中的資源。這是相對檔案路徑,由單一 / 分隔的區段組成。每個區段都必須是非空白的 UTF-8 位元組序列,長度不超過 255 個位元組,不等於 . 或 ..,且不得包含 NUL (\0) 或換行 (\n) 字元。這個定義與 Fuchsia 檔案系統路徑相符,但需要有效的 UTF-8 (剖析器會將 %HH 逸出解碼為 UTF-8,並拒絕其他位元組序列)、拒絕換行字元,且路徑總長度沒有限制。

在網址中,單一 # 字元會位於百分比編碼資源路徑之前。

Fuchsia 網址剖析器會按照 RFC 3986 的規定,解碼 #<resource-path> 中的每個 %HH 逸出字元 (其中 HH 是兩個十六進位數字,不分大小寫),然後驗證解碼後的資源路徑。由於剖析器會在將資源路徑分割成區隔之前解碼逸出字元,因此 %2F 會做為區隔分隔符。

您必須對下列字元進行百分比編碼,否則剖析器會在 # 後方出現未編碼的字元時拒絕:

字元 編碼
空格鍵 %20
雙引號 (") %22
井字號 (#) %23
百分比符號 (%),除非開頭為 %HH 逸出 %25
小於符號 (<) %3C
大於符號 (>) %3E
倒引號 (`) %60
控制字元 U+0000 至 U+001F %00到%1F
控制字元 U+007F 至 U+009F %7F和%C2%80到%C2%9F
任何其他非 ASCII 字元 UTF-8 位元組,例如 é 的 %C3%A9

由於每個 % 都必須以 %HH 逸出字元開頭,因此剖析器會拒絕後面未接兩個十六進位數字的 % (例如 100% 或 %zz)。您可以加入任何其他未編碼的 ASCII 字元。要求非 ASCII 字元必須經過百分比編碼,可確保每個網址都使用 ASCII,因此不可見或看起來像其他字元的字元 (例如不分行空格、由右至左覆寫或斯拉夫文 о (U+043E)) 無法隱藏在網址中。由於解碼後的資源路徑仍須遵循上述規則,因此 %00 (NUL) 和 %0A (換行) 即使經過編碼,仍為無效。

標準網址會使用 WHATWG 片段百分比編碼集加上 % 和 #,對資源路徑進行編碼。這會使用大寫十六進位數字,對上表中的字元進行編碼。

舉例來說,hello/unicode/%F0%9F%98%81 會解碼為 hello/unicode/😁,而剖析器會拒絕未編碼的 #hello/unicode/😁。同樣地,data/my%20file.txt 會解碼為 data/my file.txt,data/100%25.txt 會解碼為 data/100%.txt,而剖析器會拒絕未編碼的 #data/my file.txt 或 #data/100%.txt。

語法

選用

必須指定套件才會生效。

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