===== Hardwareerkennungsskript ===== Oft muss man von vielen Maschinen die wichtigsten Hardware-Daten über das Netz abfragen. Genau für soeinen Fall stelle ich hier zwei Skripte vor. - Gibt von der aktuellen Maschine die wichtigsten Hardware-Daten in Form von //[Variable]=[Wert]// aus. - Wird mit dem Hostnamen bzw. der IP als Parameter aufgerufen und legt auf der aktuellen Maschine eine Datenbank mit zugehöriger Tabelle an und schreibt gleich die Hardware-Daten, die zu dem übergebenen Hostnamen gehören, in die Datenbanktabelle. MySQL sollte natürlich auf der aktuellen Maschine installiert sein! ==== einfaches HW-Skript ==== #!/bin/sh ( # Hostname echo "hostname=$(hostname -f)" # IP-Adressen ifconfig -a | awk '!/127.0.0.1/ && /inet / {sub(":", " ") ; print "IP4="$3}' # MAC-Adressen find /sys/ -type f | fgrep 'address' | fgrep -i 'eth' | xargs cat ${1} | awk '{print "mac="$1}' # BIOS-Datum dmidecode -t 0 | fgrep -i 'Release Date:' | sed -e 's/^\t/BIOS /' -e 's/: /=/' # System-Infos dmidecode -t 1 | egrep -i 'Manufacturer:|Product Name:|Serial Number:' | sed -e 's/^\t/BIOS /' -e 's/: /=/' # Anzahl der CPUs dmidecode -t processor | egrep -i 'Socket Designation:' | wc -l | awk '{print "CPU Anzahl="$1}' # 64Bit oder nicht egrep ^flags /proc/cpuinfo | tr -s ' ' '\n' | egrep ^lm | uniq | awk '{print "bus="$1}' # Hardwarevirtualisierung egrep ^flags /proc/cpuinfo | tr -s ' ' '\n' | egrep 'vmx|svm' | uniq | awk '{print "vm="$1}' # Hyper-Threading oder nicht awk -v alt='^$' -v neu='#' '{sub(alt, neu)} /physical id|core id|#/ && /0$|#/ {print $NF}' /proc/cpuinfo | uniq -c | awk '!/#|1 0/' | wc -l | awk '{$1 > 1 ; print "htt="$1}' # CPU-Infos dmidecode -t processor | sed -e '1,/^$/ d' -e '/^$/ q' -e 's/^\t/CPU /' -e 's/: /=/' | egrep -i 'Family=|Manufacturer=|ID=|Signature=|Core Count=|Core Enabled=' # Hauptspeichergröße egrep ^MemTotal /proc/meminfo | sed 's/:[ ]*/=/' # Festplatten fgrep -H 0 /sys/class/block/*/removable | egrep -v 'loop|ram|dm-' | awk -F'/' '{print $5}' | while read DEV;do echo "HDD=${DEV} $(cat /sys/class/block/${DEV}/size | awk -F'/' '{print $1/2048}') MB";done ) | awk -F'=' '{wert=$2 ; gsub(" ", "_") ; variable=tolower($1) ; print variable"="wert}' Die Angabe "''BIOS Serial Number''" entspricht der "''Service Tag''". ==== remote abfragendes HW-Skript mit Datenbankanbindung ==== #!/bin/sh #------------------------------------------------------------------------------# # User-Check if [ "$(id -u)" != "0" -o -z "${1}" ] ; then echo "Sie muessen 'root' sein" echo "und" echo "die IP des Zielrechners als Parameter mit übergeben!" exit 1 else rm -fr HWINFOS SPALTEN WERTE fi #------------------------------------------------------------------------------# # VARIABLEN werden gesammelt bzw. gesetzt . /usr/share/openqrm/etc/openqrm-server.conf #OPENQRM_DATABASE_SERVER=localhost #OPENQRM_DATABASE_NAME=openqrm #OPENQRM_DATABASE_USER=root #OPENQRM_DATABASE_PASSWORD=geheim # HWINFOTAB="hardware" #------------------------------------------------------------------------------# # DB + Tabelle anlegen ################################################################################ # echo "DROP TABLE hardware" | mysql -h localhost -u root -p openqrm # ./hardwareinfodb_bauen.sh # ./hardwareinfos2db.sh 192.168.3.70 # echo "SELECT * FROM hardware;" | mysql -h localhost -u root -p openqrm # echo "SELECT hostname,bios_release_date,bios_product_name,mac,cpu_anzahl,bus,htt,cpu_family,cpu_manufacturer,cpu_signature FROM hardware;" | mysql -t -h localhost -u root -pblack60x openqrm ################################################################################ echo " CREATE DATABASE IF NOT EXISTS ${OPENQRM_DATABASE_NAME}; USE ${OPENQRM_DATABASE_NAME}; CREATE TABLE IF NOT EXISTS ${HWINFOTAB} ( timestamp DATETIME, hostname VARCHAR(254) default NULL, ip4 VARCHAR(4096) default NULL, mac VARCHAR(2048) default NULL, bios_release_date VARCHAR(256) default NULL, bios_manufacturer VARCHAR(256) default NULL, bios_product_name VARCHAR(256) default NULL, bios_serial_number VARCHAR(256) default NULL, cpu_anzahl SMALLINT, bus VARCHAR(8) default NULL, vm VARCHAR(8) default NULL, htt SMALLINT, cpu_family VARCHAR(256) default NULL, cpu_manufacturer VARCHAR(256) default NULL, cpu_id VARCHAR(256) default NULL, cpu_signature VARCHAR(256) default NULL, cpu_core_count SMALLINT, cpu_core_enabled SMALLINT, memtotal VARCHAR(256) default NULL, hdd VARCHAR(256) default NULL, PRIMARY KEY (bios_serial_number), KEY mac (mac) ) TYPE=MyISAM; " | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} #------------------------------------------------------------------------------# # Hardwareinfos werden gesammelt # # cat hardwareinfos_holen.sh | ssh root@192.168.3.70 'cat > hwi.sh;chmod 0700 hwi.sh;./hwi.sh' # echo "( # TIMESTAMP echo \"timestamp=\$(date +'%Y-%m-%d %H:%M:%S')\" # Hostname echo \"hostname=\$(hostname -f)\" # IP-Adressen ifconfig -a | awk '!/127.0.0.1/ && /inet / {sub(\":\", \" \") ; print \"IP4=\"\$3}' # MAC-Adressen find /sys/ -type f | fgrep 'address' | fgrep -i 'eth' | xargs cat \${1} | awk '{print \"mac=\"\$1}' # BIOS-Datum dmidecode -t 0 | fgrep -i 'Release Date:' | sed -e 's/^\t/BIOS /' -e 's/: /=/' # System-Infos dmidecode -t 1 | egrep -i 'Manufacturer:|Product Name:|Serial Number:' | sed -e 's/^\t/BIOS /' -e 's/: /=/' # Anzahl der CPUs dmidecode -t processor | egrep -i 'Socket Designation:' | wc -l | awk '{print \"CPU Anzahl=\"\$1}' # 64Bit oder nicht egrep ^flags /proc/cpuinfo | tr -s ' ' '\n' | egrep ^lm | uniq | awk '{print \"bus=\"\$1}' # Hardwarevirtualisierung egrep ^flags /proc/cpuinfo | tr -s ' ' '\n' | egrep 'vmx|svm' | uniq | awk '{print \"vm=\"\$1}' # Hyper-Threading oder nicht awk -v alt='^\$' -v neu='#' '{sub(alt, neu)} /physical id|core id|#/ && /0\$|#/ {print \$NF}' /proc/cpuinfo | uniq -c | awk '!/#|1 0/' | wc -l | awk '{\$1 > 1 ; print \"htt=\"\$1}' # CPU-Infos dmidecode -t processor | sed -e '1,/^\$/ d' -e '/^\$/ q' -e 's/^\t/CPU /' -e 's/: /=/' | egrep -i 'Family=|Manufacturer=|ID=|Signature=|Core Count=|Core Enabled=' # Hauptspeichergröße egrep ^MemTotal /proc/meminfo | sed 's/:[ ]*/=/' # Festplatten fgrep -H 0 /sys/class/block/*/removable | egrep -v 'loop|ram|dm-' | awk -F'/' '{print \$5}' | while read DEV;do echo \"HDD=\${DEV} \$(cat /sys/class/block/\${DEV}/size | awk -F'/' '{print \$1/2048}') MB\";done ) | awk -F'=' '{wert=\$2 ; gsub(\" \", \"_\") ; variable=tolower(\$1) ; print variable\"=\"wert}'" | ssh root@${1} 'cat > hwi.sh;chmod 0700 hwi.sh;./hwi.sh' > HWINFOS || exit 1 #------------------------------------------------------------------------------# # Hardwareinfos werden aufbereitet HARDWAREINDEX="$(cat HWINFOS | sed 's/ *$//g')" echo "${HARDWAREINDEX}" | awk -F'=' '{print $1}' | sort | uniq | while read SPALTE do WERTE="$(echo "${HARDWAREINDEX}" | fgrep "${SPALTE}" | awk -F'=' '{print $2}' | tr -s '\n' '; ')" echo "${SPALTE}" >> SPALTEN echo "'${WERTE}'" >> WERTE done #------------------------------------------------------------------------------# # Hardwareinfos werden in die DB geschrieben echo "INSERT INTO ${HWINFOTAB} ($(cat SPALTEN|tr -s '\n' ','|sed 's/,$//')) VALUES ($(cat WERTE|tr -s '\n' ','|sed 's/,$//')) " | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} In diesem Fall ist es so ausgelegt, das es in die selbe Datenbank schreibt, in der auch [[http://www.openqrm.com/|openQRM]] seine Daten ablegt. Das kann man natürlich den eigenen Vorlieben anpassen.