跳到主要内容

从存储库更新

从远程存储库更新服务器固件

使用“CIFS/NFS/HTTPS/板载固件历史”功能需要具有 XCC Platinum 许可证

概述

XCC 引入了使用更新捆绑包(服务包)更新服务器固件的功能。此功能可使用单个 API 或 Redfish 客户端工具来更新系统中的所有固件(包括 OOB 和 IB 固件包),从而简化更新流程。该过程包括识别适用的固件包、从远程 HTTP/HTTPS 服务器下载并提取这些固件包或通过 Web 浏览器将这些固件包上传到 BMC 内部存储,或者从 CIFS 或 NFS 共享目录装载这些固件包。

如果使用 CIFS 或 NFS 装载,元数据文件需要放在网络共享文件系统的根目录中,并在元数据中指定固件的有效负载。服务器的 microSD 设备可以存储历史存储库,以允许用户回滚固件级别。

如果固件包包含任何不支持带外固件更新的有效负载,BMC 将启动服务器并将其配置为从安装在 BMC 中的嵌入式操作系统映像启动,然后再执行更新。

更新捆绑包和元数据

更新捆绑包(服务包)是固件捆绑包的压缩文件,其中会包含用于系统内组件的一个或多个固件包。XCC 的“从存储库更新”功能会使用更新捆绑文件。解压缩后的捆绑文件包含元数据和有效负载二进制文件。JSON 元数据文件向 XCC 提供有关捆绑文件所包含的固件映像类型的信息,有效负载二进制文件则提供固件映像。

XCC 内的固件存储库

更新捆绑包可以包含多个固件包,而 XCC(一种电子设备)会在其闪存中保留 2 GB 的空间用于新功能。当收到新捆绑包时,XCC 会清理旧数据。一些平台会使用 MicroSD 卡来提供额外的存储空间,而 XCC 会将最后更新的捆绑包移动到 SD 卡的历史存储库中。固件历史存储库最多可以存储三个捆绑包,用户可以使用“固件回滚”功能恢复到之前的捆绑包。

  • 如果更新捆绑包仅包含可用于系统的 OOB 固件包,XCC 将不会更改系统电源状态。要更新 PCI 设备固件,系统需要处于开机状态。

  • 如果更新捆绑包包含可用于系统的 IB 固件包,XCC 会存储更新前的系统电源状态,并在更新后恢复电源状态。在更新过程中,XCC 会将主机重新启动至嵌入式操作系统。

  • 如果更新捆绑包包含 UEFI 固件的先决条件级别,而当前安装的 UEFI 版本不符合或低于该级别,则 XCC 会先关闭系统以执行 UEFI 固件更新。

  • 如果更新捆绑包包含 XCC 固件的先决条件级别,并且当前安装的 XCC 版本不符合或低于该级别,则 XCC 在自我升级后会先重新启动。

使用 WebGUI 更新

通过从存储库更新,用户可以配置 XCC 以便将服务器固件与远程 CIFS/NFS 固件存储库同步。固件存储库中应包含包(包括二进制文件和元数据文件),或者更新捆绑包元数据 JSON 和相应的二进制文件。XCC 会解析这些元数据 JSON 文件,从中挑选出支持对此特定系统硬件进行 OOB 更新的固件包,然后启动批量更新。

有五种更新状态:
  • 绿色复选标记 固件升级成功完成。
  • 红色 X 标记 固件升级失败。
  • 更新中:固件正在升级过程中。
  • 取消:固件升级被取消。
  • 等待中:固件升级正在等待部署。
当用户单击停止更新时,将在当前安装包更新完成后,取消队列中的升级。

要从存储库更新,请完成以下步骤:

  1. 输入远程存储库信息后,单击连接以连接至远程存储库。
  2. 单击更新开始批量更新。
  3. 单击查看详情查看更新状态,如上所述,有 5 种状态。
  4. 单击停止更新时,将在当前安装包更新完成后,取消队列中的升级。
  5. 单击断开连接以断开与远程存储库的连接。
  6. 如果更新需要重新启动 XClarity Controller 才能生效,将会显示一条警告消息。有关如何重新启动 XClarity Controller 的详细信息,请参阅电源操作
如果系统安装了 MicroSD 卡,您可以查看更新捆绑包的更新历史记录,并选择更新捆绑包的索引进行固件回滚。这个过程类似于从存储库更新,只不过历史更新捆绑包是放置在 MicroSD 中的。

使用 Redfish 更新

Redfish 接口使用 JSON 格式的有效负载,以便于人们阅读和编写脚本。XCC Redfish 提供一个标准 API(SimpleUpdate)和一个多部分 HTTP 推送更新,前者用于通过 HTTP/HTTPS/SFTP/TFTP 从 URI 检索更新捆绑文件,后者用于推送更新捆绑文件 UpdateService。您可以使用命令或单个 Redfish 客户端工具来执行固件更新和查询更新状态。

将捆绑文件推送到 XCC 并生成文件传输和验证任务的示例命令:

curl -s -k -u USERID:PASSW0RD-F 'UpdateParameters={"Targets":[]};type=application/json' -F 'UpdateFile=@./NY7D72-IB-320.zip;type=application/octet-stream' https://10.240.218.157:443/mfwupdate
{
"ld": "f2fd6e9d-cOa6-4b11-b9f6-69a17a1 ,
"Name": "Task f2fd6e9d-cOa6-4b11-b9f6-69a17a1 e579c",
"@odata.type": "#Task.v1_5_1. Task",
"@odata.id': "[redfish/v 1 fTaskServicefTasks/f2fd6e9d-c0a6-4b11-b9f6-69a 17a1 e579c",
"Messages": [l
"Description": "This resource represents a task for a Redfish implementation."
"StartTime": "2022-03-21 TOT 16:41 +00:00",
"TaskMonitor": "/redfish/v1fTaskSen.'ice/c069ed4a-e754-4970-ab9a-922e8a3e076b",
"@odata.context": "'redfish/v1/$metadata#Task.Task",
"@odata.etag":
"PercentCompIete": O,
"HidePayload": true,
"TaskState": "New"
}

使任务 API 在传输和映像验证完成后以固件更新的作业 ID 作出响应的示例命令:

<strong className="ph b">https://10.240.218.157/
redfish/v1/TaskService/Tasks/f2fd6e9d c0a6 4b11 b9f6 69a17a1e579c</strong>
{
"@odata.etag": ,
"Name-: "Task f2fd6e9d-cOa6-4b11-b9f6-69a17a1e579c",
Task",
"IredfishNI/TaskSemcenasksff2fd6e9d-cOa6-4bI I-b9f6-69aI 7a1e579c",
"Messages": [
{
"Resolution": "Follow the referenced job and monitor the job for further updates.",
"@odata.type":
'MessageSeverity": "0K",
"MessageArgs": [
"IredfishtvI/JobService/J0bs/J0bROOOOOI-lJPdate"
],
"Messageld": "Update. 1 .O.OperationTransitionedToJob",
"Message": "The update operation has transitioned to the job at URI 'Iredfsh/vl IJobService/Jobs/JobR000001-Update'."
}
],
"Description": "This resource represents a task for a Redfish implementation.",
"HidePayIoad": true,
"StartTime":
"TaskMonitor: "'redfish1v1/TaskseNice/c069ed4a-e754-4970-ab9a-922e8a3e076b",
"TaskStatus": "0K",
"@odata.context-: "'redfish/v1/$metadata#Task.Task",
"ld": "f2fd6e9d-cOa6-4b11-b9f6-6ga17a 1 e579c",
"Percentcomplete": 100,
"EndTime": 2022-03-21
"TaskState": "Completed"
}

通过查询作业 ID,XCC 会返回更新捆绑包中所有固件包的作业步骤,如下所示:

https://10.240.218.157/redfish/v1/JobService/Jobs/JobR000001-Update
{
"@odata.etag": "\"1647847200776\"", "PercentComplete": 100, "@odata.type": "#Job.v1_0_7.Job",
"@odata.id": "/redfish/v1/JobService/Jobs/JobR000001-Update", "Messages": [
{
"Resolution": "None.",
"@odata.type": "#Message.v1_1_2.Message", "MessageSeverity": "OK",
"MessageArgs": [ "NY7D72-IB-320.zip",
"HardDiskDrive"
],
"MessageId": "Update.1.0.UpdateSuccessful ",
"Message": " Device 'HardDiskDrive' successfully updated with image 'NY7D72-IB-320.zip'."
},
{
"Resolution": "None.",
"@odata.type": "#Message.v1_1_2.Message", "MessageSeverity": "OK",
"MessageArgs": [ "NY7D72-IB-320.zip",
"/redfish/v1/UpdateService/FirmwareInventory/UEFI"
],
"MessageId": "Update.1.0.UpdateSuccessful",
"Message": "Device '/redfish/v1/UpdateService/FirmwareInventory/UEFI' successfully updated with image 'NY7D72-IB-320.zip'. "
},
{
"Resolution": "None.",
"@odata.type": "#Message.v1_1_2.Message", "MessageSeverity": "Critical",
"MessageArgs": [ "NY7D72-IB-320.zip",
"/redfish/v1/UpdateService/FirmwareInventory/BMC-Primary"
],
"MessageId": "Update.1.0.ApplyFailed",
"Message": "Installation of image 'NY7D72-IB-320.zip' to '/redfish/v1/UpdateService/FirmwareInventory/BMC-Primary' failed."
}
],
"Description": "This resource is used to represent a job for a Redfish implementation.",
"StartTime": "2022-03-21T07:16:58+00:00",
"Id": "JobR000001-Update",
"EndTime": "2022-03-21T07:20:00+00:00",
"@odata.context": "/redfish/v1/$metadata#Job.Job", "Steps": {
"@odata.id": "/redfish/v1/JobService/Jobs/JobR000001-Update/Steps"
},
"Name": "JobR000001-Update", "StepOrder": [
"lnvgy_fw_drives_all.samsung.pm1735.cq-cq37_anyos_comp.lvt", "lnvgy_fw_uefi_ese103a-1.00_anyos_comp.uxz", "lnvgy_fw_xcc_esx301p-0.01_anyos_comp.uxz"
],
"JobState": "Completed"

查询作业步骤时,XCC 会返回单个固件更新的附加信息:

https://10.240.218.157/redfish/v1/JobService/Jobs/JobR000001- Update/Steps/lnvgy_fw_drives_all.samsung.pm1735.cq-cq37_anyos_comp.lvt
{
"@odata.etag": "\"1647847202778\"", "PercentComplete": 1, "@odata.type": "#Job.v1_0_7.Job",
"@odata.id": "/redfish/v1/JobService/Jobs/JobR000001-Update/Steps/lnvgy_fw_drives_all.samsung.pm1735.cq- cq37_anyos_comp.lvt",
"Messages": [],
"Description": "This resource is used to represent a job for a Redfish implementation.", "StartTime": "2022-03-21T07:16:58+00:00",
"@odata.context": "/redfish/v1/$metadata#Job.Job",
"Id": "lnvgy_fw_drives_all.samsung.pm1735.cq-cq37_anyos_comp.lvt", "Name": "lnvgy_fw_drives_all.samsung.pm1735.cq-cq37_anyos_comp.lvt", "EndTime": "2022-03-21T07:20:02+00:00",

"JobState": "Completed"

从远程存储库执行下载并更新,如下所示:

system> syncrep
syncrep [options] Launch firmware sync from remote repository options:
-t protocol to connect repository. The local type will reboot host immediately. (eg: syncrep -t samba -l url -u user -p password; syncrep -t local -l /bulk/bundle.tgz;
syncrep -t http -l http://IP/bundle.tgz)
-l location of remote repository (URL format)
-u User
-p Password
-o option (extra option string for samba and nfs mounts)
-d domain (domain for samba mount)
-q query current update status
-c cancel the sync process
-r <> firmware rollback
-gl get repository list