POST – 固件的 HTTP 推送更新
此操作可通过将软件映像文件推送到 UpdateService.HttpPushUri 属性引用的 URI,对已安装的软件组件执行更新。
请求 URL
https://<SMM_IPADDR>/redfish/v1/UpdateService/update
请求正文
对此 URI 执行 POST 时,所使用的认证应与访问 UpdateService 的认证一致,确保拥有相同的权限。
- “X-Auth-Token”,使用现有的或新的令牌
- 用于指定用户凭据的 BASIC“Authorization”标头。
响应正文
HTTP 推送更新支持采用二进制数据发布方法的文件上传(例如,curl –data-binary 选项,假设正文的 content-encoding 为 application/octet-stream)。此外,还支持使用表单 POST 方法进行文件上传,这种方法相当于执行“curl -F”操作,其标头为“Content-Type: mulitpart/form-data”。
如果客户端在同一个 POST 请求中上传多个文件,则仅接受第一个文件,其他文件将被忽略。
客户端可以选择在 POST 上包含“Content-Length”标头以指示 POST 正文大小。SMM 检查此标头并验证其大小是否在固件更新支持的最大文件大小范围内。如果文件大于服务所支持的大小,则服务将返回代码 413(请求实体过大),并会显示一条错误消息,指明文件过大。
给出的“Content-Length”应在 0~2147483647 (0~0x7FFFFFFF)以内,否则将返回 HTTP 400。
客户端可以选择在 POST 正文数据中包含 HTTP 分段式表单数据,以便指定 RFC2388 中定义的映像文件名。这相当于执行“curl -F”操作。这是可选的,服务不得要求这样做。如果客户端在同一 POST 请求中上传多个文件,则服务将返回 HTTP 400(错误请求),并显示一条错误消息,指示格式不受支持。
如果在服务忙于刷写上一个更新时执行另一个 POST 以进行 HttpPushUri 固件更新,服务将接受该请求并上传文件。如果文件上传完成后仍在进行上一个更新,服务将在 Task 资源中返回 ResourceInUse 错误以指示更新服务正忙,并会拒绝推送更新。
尽管 HttpPushUri 和 MultipartHttpPushUri 是两个独立的 URI,但如果正在通过 MultipartHttpPushUri 上传文件,那么通过 HttpPushUri 上传文件的操作可能会被拒绝并返回 409 冲突错误,反之亦然。
状态代码
| HTTP 状态代码 | 错误消息 ID |
|---|---|
| 401 | 未经授权 |
| 403 | 已禁止 |
| 503 | 服务暂时不可用 |
| 500 | 内部错误 |
| 202 | 接受 |
示例
推送上传的示例:
将固件映像推送到 HttpPushUri 属性中的 URL。
下面是用于 UEFI HTTP 推送更新请求的示例 curl 命令。
curl -k -H <Authentication> -H "Content-Type: application/octet-stream" -T <firmware image>https://{SMM3 IP}:{SMM3 port}/redfish/v1/UpdateService/update注- <Authentication>
- BasicAuth(例如:-u user:password 或 -H“X-Auth-Token: Basic <encoding string>”)
- X-Auth-Token(例如:-H“X-Auth-Token: <token string>”)
- <firmware image>
- 例如:“lnvgy_fw_smm3_q4sm01a-1.0.00_anyos_comp.uxz”