平台无关的固件更新#
注意
已弃用功能:从 nvfwupd
2.0.5 版本开始,不再支持使用包含多个目标的 JSON 文件为多个系统更新指定 targets
子选项。
nvfwupd
2.0.0 及更高版本支持通过 YAML 配置文件进行输入和平台无关的固件更新。您可以自定义更新方法和用于更新的 Redfish URI。
配置参数#
该工具支持各种配置参数,其中 BMC_IP
、RF_USERNAME
和 RF_PASSWORD
始终是必需的。以下 YAML 文件示例解释了每个参数
# Define target platform as one of HGX / DGX / GH / NVOS / GH200
TargetPlatform: 'GH'
# Disable Sanitize Log, disabling Sanitize Log leads to print system IP and user credential to the logs and screen
SANITIZE_LOG: False
# Provide full path of firmware file(s) to be used for firmware update. Value is a list
FWUpdateFilePath:
- "../packages/ nvfw_Grace-CPU-P5041_0003_240124.1.0_prod-signed.fwpkg"
# Define URI for MultipartHttpPushUri (Optional override).
# Default value is taken from UpdateService
MultipartHttpPushUri: '/redfish/v1/UpdateService/update-multipart'
# HttpPushUri for PLDM Firmware Update (Optional override).
# Default value "/redfish/v1/UpdateService"
HttpPushUri: '/redfish/v1/UpdateService'
# Change if TaskServiceUri is different from default value below
# Task id will always be taken from update response in update_fw or
# from –i input in show_update_progress
TaskServiceUri: '/redfish/v1/TaskService/Tasks/'
# Define differnt update methods.
# Valid values {'MultipartHttpPushUri', 'HttpPushUri', 'NVOSRest'}
FwUpdateMethod: "MultipartHttpPushUri"
# Optional Parameter used with MultipartHttpPushUri update method
# used to define dict of parameters for multipart FW update
MultipartOptions:
- ForceUpdate: True
# Target IP address. BMC IP/NVOS Rest service IP/localhost for port forwarding
BMC_IP: "1.1.1.1"
RF_USERNAME: "user"
RF_PASSWORD: "password"
# Target port config if port forwarding is used.
TUNNEL_TCP_PORT: "14443"
# List of update targets. replaces -s/--special option input file. Value is list of target URIs
# Use UpdateParametersTargets: {} for DGX empty JSON value used for full DGX update
# Use UpdateParametersTargets: [] for Oberon empty list used for BMC update
# Remove this parameter for GH full update
UpdateParametersTargets:
- "/redfish/v1/UpdateService/FirmwareInventory/CPLDMB_0"
# Config for reset BMC parameters. Value is a dict.
# Use ResetType: 'ResetAll' for DGX
# Use ResetToDefaultsType: 'ResetAll' for MGX or HGX
BMCResetParameters:
ResetType: 'ResetAll'
# Multi target input. Value is list of dicts.
Targets:
- BMC_IP: "1.1.1.1"
RF_USERNAME: "user"
RF_PASSWORD: "password"
TUNNEL_TCP_PORT: "14443"
- BMC_IP: "2.2.2.2"
RF_USERNAME: "user"
RF_PASSWORD: "password"
TUNNEL_TCP_PORT: "14444"
使用配置文件运行 nvfwupd#
要使用该工具并更新支持 MultipartHttpPushUri 或 HttpPushUri 的平台,但该平台未被工具自动识别,或者提供的平台是不受支持的错误,可以使用配置文件来提供输入并自定义行为。
请记住以下几点
在未知平台上对
show_version
的支持是有限的。如果配置文件中没有
TargetPlatform
参数,show_version
将不会将固件清单与 PLDM 软件包内容进行匹配。软件包版本和最新列将分别显示N/A
和否
。不支持
make_upd_targets
命令,因为生成的 JSON 文件不能与配置文件一起使用。配置文件将更新目标作为配置参数,并且由于该工具应该与工具未知的平台一起使用,因此您必须在提供目标列表作为输入之前识别和验证目标列表。
示例
$ cat config.yaml
TargetPlatform: 'GH'
FWUpdateFilePath:
- "../../packages/nvfw_P4764_0000_240103.1.2_dbg-signed.fwpkg"
MultipartHttpPushUri: '/redfish/v1/UpdateService/update-multipart'
FwUpdateMethod: "MultipartHttpPushUri"
BMC_IP: "1.1.1.1"
RF_USERNAME: "****"
RF_PASSWORD: "******"
UpdateParametersTargets:
- "/redfish/v1/Chassis/5B247A_Baseboard_0"
BMCResetParameters:
ResetToDefaultsType: 'ResetAll'
$ nvfwupd -c config.yaml update_fw
Updating ip address: ip=1.1.1.1
FW package: ['../../packages/nvfw_P4764_0000_240103.1.2_dbg-signed.fwpkg']
Ok to proceed with firmware update? <Y/N>
y
{
"@odata.id": "/redfish/v1/TaskService/Tasks/5B247A_5",
"@odata.type": "#Task.v1_4_3.Task",
"Id": "5B247A_5",
"TaskState": "Running",
"TaskStatus": "OK"
}
FW update started, Task Id: 5B247A_5
Wait for Firmware Update to Start...
TaskState: Running
PercentComplete: 20
TaskStatus: OK
TaskState: Running
PercentComplete: 40
TaskStatus: OK
TaskState: Completed
PercentComplete: 100
TaskStatus: OK
Firmware update successful!
Overall Time Taken: 0:08:15
Update successful. Perform activation steps for new firmware to take effect.
---------------------------------------------------------------------------------------
Error Code: 0
$ nvfwupd -c oberon_config.yaml perform_factory_reset
BMC IP: ip=1.1.1.1
Factory Reset request successful
Task State:
{
"@Message.ExtendedInfo": [
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The request completed successfully.",
"MessageArgs": [],
"MessageId": "Base.1.15.0.Success",
"MessageSeverity": "OK",
"Resolution": "None"
}
]
}
---------------------------------------------------------------------------------------
$ nvfwupd -c config.yaml show_update_progress -i 0
Task Info for Id: 0
StartTime: 2024-01-20T02:46:15+00:00
TaskState: Completed
PercentComplete: 100
TaskStatus: OK
EndTime: 2024-01-20T02:46:17+00:00
Overall Time Taken: 0:00:02
Overall Task Status: {
"@odata.id": "/redfish/v1/TaskService/Tasks/0",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2024-01-20T02:46:17+00:00",
"Id": "0",
"Messages": [
{
"@odata.type": "#Message.v1_0_0.Message",
"Message": "The task with id 0 has started.",
"MessageArgs": [
"0"
],
"MessageId": "TaskEvent.1.0.1.TaskStarted",
"Resolution": "None.",
"Severity": "OK"
},
{
"@odata.type": "#Message.v1_0_0.Message",
"Message": "The task with id 0 has changed to progress 100 percent complete.",
"MessageArgs": [
"0",
"100"
],
"MessageId": "TaskEvent.1.0.1.TaskProgressChanged",
"Resolution": "None.",
"Severity": "OK"
},
{
"@odata.type": "#Message.v1_0_0.Message",
"Message": "The task with id 0 has Completed.",
"MessageArgs": [
"0"
],
"MessageId": "TaskEvent.1.0.1.TaskCompletedOK",
"Resolution": "None.",
"Severity": "OK"
}
],
"Name": "Task 0",
"Payload": {
"HttpHeaders": [
"Host: 1.1.1.1",
"User-Agent: python-requests/2.28.2",
"Accept-Encoding: gzip, deflate",
"Accept: */*",
"Connection: keep-alive",
"Content-Length: 109023143"
],
"HttpOperation": "POST",
"JsonBody": "null",
"TargetUri": "/redfish/v1/UpdateService/update-multipart"
},
"PercentComplete": 100,
"StartTime": "2024-01-20T02:46:15+00:00",
"TaskMonitor": "/redfish/v1/TaskService/Tasks/0/Monitor",
"TaskState": "Completed",
"TaskStatus": "OK"
}
Update is successful.
---------------------------------------------------------------------------------------