virt-what.in: verify files exists before grepping them
[virt-what.git] / virt-what.in
index 3feeb60..6e9aef1 100644 (file)
@@ -33,6 +33,10 @@ skip_qemu_kvm=false
 
 VERSION="@VERSION@"
 
+have_cpuinfo() {
+    test -e "${root}/proc/cpuinfo"
+}
+
 fail() {
     echo "virt-what: $1" >&2
     exit 1
@@ -80,6 +84,12 @@ if [ "x$root" = "x" ] && [ "$EFFUID" -ne 0 ]; then
     fail "this script must be run as root"
 fi
 
+# Try to locate the CPU-ID helper program
+CPUID_HELPER=$(which virt-what-cpuid-helper 2>/dev/null)
+if [ -z "$CPUID_HELPER" ] ; then
+    fail "virt-what-cpuid-helper program not found in \$PATH"
+fi
+
 # Many fullvirt hypervisors give an indication through CPUID.  Use the
 # helper program to get this information.
 
@@ -146,7 +156,8 @@ if [ -e "${root}/proc/1/environ" ] &&
 fi
 
 # Check for Linux-VServer
-if cat "${root}/proc/self/status" | grep -q "VxID: [0-9]*"; then
+if test -e "${root}/proc/self/status" \
+   && cat "${root}/proc/self/status" | grep -q "VxID: [0-9]*"; then
     echo linux_vserver
     if grep -q "VxID: 0$" "${root}/proc/self/status"; then
         echo linux_vserver-host
@@ -157,12 +168,13 @@ fi
 
 # Check for UML.
 # Added by Laurent LĂ©onard.
-if grep -q 'UML' "${root}/proc/cpuinfo"; then
+if have_cpuinfo && grep -q 'UML' "${root}/proc/cpuinfo"; then
     echo uml
 fi
 
 # Check for IBM PowerVM Lx86 Linux/x86 emulator.
-if grep -q '^vendor_id.*PowerVM Lx86' "${root}/proc/cpuinfo"; then
+if have_cpuinfo && grep -q '^vendor_id.*PowerVM Lx86' "${root}/proc/cpuinfo"
+then
     echo powervm_lx86
 fi
 
@@ -173,7 +185,7 @@ if echo "$dmi" | grep -q 'Manufacturer.*HITACHI' &&
 fi
 
 # Check for IBM SystemZ.
-if grep -q '^vendor_id.*IBM/S390' "${root}/proc/cpuinfo"; then
+if have_cpuinfo && grep -q '^vendor_id.*IBM/S390' "${root}/proc/cpuinfo"; then
     echo ibm_systemz
     if [ -f "${root}/proc/sysinfo" ]; then
         if grep -q 'VM.*Control Program.*z/VM' "${root}/proc/sysinfo"; then