Updating Dell PowerEdge firmware from Linux is quite easy, but it isn’t documented very well. I ended up with a set of PowerEdge R710’s at work for a lab environment and the BIOS versions were different on each server.

Downloading the latest firmware

Start by heading over to Dell’s support site and enter your system’s service tag. You can use lshw to find your service tag:

# lshw | head lab05 description: Rack Mount Chassis product: PowerEdge R710 () vendor: Dell Inc. serial: [service tag should be here] width: 64 bits capabilities: smbios-2.6 dmi-2.6 vsyscall32 configuration: boot=normal chassis=rackmount uuid=44454C4C-3700-104A-8052-B2C04F564831 *-core description: Motherboard

After entering the service tag, follow these steps:

Click Drivers & downloads on the left

on the left Click Change OS at the top right and choose Red Hat Enterprise Linux 7

at the top right and choose Click the BIOS dropdown in the list

dropdown in the list Click Other file formats available

Look for the file ending in BIN and click Download file underneath it

Copy that file to your server that needs a BIOS update.

Start by getting the right packages installed. I’ll cover the CentOS/RHEL and Ubuntu methods here. At the moment, Fedora doesn’t build kernels with the dell_rbu module enabled, but there’s a discussion about getting that fixed.

For CentOS, you’ll need to get the Dell Linux repository configured first:

wget http://linux.dell.com/repo/hardware/latest/bootstrap.cgi sh bootstrap.cgi yum -y install firmware-addon-dell

For Ubuntu, the package is in the upstream repositories already:

apt-get -y install firmware-addon-dell

Extract and flash the BIOS header

Dell packages up a BIOS header (the actual firmware blob that needs to be flashed) within the BIN file you downloaded earlier. The latest version of the BIOS for my R710 is 6.4.0, so my file is called R710_BIOS_4HKX2_LN_6.4.0.BIN . Let’s start by extracting the header file:

bash R710_BIOS_4HKX2_LN_6.4.0.BIN --extract bios

You should now have a directory in your current directory called bios . The header file is within bios/payload/ and you’ll use that to flash the BIOS:

# modprobe dell_rbu # dellBiosUpdate-compat --hdr bios/payload/R710-060400.hdr --update Supported RBU type for this system: (MONOLITHIC, PACKET) Using RBU v2 driver. Initializing Driver. Setting RBU type in v2 driver to: PACKET writing (4096) to file: /sys/devices/platform/dell_rbu/packet_size Writing RBU data (4096bytes/dot): ........................... Done writing packet data. Activate CMOS bit to notify BIOS that update is ready on next boot. Update staged sucessfully. BIOS update will occur on next reboot.

It’s now time to reboot! If you watch the console via iDRAC, you’ll see a 3-4 minute delay on the next reboot while the staged BIOS image is flashed. When the server boots, use lshw to verify that the BIOS version has been updated.

Photo Credit: vaxomatic via Compfight cc