summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2022-05-16 12:37:33 +0300
committerGitHub <noreply@github.com>2022-05-16 12:37:33 +0300
commitea1b0ea8383131eee6fb59a1bad8837d86ea49b3 (patch)
tree926c34e6486ac54ca464d3e1a22631cb7533583a
parent3fa3b0bd35c1a95887e68ee60624207640dde620 (diff)
fix virtualization detection when `systemd-detect-virt` is not available (#12911)
-rwxr-xr-xdaemon/system-info.sh22
1 files changed, 19 insertions, 3 deletions
diff --git a/daemon/system-info.sh b/daemon/system-info.sh
index 56517d0d7c..19105874ba 100755
--- a/daemon/system-info.sh
+++ b/daemon/system-info.sh
@@ -10,6 +10,18 @@ ARCHITECTURE="$(uname -m)"
# -------------------------------------------------------------------------------------------------
# detect the virtualization and possibly the container technology
+# systemd-detect-virt: https://github.com/systemd/systemd/blob/df423851fcc05cf02281d11aab6aee7b476c1c3b/src/basic/virt.c#L999
+# lscpu: https://github.com/util-linux/util-linux/blob/581b77da7aa4a5205902857184d555bed367e3e0/sys-utils/lscpu.c#L52
+virtualization_normalize_name() {
+ vname="$1"
+ case "$vname" in
+ "User-mode Linux") vname="uml" ;;
+ "Windows Subsystem for Linux") vname="wsl" ;;
+ esac
+
+ echo "$vname" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g'
+}
+
CONTAINER="unknown"
CONT_DETECTION="none"
CONTAINER_IS_OFFICIAL_IMAGE="${NETDATA_OFFICIAL_IMAGE:-false}"
@@ -24,9 +36,9 @@ if [ -z "${VIRTUALIZATION}" ]; then
CONTAINER=${CONTAINER:-$(systemd-detect-virt -c)}
CONT_DETECTION="systemd-detect-virt"
else
- if grep -q "^flags.*hypervisor" /proc/cpuinfo 2> /dev/null; then
- VIRTUALIZATION="hypervisor"
- VIRT_DETECTION="/proc/cpuinfo"
+ if command -v lscpu >/dev/null 2>&1; then
+ VIRTUALIZATION=$(lscpu | grep "Hypervisor vendor" | cut -d: -f 2 | awk '{$1=$1};1')
+ VIRT_DETECTION="lscpu"
elif [ -n "$(command -v dmidecode)" ] && dmidecode -s system-product-name 2> /dev/null | grep -q "VMware\|Virtual\|KVM\|Bochs"; then
VIRTUALIZATION="$(dmidecode -s system-product-name)"
VIRT_DETECTION="dmidecode"
@@ -34,9 +46,13 @@ if [ -z "${VIRTUALIZATION}" ]; then
VIRTUALIZATION="none"
fi
fi
+
if [ -z "${VIRTUALIZATION}" ]; then
# Output from the command is outside of spec
VIRTUALIZATION="unknown"
+ VIRT_DETECTION="none"
+ else
+ VIRTUALIZATION=$(virtualization_normalize_name $VIRTUALIZATION)
fi
else
# Passed from outside - probably in docker run