使用 DUP(USC) 更新 poweredge 的 BIOS

要更新机器的 BIOS, firmware 等有很多种方式,比较常见的可以通过 DUP(Dell Update Package) 的线上源(oneline repo)直接更新。官方建议先更新 firmware 最后是 BIOS,其具体的顺序如下:
1. device driver
2. device firmware
3. ESM firmware
4. BIOS

在正式操作之前,先要同步官方的源。接下来是安装 dell_ft_install:
# yum install dell_ft_install

下载最新的更新的更新程序:
# yum install $(bootstrap_firmware)

列出目前系统中的固件版本:
# inventory_firmware
System inventory:
  Integrated Dell Remote Access Controller = 1.23.23
  OS Drivers Pack, 7.1.1.3, A00 = 7.1.1.3
  Enterprise UEFI Diagnostics, 4223A3, 4223.6 = 4223a3
  12G SEP Firmware  = 1.00
  Power Supply.Slot.2 = 69.45.99
  BIOS = 1.3.6
  WD6001BKHG Firmware = d1s4
  WD6001BKHG Firmware = d1s4
  Lifecycle Controller 2, 1.0.8.42, A00 = 1.0.8.42
  PERC H710 Adapter Controller 0 Firmware = 21.1.0-0007

对比目前系统已有的跟将要更新的文件:
# update_firmware
Running system inventory…

Searching storage directory for available BIOS updates…
Checking Integrated Dell Remote Access Controller – 1.23.23
  Did not find a newer package to install that meets all installation checks.
Checking OS Drivers Pack, 7.1.1.3, A00 – 7.1.1.3
  Did not find a newer package to install that meets all installation checks.
Checking Enterprise UEFI Diagnostics, 4223A3, 4223.6 – 4223a3
  Did not find a newer package to install that meets all installation checks.
Checking 12G SEP Firmware  – 1.00
  Did not find a newer package to install that meets all installation checks.
Checking Power Supply.Slot.2 – 69.45.99
  Did not find a newer package to install that meets all installation checks.
Checking BIOS – 1.3.6
  Did not find a newer package to install that meets all installation checks.
Checking WD6001BKHG Firmware – d1s4
  Did not find a newer package to install that meets all installation checks.
Checking Lifecycle Controller 2, 1.0.8.42, A00 – 1.0.8.42
  Did not find a newer package to install that meets all installation checks.
Checking PERC H710 Adapter Controller 0 Firmware – 21.1.0-0007
  Did not find a newer package to install that meets all installation checks.
Checking System BIOS for PowerEdge R620 – 1.3.6
  Did not find a newer package to install that meets all installation checks.

This system does not appear to have any updates available.
No action necessary.

确认更新:
# update_firmware –yes

要更新的一些文件都在源的 payloads/ 目录下。上面这个是比较简单省事粗犷的方式,如果仅仅需要更新某几个,可以先将需要的 DUP 下载下来,然后再 update_firmware,或者像下面这样安装:
# ./packagename.bin -q -f

上面这个会涉及到一些参数,主要的包括如下的一些:
-h: help
-c: check,检查跟系统是否兼容
-f: force,在降级的时候比较有用,这个要和 -q 一起使用
–list: 显示包里面的文件
-q: 非交互式的执行
-r: reboot,如果该升级程序需要,会重启,这个要和 -q 一起用
–rebuild: 重建,主要是针对一些非官方支持的版本

下面谈谈 –rebuild 这个参数,他主要是针对 dell 官方不支持的发型版本(redhat, suse) 以及 kernel。可以参见下面这张图了解这其中的关系。


官方建议在制作 custom 的时候先在测试机上测试,成功之后再移植到生产机器上。使用 –rebuild 重新制作 firmware 时,必须遵循以下的原则:
1. 测试机器跟生产机器的 kernel 必须完全匹配
2. 二者的 gcc 最好匹配相同
3. 在测试机器上安装有 kernel source 以及 binutils,这二者在生产机器上不需要
4. Dell OpenManage Server Administorator 以及其 device drivers(dcdbas, dell_rbu) 不能在测试机上安装,生产机器可有可无,可以通过如下的方式确认有没有安装: 确认 /sys/devices/platform/ 目录下没有 dcdbas 以及 dell_rbu 目录,或者通过 lsmod | egrep "dcdbas|dell_rbu" 确认模块没有被加载。

我在某台机器上测试发现,即使卸载了上面两个模块,依然没法制作:
# ./Power_Firmware_DTCN4_LN_07.09.41_A01.BIN  –rebuild
In no event shall Dell Inc. be held liable for any direct, indirect, incidental, special, or consequential damages suffered during or after package customization
and execution.

Rebuilding package Power_Firmware_DTCN4_LN_07.09.41_A01.BIN to support kernel version 3.2.0-29-generic
This process may take several minutes to complete…
disneyinstall.sh: fork: Cannot allocate memory
Power_Firmware_DTCN4_LN_07.09.41_A01.BIN Error: Rebuilding Package Failed – Server Administrator device driver (HAPI) is already installed on the system. Package can
be rebuilt only on a system that does not have Server Administrator device driver (HAPI) installed.

所以在制作心的固件的时候必须要遵循上面的几条原则。整个执行过程的 log 可以在 /var/log/dell{dup,updatepackage} 找到。
另外,如果是 ubuntu 的机器,在执行上面的命令的时候,会因为找不到 sh 而出现如下的问题:

./Power_Firmware_DTCN4_LN_07.09.41_A01.BIN: 52: typeset: not found
./Power_Firmware_DTCN4_LN_07.09.41_A01.BIN: 53: typeset: not found
./Power_Firmware_DTCN4_LN_07.09.41_A01.BIN: 56: typeset: not found

可以按照下面的方式做下处理:
# cd /bin
# rm sh && ln -s bash sh

除了上面的两种方式之外,还可以使用 tftp 的方式安装更新,这个之前的一篇博客有涉及。另外,USC LCE(Unitied Server Configurator – Lifecycle Controller Enabled) 看上去更是无所不能,从 BIOS 到 NIC,RAID,iDRAC 以及系统的诊断、回滚等等都可以实现。这个在系统启动的时候,按下 F10 就可以进入,不过由于是 GUI 的,并且耗时太长没效率,就不在这里说了,可以看这个文档。