更新(空中升级)
Updates(更新)区域用于通过空中(OTA)方式向设备交付新的固件、软件或配置。你上传更新镜像(制品),用你信任的密钥生成的签名为其担保(签名者),然后将它分配给设备。设备随后下载并安装,控制台会跟踪每一步,直到设备证明它正在运行新版本。
本章面向租户管理员以及发布设备软件的人员,介绍控制台界面;更新如何端到端运作,请参阅空中更新,创建密钥和为制品签名请参阅为更新签名。
更新服务是可选的,并非每个安装都运行它。如果你的实例没有运行,侧边栏中就没有 Updates 组,设备也没有 Updates 选项卡。参见启用。
侧边栏中,Updates 有两个界面:Artifacts(制品)和 Signers(签名者)。为设备分配更新在设备自己的页面上进行,即其 Updates 选项卡。
制品
制品是一个更新镜像:一个文件,加上它是什么(类型、名称、版本和部件)以及与哪些设备配置文件兼容。内容上传后,制品不可更改。
每一行显示名称、版本、部件、Trust(信任:Signed 或 Unverified)、State(状态)、大小和 SHA-256 Digest(摘要)。状态有:
- Uploading(上传中):制品已声明,但内容尚未存储。
- Available(可用):内容已存储并通过校验,因此制品可以分配。
- Retired(已停用):制品已不再用于新的分配。其元数据和内容保留。
Any trust(任意信任状态)和 Any state(任意状态)选择器会筛选整个目录。Filter this page…(筛选本页)框则不同:它只缩小已加载页面的范围,按名称、版本、部件、令牌或摘要匹配。要查看更多,请使用 Next(下一页)。
添加制品
点击 New artifact(新建制品)。你从文件开始,其余由控制台一步完成:在浏览器中计算文件的大小和 SHA-256,声明制品,并上传内容。
- 点击 Choose file(选择文件)。按钮下方显示你的实例接受的最大文件;更大的文件在发送任何内容之前就会被拒绝。
- 选择 Kind(类型):Firmware、Software 或 Configuration。
- 输入 Name(名称)、Version(版本)和 Component(部件)。版本是平台不解析的标签。部件是此更新所针对的设备部分,例如
firmware或app/agent。名称、部件和版本的组合必须唯一。 - Token(令牌)会根据名称和版本自动填入,你可以修改。
- 选择 Compatible device profiles(兼容的设备配置文件)。制品只能分配给使用这些配置文件的设备,因此至少选择一个。
- 可选:设置 Media type(媒体类型,留空则为
application/octet-stream)、Source(来源)和 Notes(备注)。 - 点击 Declare and upload(声明并上传)。
上传会显示进度。完成后,控制台会把服务存储的内容与你声明的内容进行比较。Content stored and verified(内容已存储并通过校验)表示两者一致。如果不一致,控制台会提示,制品保持不可用:请检查文件并重新上传。
如果制品声明之后上传失败,该制品存在但没有内容。点击 Retry upload(重试上传),或 Open artifact(打开制品)并在其页面上上传文件。
制品页面
打开制品即可看到它的页面。页眉显示名称和版本、令牌,以及其信任状态、状态和类型的徽章。Retire(停用)在你确认后将制品从新的分配中撤下。停用无法撤销。
Details(详情)面板列出已声明的内容,完整摘要可通过复制按钮获取。随制品记录的任何来源信息(例如备注和来源)随后列出。这些条目按其存储时的键显示,不做翻译(例如 UPLOADEDBY)。
仍处于 Uploading 状态的制品有一个 Upload content(上传内容)面板。选择为该制品声明的文件;控制台会在发送任何内容之前检查其大小和 SHA-256,并拒绝不是所声明的文件。
签名与信任
制品的信任状态在每次读取时,根据已记录的签名以及其背后签名者的状态计算得出:
- Signed(已签名):至少有一个处于活动状态的签名者对该制品有已验证的签名。
- Unverified(未验证):没有任何处于活动状态的签名者对其有已验证的签名。平台仍会检查字节与声明的字节一致,但不说明它们由谁制作。
Signatures and trust(签名与信任)面板显示信任状态,然后按从旧到新的顺序列出此制品上记录的签名。对每个签名,你会看到签名者的名称、其密钥 ID、算法、签名者的状态、签名的添加时间和添加者,以及它是否仍然 Counts toward trust(计入信任)。来自此后已被吊销的签名者的签名仍保留记录,但显示为 No longer counts (signer revoked)(不再计入,签名者已吊销)。没有签名的制品会说明这一点。
要添加签名,请填写面板底部的 Add a signature(添加签名):
- Signer key ID(签名者密钥 ID):已注册签名者的密钥 ID,如 Signers 界面所示或由你的签名工具打印出来。控制台会告诉你它匹配哪个签名者,或在签名者已被吊销或找不到时发出警告。
- Signature (base64)(签名,base64):对制品摘要的签名。Ed25519 密钥对 32 字节的原始摘要签名;ECDSA P-256 签名与
cosign sign-blob相符。
点击 Add signature(添加签名)。服务会针对制品存储的摘要验证签名,并拒绝验证不通过的签名。每一步的命令见签名指南。
未验证的制品
未验证的制品在其页面顶部带有一条通知,说明你的实例允许什么:通常,未验证的制品在签名之前不能分配给设备。实例可以被设置为允许分配,这仅用于开发。如果控制台无法读取该设置,通知会告诉你应假定该制品不能分配。
签名者
签名者是你的租户信任的、可为制品担保的公钥。只存储公钥;私钥保留在签名者手中。打开 Updates → Signers。
列表显示每个签名者的名称、密钥 ID、算法、状态、注册和吊销时间,以及其 Sole-signed artifacts(唯一签名的制品):没有其他活动签名者的制品数量,因此如果吊销该签名者,这些制品会变为未验证。
注册和吊销签名者需要 artifact:trust 权限,它与上传制品的权限是分开的。没有该权限时,你能看到列表,但没有任何操作。
注册签名者
点击 Register signer(注册签名者)并输入:
- Name(名称):用于识别签名者的标签,例如持有该密钥的团队或构建流水线。
- Public key (PEM)(公钥,PEM):一个 SPKI 公钥块,ECDSA P-256 或 Ed25519。
点击 Register(注册)。只粘贴密钥对的公钥部分。如果你粘贴的内容看起来像私钥,控制台不会发送任何内容,并会清空该字段。抽屉中的链接指向签名指南,其中介绍了如何生成密钥并计算密钥 ID。
吊销签名者
在处于活动状态的签名者上点击 Revoke(吊销)。确认框会告诉你有多少制品没有其他活动签名者,并将变为 UNVERIFIED。该数量包含已停用的制品。
吊销是永久性的。该签名者的签名保留记录但不再计入,因此仅由它担保的制品会立即变为未验证。已经分配的更新保留分配时的签名,因此仍按分配时的情况交付。参见签名指南中的“Revoking a signer”。
为设备分配更新
更新逐台分配,在设备的页面上进行。打开设备并选择 Updates 选项卡。只有当你的实例运行更新服务,且你有权读取更新时,该选项卡才会出现。
顶部的链接指向签名指南和签名者的工作方式。Refresh(刷新)重新加载该选项卡。
当前更新
Current update(当前更新)卡片显示设备正在处理的更新:制品及其信任状态、更新尝试的状态、部件、尝试 ID、进度、设备上次报告的时间、分配者,以及是否需要重启。Pinned signer(固定的签名者)显示随更新一起发给设备的签名。如果该签名者之后被吊销,卡片会提示:更新保留分配时所用的签名。
状态徽章跟随设备的报告,从 QUEUED 经过下载、验证、安装和重启,直到 UPDATED。更新只有在有证据时才会到达 UPDATED:设备报告新版本正在运行。完整的状态列表见尝试如何推进。
QUEUED 表示平台已创建该更新,但设备尚未报告任何关于它的信息。在设备报告之前,进度显示 Not reported(未报告)。在截图中,更新一直处于 QUEUED,因为这个演示租户中的模拟温控器从不报告更新进度。接收到分配的真实设备会确认并推进它。
如果更新失败,卡片会显示原因:失败所处的阶段,是设备报告的失败还是平台判定的失败,以及对于常见的签名和下载失败,应该怎么做。
取消或放弃更新
- 在安装开始之前都可以使用 Cancel update(取消更新)。处于 QUEUED 的更新会立即取消,之后可以分配新的更新。设备已接手更新后,取消会向它发送停止请求:只有设备确认后取消才完成,在此之前卡片显示 Cancel pending(取消待确认)。安装一旦开始,更新就不能再取消。
- 当更新处于未知状态时提供 Abandon update(放弃更新):设备在安装或重启期间停止了报告,没有人知道它运行的是哪个版本。放弃会将更新以已取消结束,保留你给出的 Reason(原因,必填)作为该更新的原因,以你的名义记录这次更改,向设备发送取消,并释放设备以便重新分配。它不会查明设备正在运行什么,因此在依赖任一版本之前,请先检查设备的清单。
分配更新
使用 Assign an update(分配更新):
- 选择一个 Artifact(制品)。只列出可用的制品,且设备的配置文件必须在制品的兼容列表中。当你的实例不允许未验证的制品时,未验证的制品标记为 Not assignable(不可分配)。
- 点击 Assign(分配)。
如果设备已有更新正在进行,该部分会说明,并且在那个更新被取消或完成之前,分配另一个会被拒绝。当实例不允许未验证的制品时,对未验证的制品 Assign 保持禁用,并显示原因。
分配历史
Assignment history(分配历史)列出设备过去和当前的分配,包括制品、状态、任何失败、每次分配的时间和分配者。
被禁用的设备
当设备被禁用时,选项卡会说明它已与更新隔绝。在设备重新启用之前不能分配新的更新,Assign 处于禁用状态。禁用设备不会召回已在进行中的更新;如果不希望它继续,请在此选项卡上取消。取消时,仍在排队的更新会立即取消;设备已经接手的更新在设备被禁用期间保持 Cancel pending,因为它的报告会被拒绝:取消在设备重新启用并确认时完成,否则更新会在其所处阶段的截止期以超时结束。