Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardwareerkennungsskript

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

hardwareerkennungsskript [2016-04-12 22:50:01] – Externe Bearbeitung 127.0.0.1hardwareerkennungsskript [2018-05-28 11:19:22] (aktuell) manfred
Zeile 1: Zeile 1:
 +===== 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.
 +