patrick_fisc...@dell.com wrote, On 02/26/2010 03:28 AM: > We provide 2 Tools. ... > Old: IT Assistant (requires a Windows 32 Bit OS) > New: DMC (requires a w23 Host or VM) > > Both tools are able to compare server revisions with the actual Updates. > So you can run the comparison report to see which machines need to be > updated. A snmp configuration on each machine is a must have. ... > Maybe some of the Linux guys are able to run such reports with Nagios or > anything else, maybe with reading out the FW and driver strings > (omreport) and compare it with the latest versions from the Update DVD > dell provide ca. 1 time per quarter.
I manage 100s of Debian, RHEL, and SLES boxes here. I enclose a script that's hit/miss to do *some* inventory. Here's sample output: [r...@server1 MegaRAID]# /opt/sbin/ral-superinv Hostname: [server1] Manufacturer: [Dell Inc.] Model: [PowerEdge 2950] Serial Number: [XXXXXXX] BIOS Version: [2.4.3] *(!=2.6.1) BMC Version: [2.28] *(!=2.37) PERC5i Version: [1.03, 1.03] PERC5E Version: [1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03] SASBP Version: [1.05] MD1000 Version: [A.04, A.04, A.04, A.04, A.04] It's seriously flawed, predominantly because it requires constant manual updating to report out-of-rev BIOS, etc. Why do i do this and not run OMSA? Because OMSA doesn't run on Debian, grrr. It might provide you with some strategies to do inventory gathering on your own. Now, please note at the bottom of the script, there's a URL at Dell that's titled "Enterprise BIOS and Firmware Matrix". Wow, that's awesome, something that would really help endusers, EXCEPT, it hasn't been updated in years!! (more grrr). So, it would be super-mega-awesome if Dell provided said Matrix in a queryable format. I.e. i'd like to be able to probe, say: http://awesome.dell.com/pe2950/bios?fmt=csv&info=history to get a history listing of all pe2950 BIOS updates including their criticality status. yeah, i'll keep dreaming... But even a static (but maintained) table like the one proposed at the "Enterprise BIOS and Firmware Matrix" page would be really awesome (if i could easily programmatically parse it and rely on its data being accurate and timely) So, it looks like DMC might do this, but again, it locks me into a *Windows* solution. sigh. SUU uses Java to do the Catalog processing/inventory, why can't we have a platform-agnostic tool that'll manage this (at least the inventory part). Now, as far as updates go... I've had limited success on Debian doing updates with various DUP components. BIOS: I've posted a thread in the past here on using libsmbios on payloads extracted from DUP kits, and the '-writehdrfile' option for Windows-only BIOS payloads (mostly for laptops, and desktops not supported via DUP updates) with the dell_rbu (Remote BIOS Update) kernel module & libsmbios. That's all pretty solid. BMC: can't do that in Debian. there's a "bmcflash" kit on the linux.dell.com site, but it doesn't seem to work, and is unmaintained. Also the old list threads seem to discuss a history of "bricking" servers and i think the connection with that project getting scrapped. SASDUPIE: This kit can update SAS disks on Debian, but it has a bug. I wanted to dump all the payload images into the payload directory, and running it in DEBUG mode shows it doing "addfile" on each payload image, but when it comes to flashing the disks, it ONLY attempts the first payload image in the list. So, with this version of 'sadupie', i'd have to modify the caller script to scan "N" payload subdirectories, or build my own catalog and specify the payload directory for the disk image after doing all my own up-front processing. (note that LD_LIBRARY_PATH has to be setup to point to all the required "Lib" bits that are provided with the DUP kits) The SUU doesn't even always work right. And the diagnostics are very poor. Yes, i've learned: iconv -f utf16 -t ascii /var/log/dell/suu/invcolError.log less /var/log/dell/suu/{update,support}.log* and having to 'FOO.BIN --extract' to find the PIEConfig inventory execution bits and run them with '-debug' to hopefully figure out what's going wrong. AND having to always do: rpm -e $(rpm -qa | egrep '(srvadmin|instsvc)') || rpm -e --noscripts $(rpm -qa | egrep '(srvadmin|instsvc)') because leaving old instsvc or srvadmin kits on the system often silently breaks suu. Even to the point of it saying "Update Successful" anyway, and me scratching my head why the BIOS is still out of date on a server when i thought i'd updated it. (this is on RHEL, since SUU doesn't support Debian) So, my first desire is to get a SIMPLE maintained, supported interface that is platform agnostic for VALIDATING my server's status. That one seems like it should be pretty simple. (the current SUU is not that answer. It is monolithic (huge) and not incrementally-updatable My second is for an maintenance update system that is platform agnostic. Perhaps these things exist, but it's also difficult trying to figure out which system is the one to use (note the ITA vs DMC, SBUU vs SUU vs ..) Even things like the Dell Capacity Planner/Calculator hav gone from a Windows only executable to a Java app to a flash app to ??? and often the new servers aren't included. And, STILL: www.dell.com/calc points to "ESSA" for the Blades, and you click that link and get "can't find the server at solutions.dell.com." (it's been that way for MONTHS) Thanks, --stephen "Cranky Old Man Ramblin'" dowdy
#!/bin/sh # Title: ral-superinv # Purpose: obtain System Inventory info (firmware, etc) # Author: Stephen Dowdy (sdo...@ucar.edu) # RCS: $Header$ # Note: See RCS/CVS Log info at End of File # Requirements: dmidecode, ipmitool, ddcprobe, xresprobe # Caveats: # Todo: # # Copyright UCAR (c) 2006-2009. # University Corporation for Atmospheric Research (UCAR), # National Center for Atmospheric Research (NCAR), # Research Applications Laboratory (RAL), # P.O. Box 3000, Boulder, Colorado, 80307-3000, USA. is_debug() { [ ${DEBUG:-0} -ge 1 ] ;} debug() { is_debug && echo "DEBUG: " "$@" 1>&2 ;} preload() { if [ -f /etc/debian_version ]; then #if ! type dmidecode >& /dev/null; then echo "Missing dmidecode"; exit 1; fi if ! dpkg-query -W --showformat='${Status}\n' dmidecode | grep -q '^install'; then echo "Installing 'dmidecode'..." apt-get install dmidecode >& /dev/null fi #if ! type ddcprobe >& /dev/null; then echo "Missing ddcprobe"; exit 1; fi if ! dpkg-query -W --showformat='${Status}\n' xresprobe | grep -q '^install'; then echo "Installing 'xresprobe'..." apt-get install xresprobe >& /dev/null fi fi # lame attempt to get IPMI functional if type -p ipmitool >& /dev/null; then if [ $(lsmod | grep ipmi | wc -l) != 3 ]; then modprobe ipmi_si modprobe ipmi_devintf modprobe ipmi_msghandler fi fi } inv_sys_hostname="$(hostname -s)" # The dmidecode statements here are from earlier dmidecode releases # that didn't support such niceties as "dmidecode -t bios" get_sys_manufacturer() { dmidecode | egrep -A8 '^Handle (0x0100|0x0001|0x0005)' | grep 'Manufacturer:' \ | sed -e 's/^[^:]*:[[:space:]]*\(.*[^ ]\)\([[:space:]]*$\)/\1/' } get_sys_model() { dmidecode | egrep -A8 '^Handle (0x0100|0x0001|0x0005)' | grep 'Product Name:' \ | sed -e 's/^[^:]*:[[:space:]]*\(.*[^ ]\)\([[:space:]]*$\)/\1/' } get_sys_serialnumber() { dmidecode | egrep -A8 '^Handle (0x0100|0x0001|0x0005)' \ | sed -ne '/Serial Number:/s/^[^:]*:[[:space:]]*\(.*[^ ]\)\([[:space:]]*$\)/\1/p' } get_sys_bios() { dmidecode | egrep -A8 '^Handle (0x0000)' | grep 'Version:' \ | sed -e 's/^[^:]*:[[:space:]]*\(.*[^ ]\)\([[:space:]]*$\)/\1/' } get_sys_bmc() { if type -p ipmitool >/dev/null 2>&1; then tmp="$(ipmitool mc info 2>/dev/null | grep 'Firmware Revision' \ | sed -e 's/^[^:]*:[[:space:]]*\(.*[^ ]\)\([[:space:]]*$\)/\1/')" # echo "${tmp:-N/A}" echo "${tmp}" else # echo "N/A" echo "" fi } # XXX this doesn't work reliably much, but Xorg.0.log # XXX often has the monitor model correctly probed? # XXX - nvidia proprietary drivers tend to disable this capability :-( get_monitor_model() { tmp="$(ddcprobe | grep monitorname: | cut -d: -f2 \ | sed -e 's/^[[:space:]]*\(.*[^ ]\)\([[:space:]]*$\)/\1/')" debug "monitor_model tmp=[${tmp}]" #echo "${tmp:-UNKNOWN}" echo "${tmp}" } get_monitor_serialnumber() { tmp="$(ddcprobe | grep monitorserial: \ | sed -e 's/^[^:]*:[[:space:]]*\(.*[^ ]\)\([[:space:]]*$\)/\1/')" debug "monitor_serialnumber tmp=[${tmp}]" #echo "${tmp:-UNKNOWN}" echo "${tmp}" } # XXX - We don't rely on external LSI tools at this point # XXX - we're trying to be lean, rely on well-established utilities get_perc4() { ## Host: scsi0 Channel: 01 Id: 00 Lun: 00 ## Vendor: MegaRAID Model: LD 0 RAID1 69G Rev: 522D ## Type: Direct-Access ANSI SCSI revision: 02 awk -F: ' $1 ~ /Vendor/ && $2 ~ /MegaRAID/ && $3 ~ /LD [0-9] RAID/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' | fmt -128 | sed -e 's/ /, /g' } get_perc5i() { ## Host: scsi0 Channel: 02 Id: 00 Lun: 00 ## Vendor: DELL Model: PERC 5/i Rev: 1.03 ## Type: Direct-Access ANSI SCSI revision: 05 awk -F: ' $1 ~ /Vendor/ && $2 ~ /DELL/ && $3 ~ /PERC 5\/i/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' | fmt -128 | sed -e 's/ /, /g' } get_perc5E() { ## Host: scsi2 Channel: 02 Id: 00 Lun: 00 ## Vendor: DELL Model: PERC 5/E Adapter Rev: 1.03 ## Type: Direct-Access ANSI SCSI revision: 05 awk -F: ' $1 ~ /Vendor/ && $2 ~ /DELL/ && $3 ~ /PERC 5\/E/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' | fmt -128 | sed -e 's/ /, /g' } get_perc6i() { ## Host: scsi0 Channel: 02 Id: 00 Lun: 00 ## Vendor: DELL Model: PERC 6/i Rev: 1.11 ## Type: Direct-Access ANSI SCSI revision: 05 awk -F: ' $1 ~ /Vendor/ && $2 ~ /DELL/ && $3 ~ /PERC 6\/i/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' | fmt -128 | sed -e 's/ /, /g' } get_perc6E() { ## Host: scsi0 Channel: 02 Id: 00 Lun: 00 ## Vendor: DELL Model: PERC 6/i Rev: 1.11 ## Type: Direct-Access ANSI SCSI revision: 05 awk -F: ' $1 ~ /Vendor/ && $2 ~ /DELL/ && $3 ~ /PERC 6\/E/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' | fmt -128 | sed -e 's/ /, /g' } get_sasbp() { ## *** SAS Backplane example ## Host: scsi0 Channel: 00 Id: 32 Lun: 00 ## Vendor: DP Model: BACKPLANE Rev: 1.05 ## Type: Enclosure ANSI SCSI revision: 05 awk -F: ' $1 ~ /Vendor/ && $2 ~ /DP/ && $3 ~ /BACKPLANE/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' } get_scabp() { ## *** SCSI/SCA Backplane example ## Host: scsi0 Channel: 00 Id: 06 Lun: 00 ## Vendor: PE/PV Model: 1x2 SCSI BP Rev: 1.0 ## Type: Processor ANSI SCSI revision: 02 awk -F: ' $1 ~ /Vendor/ && $2 ~ /PE\/PV/ && $3 ~ /SCSI BP/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' } get_md1000() { ## Host: scsi2 Channel: 00 Id: 18 Lun: 00 ## Vendor: DELL Model: MD1000 Rev: A.04 ## Type: Enclosure ANSI SCSI revision: 05 awk -F: ' $1 ~ /Vendor/ && $2 ~ /DELL/ && $3 ~ /MD1000/ {print $4; } ' /proc/scsi/scsi | tr -d ' ' | fmt -128 | sed -e 's/ /, /g' } # XXX use sg3utils as documented in END_NOTES to obtain Serial Number get_pv220() { : } # XXX use sg3utils as documented in END_NOTES to obtain Serial Number check_bios_bmc_bp() { model=$1 type=$2 value=$3 case $type in bios) field=2;; bmc) field=3;; bp) field=4;; esac val_expected=$(awk -F, "{ if ( \$1 == \"${model}\" ) { print \$${field} } }" <<EOF #Model,BIOS,BMC,BackPlane Latitude E4300,A14 Latitude E6500,A19 Precision WorkStation T3500,A04 Precision WorkStation T5400,A05 Precision WorkStation T5500,A03 Precision WorkStation 490,A08 Precision WorkStation 530MT,A11 Precision WorkStation 650,A05 Precision WorkStation 670,A07 Precision WorkStation 690,A08 PowerEdge 1750,A12,1.84,1.1? PowerEdge 1800,A07,1.83,A04 PowerEdge 1850,A07,1.83,1.00 PowerEdge 1950,2.6.1,2.37,1.05 PowerEdge 2800,A07,1.83,A04 PowerEdge 2850,A07,1.83,1.00 PowerEdge 2900,2.4.3,2.28, PowerEdge 2950,2.6.1,2.37, PowerEdge R610,1.3.6,1.30,1.07 PowerEdge R710,1.3.6,1.30,1.07 EOF) debug "model=[${model}],type=[${type}],value=[${value}], val_expected=[${val_expected}]" if [ -z "${val_expected}" ]; then echo "(?)" elif [ "${value}" != "${val_expected}" ]; then echo "*(!=${val_expected})" fi } # XXX Gotta keep this correct and maintained check_perc4() { rev=$(echo "$1" | cut -f1 -d,) rev_expected="5B2D" [ "${rev}" != "${rev_expected}" ] && echo "*(!=${rev_expected})" } check_perc5i() { rev=$(echo "$1" | cut -f1 -d,) rev_expected="5B2D" [ "${rev}" != "${rev_expected}" ] && echo "*(!=${rev_expected})" } check_perc5e() { rev=$(echo "$1" | cut -f1 -d,) rev_expected="5B2D" [ "${rev}" != "${rev_expected}" ] && echo "*(!=${rev_expected})" } check_perc6i() { rev=$(echo "$1" | cut -f1 -d,) rev_expected="5B2D" [ "${rev}" != "${rev_expected}" ] && echo "*(!=${rev_expected})" } check_perc6e() { rev=$(echo "$1" | cut -f1 -d,) rev_expected="5B2D" [ "${rev}" != "${rev_expected}" ] && echo "*(!=${rev_expected})" } check_md1000() { rev=$(echo "$1" | cut -f1 -d,) rev_expected="A04" [ "${rev}" != "${rev_expected}" ] && echo "*(!=${rev_expected})" } # ======================================================================== # MAIN # ======================================================================== preload inv_sys_manufacturer="$(get_sys_manufacturer)" inv_sys_model="$(get_sys_model)" inv_sys_serialnumber="$(get_sys_serialnumber)" inv_sys_bios="$(get_sys_bios)" inv_sys_bmc="$(get_sys_bmc)" inv_sys_perc4="$(get_perc4)" inv_sys_perc5i="$(get_perc5i)" inv_sys_perc5e="$(get_perc5E)" inv_sys_perc6i="$(get_perc6i)" inv_sys_perc6E="$(get_perc6E)" inv_sys_sasbp="$(get_sasbp)" inv_sys_scabp="$(get_scabp)" inv_sys_md1000="$(get_md1000)" inv_sys_pv220="$(get_pv220)" inv_monitor_model="$(get_monitor_model)" inv_monitor_serialnumber="$(get_monitor_serialnumber)" echo "Hostname: [${inv_sys_hostname}]" echo "Manufacturer: [${inv_sys_manufacturer}]" echo "Model: [${inv_sys_model}]" echo "Serial Number: [${inv_sys_serialnumber}]" echo "BIOS Version: [${inv_sys_bios}] $(check_bios_bmc_bp "${inv_sys_model}" bios ${inv_sys_bios})" [ -n "${inv_sys_bmc}" ] && \ echo "BMC Version: [${inv_sys_bmc}] $(check_bios_bmc_bp "${inv_sys_model}" bmc ${inv_sys_bmc})" [ -n "${inv_sys_perc4}" ] && \ echo "PERC4 Version: [${inv_sys_perc4}] $(check_perc4 "${inv_sys_perc4}")" [ -n "${inv_sys_perc5i}" ] && \ echo "PERC5i Version: [${inv_sys_perc5i}]" [ -n "${inv_sys_perc5e}" ] && \ echo "PERC5E Version: [${inv_sys_perc5e}]" [ -n "${inv_sys_perc6i}" ] && \ echo "PERC6i Version: [${inv_sys_perc6i}]" [ -n "${inv_sys_perc6e}" ] && \ echo "PERC6E Version: [${inv_sys_perc6E}]" [ -n "${inv_sys_sasbp}" ] && \ echo "SASBP Version: [${inv_sys_sasbp}]" [ -n "${inv_sys_scabp}" ] && \ echo "SCABP Version: [${inv_sys_scabp}]" [ -n "${inv_sys_md1000}" ] && \ echo "MD1000 Version: [${inv_sys_md1000}]" [ -n "${inv_monitor_model}" ] && \ echo "Monitor Model: [${inv_monitor_model}]" [ -n "${inv_monitor_serialnumber}" ] && \ echo "Monitor SerNum: [${inv_monitor_serialnumber}]" #echo "Hostname, System Manufacturer, System Model, System Serial Number, System BIOS, BMC version, Monitor Model, Monitor SerialNumber" #echo "${inv_sys_hostname}, ${inv_sys_manufacturer}, ${inv_sys_model}" \ # ", ${inv_sys_serialnumber}, ${inv_sys_bios}, ${inv_sys_bmc}" \ # ", ${inv_monitor_model}, ${inv_monitor_serialnumber}" ### --- Appendix ------------------------------------------------------------ exit 0 : <<"END_NOTES" Handle 0x0100 DMI type 1, 25 bytes. System Information Manufacturer: Dell Inc. Product Name: Precision WorkStation 670 Version: Not Specified Serial Number: 2MX9Q81 UUID: 44454C4C-4D00-1058-8039-B2C04F513831 Wake-up Type: Power Switch Handle 0x0000, DMI type 0, 20 bytes BIOS Information Vendor: Dell Computer Corporation Version: A05 Handle 0x0000 DMI type 0, 20 bytes. BIOS Information Vendor: Dell Computer Corporation Version: A11 ---------------------------- [ /proc/scsi/scsi ] *** SCSI/SCA Backplane example Host: scsi0 Channel: 00 Id: 06 Lun: 00 Vendor: PE/PV Model: 1x2 SCSI BP Rev: 1.0 Type: Processor ANSI SCSI revision: 02 *** SAS Backplane example Host: scsi0 Channel: 00 Id: 32 Lun: 00 Vendor: DP Model: BACKPLANE Rev: 1.05 Type: Enclosure ANSI SCSI revision: 05 *** PERC 6/i example Host: scsi0 Channel: 02 Id: 00 Lun: 00 Vendor: DELL Model: PERC 6/i Rev: 1.11 Type: Direct-Access ANSI SCSI revision: 05 Host: scsi0 Channel: 01 Id: 00 Lun: 00 Vendor: MegaRAID Model: LD 0 RAID1 69G Rev: 522D Type: Direct-Access ANSI SCSI revision: 02 sg_scan -ia md1000_svctag=$(sg_ses -p 0x4 /dev/sg9 | grep '^ 20[[:space:]]\+' | cut -b68-74) PowerEdge 1950 2.6.1(rec) 2.5.0(opt) 2.4.3(urg) 2.3.1(urg) 2.2.6(rec) 2.1.1(rec) 2.0.1(rec) 1.5.1(rec) 1.3.7(urg) 1.2.0(opt) 1.1.0(urg) 1.0.1(rec) This link is TOTALLY unmaintained :-( http://support.dell.com/support/topics/global.aspx/support/downloads/en/bios_and_firmware?~ck=ln&c=us&l=en&lnki=0&s=gen END_NOTES : <<"RCS_INFO" $Header$ $Log$ RCS_INFO # :set expandtab shiftwidth=4 tabstop=4 noai
_______________________________________________ Linux-PowerEdge mailing list Linux-PowerEdge@dell.com https://lists.us.dell.com/mailman/listinfo/linux-poweredge Please read the FAQ at http://lists.us.dell.com/faq