I have a Dell PowerEdge SC440 that serves as a light-weight server for my home lab. I wanted to update the BIOS from 1.2.0 to 1.5.0. I expected this to be a trivial update, but discovered that the update script used to unpack and execute the flash program had some issues with my environment.
On Ubuntu Server 10.04 LTS 64-bit, the wrapper script uses tail(1) and gzip to unpack the flash executable.
# chmod u+x SC440-010500.BIN # ./SC440-010500.BIN Dell BIOS Update Installer 1.1 Copyright 2006 Dell Inc. All Rights Reserved. tail: cannot open `+78' for reading: No such file or directory gzip: stdin: not in gzip format
The script uses an old syntax for tail that is being progressively obsoleted in their GNU forms. This can be fixed by either modifying the update script (change “+N” to “–lines=+N”) or set the environment variable _POSIX2_VERSION to “199209” to make tail use the old syntax.
The other issue is with gzip. The updater is 32-bit, but the SC440 is 64-bit native and, in this case, running a 64-bit OS. This problem can be solved by installing a 32-bit zlib library. I found some
My final process looks like this:
# Verify MD5 checksum is correct md5sum SC440-010500.BIN # Install 32-bit libs (for Ubuntu or Debian) # (Fedora: yum install glibc.1686 zlib.i386) # (SUSE: zypper install glibc-32bi zlib-32bit) sudo apt-get install ia32-libs libc6-1386 # Switch to run-level 1 sudo init 1 # On Ubuntu, select 'root Drop to root shell prompt' # Make the script executable chmod u+x SC440-010500.BIN # Let tail(1) know it should use the obsolete syntax export _POSIX2_VERSION=199209 # Verify the package will extract ./SC440-010500.BIN --version # If all was OK, run it for effect ./SC440-010500.BIN # Follow the on-screen prompts to finish the install
If you struggled to follow along, then I would recommend taking more time to understand all the details before you risk turning your system into a brick by botching something while flashing the new BIOS.