hardwareerkennungsskript
Inhaltsverzeichnis
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 openQRM seine Daten ablegt. Das kann man natürlich den eigenen Vorlieben anpassen.
/home/http/wiki/data/pages/hardwareerkennungsskript.txt · Zuletzt geändert: von manfred
