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
#!/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
Post a Comment