#!/bin/bash . /lib/dracut-lib.sh # http://git.openslx.org/openslx-ng/mltk.git/tree/core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats # dmidecode | grep -i UUID # MAC # MAC=$(ip addr show | grep -Eo -m 1 'ether\s.*\sbrd') # MAC=${MAC#"ether "} # MAC=${MAC%" brd"} # UUID UUID=$(dmidecode -q -s system-uuid | grep -v '^#' | head -n 1 | tr '[a-z]' '[A-Z]') # System MANUFACTURER=$(dmidecode -q -s system-manufacturer) MODEL=$(dmidecode -q -s system-product-name) SERIAL=$(dmidecode -q -s system-serial-number) VENDOR=$(dmidecode | grep -Eo '(Vendor).*') VENDOR=${VENDOR#"Vendor: "} # VENDOR=$(dmidecode | grep -Eo '(Vendor).*' | cut -f 2 -d ":") # Mainboard MAINBOARD_MANUFACTURER=$(dmidecode -q -s baseboard-manufacturer) MAINBOARD_MODEL=$(dmidecode -q -s baseboard-product-name) MAINBOARD_SERIAL_NUMBER=$(dmidecode -q -s baseboard-serial-number) # CPU CPU_MODEL=$(dmidecode -q -s processor-version) # CPUMODEL=$(grep -m1 '^model name\s*:' /proc/cpuinfo | sed 's/^model name\s*:\s*//;s/\s\s*/ /g;s/^ //;s/ $//') CPU_MANUFACTURER=$(dmidecode -q -s processor-manufacturer) CPU_TYPE=$(dmidecode -q -s processor-family) CPU_CORES=$(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -u | wc -l) CPU_FREQUENCY=$(dmidecode -q -s processor-frequency) CPU_FREQUENCY=${CPU_FREQUENCY%" MHz"} # RAM # RAM=$(grep -m1 '^MemTotal:' /proc/meminfo | awk '{print $2}') # RAM=$(( $RAM / 1024 )) # if [ -z "$RAM" ] || [ "$RAM" -lt 500 ]; then # # Fallback to dmidecode # RAM=0 # for c in $(dmidecode -t 17 | grep -o 'Size:.*MB$' | awk '{print $2}'); do # RAM=$(( $RAM + $c )) # done # fi # RAM_SIZE=$(dmidecode -t 17 | grep -o 'Size:.*[MG]B$') RAM_SIZE=$(dmidecode -t 17 | grep -o 'Size:.*') RAM_MANUFACTURER=$(dmidecode -t 17 | grep -o 'Manufacturer:.*') RAM_TYPE=$(dmidecode -t 17 | grep -o 'Type:.*') RAM_ISECC=$(dmidecode -t 16 | grep -o 'Error Correction Type:.*') RAM_FORMFACTOR=$(dmidecode -t 17 | grep -o 'Form Factor:.*') # HDD / SSD # hd parm or smartctl from smartmontools drives=$(ls /dev/sd* | grep -o '/dev/sd.$') DRIVES=() for drive in $drives; do # drivedata=$(sudo smartctl -i $drive) # drivedata1=$(sudo hdparm -I $drive) drivedata=$(mktemp) smartctl -i $drive >> $drivedata DRIVE=() # Model #echo $(sudo smartctl -i $drive | grep -o "Device Model: .*") #echo $(sudo hdparm -I $drive | grep -o "Model Number: .*") DRIVE_MODEL=$(cat $drivedata | grep -o "Device Model: .*") DRIVE+=($DRIVE_MODEL) DRIVE+=('%ATTRIBUTE_SPLITTER%') # Serial #echo $(sudo smartctl -i $drive | grep -o "Serial Number: .*") #echo $(sudo hdparm -I $drive | grep -o "Serial Number: .*") DRIVE_SERIAL=$(cat $drivedata | grep -o "Serial Number: .*") DRIVE+=($DRIVE_SERIAL) DRIVE+=('%ATTRIBUTE_SPLITTER%') # Capacity #echo $(sudo smartctl -i $drive | grep -o "User Capacity: .*") #echo $(sudo hdparm -I $drive | grep -o "device size with M = 1000\*1000: .*") DRIVE_CAPACITY=$(cat $drivedata | grep -o "User Capacity: .*" | grep -Pzo '(?<=\[)(.*?)(?=\])') DRIVE+=($DRIVE_CAPACITY) DRIVE+=('%ATTRIBUTE_SPLITTER%') # Type #echo $(sudo smartctl -i $drive | grep -o "Rotation Rate: .*") #echo $(sudo hdparm -Ibash $drive | grep -o "Nominal Media Rotation Rate: .*") DRIVE_TYPE=$(cat $drivedata | grep -o "Rotation Rate: .*") DRIVE+=($DRIVE_TYPE) DRIVE+=('%ATTRIBUTE_SPLITTER%') # Form Factor #echo $(sudo smartctl -i $drive | grep -o "Form Factor: .*") #echo $(sudo hdparm -I $drive | grep -o "Form Factor: .*") DRIVE_FORMFACTOR=$(cat $drivedata | grep -o "Form Factor: .*") DRIVE+=($DRIVE_FORMFACTOR) DRIVE+=('%ATTRIBUTE_SPLITTER%') # Connection #echo $(sudo smartctl -i $drive | grep -o "SATA Version is: .*") #echo $(sudo hdparm -I $drive | grep -o "signaling speed .*") DRIVE_CONNECTION=$(cat $drivedata | grep -o "SATA Version is: .*") DRIVE+=($DRIVE_CONNECTION) DRIVES+=(${DRIVE[*]}) DRIVES+=("%OBJECT_SPLITTER%") done # Curl #curl --data "state=6" --insecure https://bas.stfu-kthx.net:8888/api/registrations/$UUID/state curl -d "name=Client_$UUID&sys_manufacturer=$MANUFACTURER&sys_model=$MODEL&sys_serial=$SERIAL&cpu_model=$CPU_MODEL&cpu_manufacturer=$CPU_MANUFACTURER&cpu_type=$CPU_TYPE&cpu_cores=$CPU_CORES&cpu_frequency=$CPU_FREQUENCY&ram_size=$RAM_SIZE&ram_manufacturer=$RAM_MANUFACTURER&ram_type=$RAM_TYPE&ram_isecc=$RAM_ISECC&ram_formfactor=$RAM_FORMFACTOR&drives=${DRIVES[*]}" -H "Content-Type: application/x-www-form-urlencoded" -X POST --insecure https://bas.intra.uni-freiburg.de/api/registration/$UUID/update