@cryptotaxi247 / netdata-1 / commits / ea1b0ea83

fix virtualization detection when `systemd-detect-virt` is not available (#12911)

Ilya Mashchenko committed May 16, 2022 at 12:37 UTC ea1b0ea8383131eee6fb59a1bad8837d86ea49b3
1 file changed +19 -3
daemon/system-info.sh
+19 -3
@@ -10,6 +10,18 @@ ARCHITECTURE="$(uname -m)"
10 # -------------------------------------------------------------------------------------------------
11 # detect the virtualization and possibly the container technology
12
13 +# systemd-detect-virt: https://github.com/systemd/systemd/blob/df423851fcc05cf02281d11aab6aee7b476c1c3b/src/basic/virt.c#L999
14 +# lscpu: https://github.com/util-linux/util-linux/blob/581b77da7aa4a5205902857184d555bed367e3e0/sys-utils/lscpu.c#L52
15 +virtualization_normalize_name() {
16 + vname="$1"
17 + case "$vname" in
18 + "User-mode Linux") vname="uml" ;;
19 + "Windows Subsystem for Linux") vname="wsl" ;;
20 + esac
21 +
22 + echo "$vname" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g'
23 +}
24 +
25 CONTAINER="unknown"
26 CONT_DETECTION="none"
27 CONTAINER_IS_OFFICIAL_IMAGE="${NETDATA_OFFICIAL_IMAGE:-false}"
@@ -24,9 +36,9 @@ if [ -z "${VIRTUALIZATION}" ]; then
36 CONTAINER=${CONTAINER:-$(systemd-detect-virt -c)}
37 CONT_DETECTION="systemd-detect-virt"
38 else
27 - if grep -q "^flags.*hypervisor" /proc/cpuinfo 2> /dev/null; then
28 - VIRTUALIZATION="hypervisor"
29 - VIRT_DETECTION="/proc/cpuinfo"
39 + if command -v lscpu >/dev/null 2>&1; then
40 + VIRTUALIZATION=$(lscpu | grep "Hypervisor vendor" | cut -d: -f 2 | awk '{$1=$1};1')
41 + VIRT_DETECTION="lscpu"
42 elif [ -n "$(command -v dmidecode)" ] && dmidecode -s system-product-name 2> /dev/null | grep -q "VMware\|Virtual\|KVM\|Bochs"; then
43 VIRTUALIZATION="$(dmidecode -s system-product-name)"
44 VIRT_DETECTION="dmidecode"
@@ -34,9 +46,13 @@ if [ -z "${VIRTUALIZATION}" ]; then
46 VIRTUALIZATION="none"
47 fi
48 fi
49 +
50 if [ -z "${VIRTUALIZATION}" ]; then
51 # Output from the command is outside of spec
52 VIRTUALIZATION="unknown"
53 + VIRT_DETECTION="none"
54 + else
55 + VIRTUALIZATION=$(virtualization_normalize_name $VIRTUALIZATION)
56 fi
57 else
58 # Passed from outside - probably in docker run