#!/bin/sh # $Id: module:smbios,v 1.1 2006/05/17 23:41:37 root Exp matt $ # Public domain. Matt Peterson # This is a simple Cfengine module for generating some additional classes # based on SMBIOS data (serial #, model name, CPU's, etc); pre-reqs below: # lshw http://ezix.org/project/wiki/HardwareLiSter # xmlstarlet http://xmlstar.sourceforge.net/ # sh, bc, sed # Define some paths lshw="/usr/sbin/lshw" xmlstarlet="/usr/bin/xmlstarlet" if [ ! -x $lshw ]; then echo "Warning: lshw not found, exited `basename $0`" exit 0 fi if [ ! -x $xmlstarlet ]; then echo "Warning: xmlstarlet not found, exited `basename $0`" exit 0 fi lshw_xml_dump=`$lshw -xml` smbios_vendor=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "/node[1]/vendor" -` smbios_vendor=`echo $smbios_vendor | sed 's/[ \t]/_/g'` smbios_model=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "/node[1]/product" -` smbios_model=`echo $smbios_model | sed 's/[ \t]/_/g'` smbios_serial=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "/node[1]/serial" -` smbios_cpu0=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "//node[@id = 'cpu:0']/product" - ` smbios_cpu0=`echo $smbios_cpu0 | sed -e 's/[\(R\)|\(TM\)]//g' -e 's/[ \t]/_/g' -e 's/\./_/'` smbios_cpu1=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "//node[@id = 'cpu:1']/product" - ` smbios_cpu1=`echo $smbios_cpu1 | sed -e 's/[\(R\)|\(TM\)]//g' -e 's/[ \t]/_/g' -e 's/\./_/'` # Expressed in bytes smbios_total_mem=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "//node[@id = 'bank:0']/size" -o "+0" -v "//node[@id = 'bank:1']/size" -o "+0" -v "//node[@id = 'bank:2']/size" -o "+0" -v "//node[@id = 'bank:3']/size" -o "+0" -v "//node[@id = 'bank:4']/size" -o "+0" -v "//node[@id = 'bank:5']/size" -o "+0" -v "//node[@id = 'bank:6']/size" -o "+0" -v "//node[@id = 'bank:7']/size" -` smbios_total_mem=`echo $smbios_total_mem | bc` echo "+smbios_vendor_$smbios_vendor" echo "+smbios_model_$smbios_model" echo "+smbios_serial_$smbios_serial" echo "+smbios_cpu0_$smbios_cpu0" echo "+smbios_cpu1_$smbios_cpu1" echo "+smbios_total_mem_$smbios_total_mem"