summaryrefslogtreecommitdiffstats
path: root/server/ipxe/bash_scripts/grepSystemInfo.sh
blob: 4ce42ab39fe4c6fc74f8ae0666bf9f1be444e0c5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/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: "}

# 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