Update From Repository
Update server firmware from a remote repository
Overview
XCC has introduced updating firmware on a server using the Update Bundles (Service Packs) package. This feature simplifies the process by using a single API or Redfish client tool to update all firmware in the system, including both OOB and IB firmware packages. The process involves identifying applicable firmware packages, downloading and extracting them from a remote HTTP/HTTPS server or uploading them to BMC internal storage via a web browser, or mounting them from a CIFS or NFS shared directory.
The metadata files need to be placed in the root directory of the network shared file system if using CIFS or NFS mount, with firmware payloads specified in the metadata. The server's microSD device can store historical repositories, allowing users to roll back firmware levels.
If the firmware packages contain any payloads that do not support out-of-band firmware update, the BMC will start the server and configure it to boot from the embedded OS image installed in BMC before performing the update.
Update Bundle and metadata
The Update Bundle (Service Packs) is a compressed file of a firmware bundle. It contains one or multiple firmware packages for the components in a system. XCC’s Update from Repository feature consumes the Update Bundle file. The unzipped bundle file contains metadata and payload binaries. JSON metadata files provide information to XCC about the kind of firmware images the bundle file contains, and payload binaries provide the firmware images.
Firmware repository inside XCC
The Update Bundle can contain multiple firmware packages, and XCC (an electronic device) reserves 2GB of space in its flash for new features. When a new bundle is received, XCC cleans up old data. Some platforms use a MicroSD card to provide additional storage, and XCC moves the last Updated Bundle to the SD card's historic repository. The firmware history repository can store up to three bundles, and users can use the Firmware Rollback feature to revert to a previous bundle.
If the Update Bundle only includes the OOB firmware package available to the system, XCC does not change the system power state. To update PCI device firmware, it requires the system to be powered on.
If the Update Bundle includes the IB firmware package available to the system, XCC stores the system power state before updating and restore the power state after the Update Bundle is updated. During the update process, XCC reboots the host into the embedded OS.
If the Update Bundle includes a prerequisite level of UEFI firmware and the current installed UEFI version does not meet or is behind that level, XCC powers off the system to perform a UEFI firmware update first.
If the Update Bundle includes a prerequisite level of XCC firmware and the current installed XCC version does not meet or is behind that level, XCC reboots first after upgrading itself.
Update with WebGUI
With Update from Repository, user can configure XCC to sync server firmware with a remote CIFS/NFS firmware repository. The firmware repository should contain packages including binary and metadata files, or Update Bundle metadata JSON and corresponding binary files. XCC parses the metadata JSON files to pick out firmware packages that support OOB update for this specific system hardware then starts a batch update.
- Green check mark : The firmware’s upgrade has finished successfully.
- Red X mark : The firmware’s upgrade has failed.
- Updating: The firmware is undergoing the process of upgrading.
- Cancel: The firmware’s upgrade is cancelled.
- Waiting: The firmware’s upgrade is waiting to be deployed.
To update from repository, complete the following steps:
- Click Connect to remote repository after entering remote repository information.
- Click Update to start the batch update.
- Click View Details to see updating status, there are 5 categories of status as mentioned above.
- Click Stop Updating will cancel the upgrades in queue after the current installation package update is completed.
- Click Disconnect to disconnect from the remote repository.
- If the update requires the XClarity Controller to be restarted in order to take effect, a warning message will be displayed. For details on how to restart the XClarity Controller, see Power actions.
Update with Redfish
The Redfish interface uses JSON format payload for easy human reading and scripting. XCC Redfish offers a standard API (SimpleUpdate) to retrieve Update Bundle file from a URI via HTTP/HTTPS/SFTP/TFTP, as well as a Multipart HTTP Push Update to push Update Bundle file UpdateService. You can use a command or a single Redfish client tool to perform firmware updates and query update status.
Sample command to push the bundle file to XCC and generate the task for file transfer and verification:
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"
}
Sample command to task API responds with Job Id for firmware update after the transfer and image validation are completed :
<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"
}
By querying the Job Id, XCC returns Job steps for all the firmware packages in the Update Bundle as shown below:
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"
When Job step is queried, XCC returns additional information to individual firmware update:
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"
Perform a downloading from remote repository and update as shown below:
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