What

This post illustrates listing and extracting the firmware contents within Cisco’s HUU or Host Upgrade Utility ISO, compressed with unsquashfs.

I’ve tested this on the following:

  • Cisco UCS-C Series M5 and M7.
  • Cisco HUU version huu-4.2.3 and later (essentailly any HUU compressed with SquashFS should be fine).
  • AlmaLinux 9.3.
  • UnsquashFS version 4.4-git.1 (2020/10/30).

Why

We had a problematic UCS server with a Cisco bug that reported spare disks as unhealthy and faulty. Rebooting the entire server to boot the HUU ISO wasn’t an option at the time, hence the requirement to update the CIMC firmware without rebooting the hypervisor itself.

I’m aware that Cisco did include a ZIP archive containing the firmware at some point. However, these days, Cisco has abandoned ZIP for HUU firmware and now uses SquashFS.

After some Googling, I found that most posts were quite archaic in specifying users to use getfw (which, when I checked, is no longer included for Cisco’s later UCS server HUU versions). They also specified ancient versions of CentOS and OpenSSL.

This post shows you how to use the UnsquashFS toolset with a recently released AlmaLinux version without resorting to the archaic stuff mentioned previously.

Prerequisites

Please observe the following to prevent tantrums:

  1. Have a VM with AlmaLinux 9.3 (or greater but your YMMV). I’ve used the ARM64 Architecture on VMware Fusion 13.5, but these need not matter to you.
  2. Have your HUU ISO downloaded.
  3. I used VMware Shared Folder to provide access between my Host OS and my Guest OS (you could just as well use something like SCP).

Extract with Unsquash

  1. Create a directory for mounting the ISO.

    sudo mkdir /mnt/huu
    
  2. Mount the HUU ISO to the directory.

    sudo mount -o loop /<path_of_the_huu_iso> /mnt/huu
    
  3. Verify the ISO is mounted with mount command. You should see the ISO mounted to the directory created earlier.

    mount
    
  4. CD to the mounted directory, list the contents and grep for cimc.bin.

    cd /mnt/huu
    unsquashfs -ls ucs-c240m5-huu-container-4.2.3e.squashfs | grep cimc.bin
    

    Grep returns the complete path to the CIMC binary file.

    Screenshot of using unsquashfs and grep.

    You can browse the entire filesytem or grep for other firmware such as BIOS.

  5. Extract the CIMC firmware to your home directory (I couldn’t manage to extract directly to the VM shared folder).

    sudo unsquashfs -d ~/c240m5_firmware_cimc /mnt/huu/ucs-c240m5-huu-container-4.2.3e.squashfs /firmware/cimc/
    

    You should see similar results as seen below:

    Screenshot of extract files using unsquashfs.

    Start a jig as you’ve got the firmware!

  6. Finally, let’s copy the bios.bin file to our VMware shared folder (or wherever you plan to offload the file from your guest OS).

    cp ~/c240m5_firmware_cimc/firmware/cimc/cimc.bin ~/vm-shares/Virtual\ Machines\ Shared\ Folder/
    

Upgrade CIMC Firmware

Info

While you can safely upgrade CIMC firmware without impacting your hypervisor and its workloads - as I’ve done numerous times - do use caution, raise your change, and do the upgrade OOH in case the worst happens 😉.

  1. Login to CIMC.
  2. Go to Admin > Firmware Management.
  3. Check the BMC component > click Update > Browse for the cimc.bin file extracted earlier with the unsquashfs > click Install Firmware.
  4. Give several minutes for CIMC to install.
  5. Once you’re ready to activate the newly installed firmware, select the BMC component > click Activate > choose the version you want to activate and click Activate firmware.
  6. The firmware image version you’ve selected will be made the running version. CIMC will reboot to make these necessary changes (note this does not reboot the hypervisor).
  7. Once CIMC has rebooted, you are done.
  8. Voila!

Resources

  1. My good friend Matt Thompson.
  2. Moi.