从存储库更新
从远程存储库更新服务器固件
概述
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 标记 :固件升级失败。
- 更新中:固件正在升级过程中。
- 取消:固件升级被取消。
- 等待中:固件升级正在等待部署。
要从存储库更新,请完成以下步骤:
- 输入远程存储库信息后,单击连接以连接至远程存储库。
- 单击更新开始批量更新。
- 单击查看详情查看更新状态,如上所述,有 5 种状态。
- 单击停止更新时,将在当前安装包更新完成后,取消队列中的升级。
- 单击断开连接以断开与远程存储库的连接。
- 如果更新需要重新启动 XClarity Controller 才能生效,将会显示一条警告消息。有关如何重新启动 XClarity Controller 的详细信息,请参阅电源操作。
使用 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