Skip to main content

Script to update Dell Firmware

There are a few other scripts/tools out there to do this.. but they all seem to have some stupid dependencies (this one is no exception).

#!/bin/bash

# $Id: update_firmware.sh,v 1.9 2014/04/25 18:42:55 root Exp root $

# Author: James.Radtke@company.com
# Purpose:  Script to download and apply firmware updates
# Status:   Stable, but likely needs some work

# TODO:     I would like to require a flag to run the REBOOT REQUIRED updates
# Maintained at:   rhnsat01:/root/bin/update_firmware.sh
#        

#
#  VARIABLES
#
FIRMWARE_LOG=/var/log/dell_firmware.log

PRETTYDATE=`date +%Y%m%d-%H%M`
REBOOT_RECD=0

# PLEASE NOTE: EACH OF THE PACKAGES LISTED IN THE PKGS VARIABLES ARE THE
#   LEAST-COMMON-DENOMINATOR FOR EACH PACKAGE. (i.e. they only differ by version number).
NON_REBOOT_PKGS="ESM Lifecycle-Controller Power_Firmware"
REBOOT_PKGS="R[1-9][12]0_BIOS BIOS Network_Firmware SAS-RAID_Firmware Fibre-Channel_Firmware"
#
MYPWD=`pwd`

# #######################################################
# BEGIN
# #######################################################

# FIRST THINGS.. FIRST
if [ "`dmidecode -s system-manufacturer`" != 'Dell Inc.' ]
then 
  echo "Dude, This is not a Dell"
  exit 9
fi

echo "NOTE: You may find the output of this script in:"
echo "      cat /var/log/dell_firmware.log"
echo "      Updates log to /var/log/dell/updatepackage/log/support"

if [ ! -d /var/log/dell/updatepackage/log/support ]
then
  mkdir -p /var/log/dell/updatepackage/log/support
fi

echo "[`date +%Y%m%d-%H%M`] START"
echo "[`date +%Y%m%d-%H%M`] START" >> $FIRMWARE_LOG
/opt/dell/srvadmin/bin/omreport system version  >> /var/log/dell/updatepackage/log/support/omreport-`date +%Y%m%d-%H%M`.out

rm -f /var/tmp/Dell/`dmidecode -s system-product-name`/*
cd /var/tmp
wget -r -nH --cut-dirs=2 --no-parent --reject "index.html*" "http://rhnsat01.company.com/pub/sfw/Dell/`dmidecode -s system-product-name`/" > /dev/null 2>&1

cd "/var/tmp/Dell/`dmidecode -s system-product-name`/"
chmod 755 *

# IN CASE IT'S NOT OBVIOUS - THIS STANZA TRAVERSES THE NON_REBOOT UPDATES
for PKG in $NON_REBOOT_PKGS
do
  MYFW=`ls | grep ^${PKG} | sort | tail -1`
  if [ ! -z $MYFW ]
  then
    echo "[`date +%Y%m%d-%H%M`] Analysing ${PKG}"
    echo "[`date +%Y%m%d-%H%M`] Analysing ${PKG}" >> $FIRMWARE_LOG
    # CHECK IF UPDATE IS APPLICABLE
    sh ./${MYFW} -c -n -q
    if [ $? == 0 ]
    then
      echo "[`date +%Y%m%d-%H%M`] Updating ${PKG} with $MYFW"
      echo "[`date +%Y%m%d-%H%M`] Updating ${PKG} with $MYFW" >> $FIRMWARE_LOG
      sh ./${MYFW} -n -q
    else
      echo "[`date +%Y%m%d-%H%M`] Up-to-date $MYFW"
      echo "[`date +%Y%m%d-%H%M`] Up-to-date $MYFW" >> $FIRMWARE_LOG
    fi
  fi
done
# IN CASE IT'S NOT OBVIOUS - THIS STANZA TRAVERSES THE REBOOT UPDATES
for PKG in $REBOOT_PKGS
do
  MYFW=`ls | grep ^${PKG} | sort | tail -1`
  if [ ! -z $MYFW ]
  then
    echo "[`date +%Y%m%d-%H%M`] Analysing ${PKG}"
    echo "[`date +%Y%m%d-%H%M`] Analysing ${PKG}" >> $FIRMWARE_LOG
    # CHECK IF UPDATE IS APPLICABLE
    sh ./${MYFW} -c -n -q
    if [ $? == 0 ]
    then
      echo "[`date +%Y%m%d-%H%M`] Updating ${PKG} with $MYFW"
      echo "[`date +%Y%m%d-%H%M`] Updating ${PKG} with $MYFW" >> $FIRMWARE_LOG
      sh ./${MYFW} -n -q
    else
      echo "[`date +%Y%m%d-%H%M`] Up-to-date $MYFW"
      echo "[`date +%Y%m%d-%H%M`] Up-to-date $MYFW" >> $FIRMWARE_LOG
    fi
  fi
done

if [ ${REBOOT_RECD} != 0 ]
then
  echo "NOTE: Important - a reboot is required to complete updates"
  echo "      Since Dell produces low-quality patches, this process will"
  echo "      likely need to be repeated"
  echo " run the following after the reboot to view versions:"
  echo " # omreport system version"
fi

echo "[`date +%Y%m%d-%H%M`] END "
echo "[`date +%Y%m%d-%H%M`] END " >> $FIRMWARE_LOG
cd "$MYPWD"

exit 0

Comments

Popular posts from this blog

P2V using dd for KVM-QEMU guest

Preface: I have certainly not exhaustively tested this process.  I had a specific need and found a specific solution that worked. Situation:  I was issued a shiny new laptop running Red Hat Enterprise Linux 7 (with Corp VPN, certs, Authentication configuration, etc...)  The image was great, but I needed more flexibility on my bare metal.  So, my goal was to P2V the corporate image so I could just run it as a VM. * Remove corporate drive and install new SSD * install corp drive in external USB-3 case * Install RHEL 7 on new SSD * dd old drive to a disk-image file in a temp location which will be an image which is the same size as your actual drive (unless you have enough space in your destination to contain a temp and converted image) * convert the raw disk-image to a qcow file while pushing it to the final location - this step should reduce the disk size - however, I believe it will only reduce/collapse zero-byte blocks (not just free space - i.e. if you de...

Sun USS 7100 foo

TIP: put ALL of your LUNs into a designated TARGET and INITIATOR group when you create them.  If you leave them in the "default" group, then everything that does an discovery against the array will find them :-( I'm struggling to recognize a reason that a default should even be present on the array. Also - who, exactly, is Sun trying to kid.  The USS is simply a box.. running Solaris .. with IPMP and ZFS.  Great.  If you have ever attempted to "break-in" or "p0wn" your IBM HMC, you know that there are people out there that can harden a box - then.. there's Sun.  After a recent meltdown at the office I had to get quite intimate with my USS 7110 and learned quite a bit.  Namely: there's a shell ;-) My current irritation is how they attempt to "warn you" away from using the shell (my coverage expired a long time ago to worry about that) and then how they try to hide things, poorly. I was curious as to what version of SunOS it ...

"Error getting authority: Error initializing authority: Could not connect: No such file or directory (g-io-error-quark, 1)"

"Error getting authority: Error initializing authority: Could not connect: No such file or directory (g-io-error-quark, 1)" One issue that may cause this to arise is if you managed to break your /etc/fstab We had an engineer add a line with the intended options of "nfsvers=3" but instead added "-onfsvers=3" and it broke the system fairly catastrophically.