X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=virt-what.in;h=f2c0b905f2df058a540e6cda1e5355964f8fd063;hb=aec669f7b9e4a172c57978597916f8bd97bf26de;hp=f12c95beb973f8fc632958c32d8caf2baa839cf3;hpb=1115c163011175942b410bac413558d82a3bb784;p=virt-what.git diff --git a/virt-what.in b/virt-what.in index f12c95b..f2c0b90 100644 --- a/virt-what.in +++ b/virt-what.in @@ -1,4 +1,4 @@ -#!/bin/bash - +#!/bin/sh - # @configure_input@ # Copyright (C) 2008-2011 Red Hat Inc. # @@ -18,13 +18,13 @@ # 'virt-what' tries to detect the type of virtualization being # used (or none at all if we're running on bare-metal). It prints -# out one of more lines each being a 'fact' about the virtualization. +# out one or more lines each being a 'fact' about the virtualization. # # Please see also the manual page virt-what(1). # This script should be run as root. # # The following resources were useful in writing this script: -# . http://www.dmo.ca/blog/20080530151107 +# . http://dmo.ca/blog/detecting-virtualization-on-linux/ # Do not allow unset variables, and set defaults. set -u @@ -33,12 +33,16 @@ skip_qemu_kvm=false VERSION="@VERSION@" -function fail { +have_cpuinfo() { + test -e "${root}/proc/cpuinfo" +} + +fail() { echo "virt-what: $1" >&2 exit 1 } -function usage { +usage() { echo "virt-what [options]" echo "Options:" echo " --help Display this help" @@ -47,38 +51,42 @@ function usage { } # Handle the command line arguments, if any. - -TEMP=$(getopt -o v --long help --long version --long test-root: -n 'virt-what' -- "$@") -if [ $? != 0 ]; then exit 1; fi -eval set -- "$TEMP" - -while true; do +while test $# -gt 0; do case "$1" in --help) usage ;; - --test-root) + --test-root=*) # Deliberately undocumented: used for 'make check'. - root="$2" - shift 2 + root=$(echo "$1" | sed 's/.*=//') + shift 1 + test -z "$root" && fail "--test-root option requires a value" ;; -v|--version) echo "$VERSION"; exit 0 ;; --) shift; break ;; - *) fail "internal error ($1)" ;; + *) fail "unrecognized option '$1'";; esac done +test $# -gt 0 && fail "extra operand '$1'" # Add /sbin and /usr/sbin to the path so we can find system -# binaries like dmicode. +# binaries like dmidecode. # Add /usr/libexec to the path so we can find the helper binary. prefix=@prefix@ exec_prefix=@exec_prefix@ PATH="${root}@libexecdir@:${root}/sbin:${root}/usr/sbin:${PATH}" # Check we're running as root. +EFFUID=$(id -u) || fail "failed to get current user id" -if [ "x$root" = "x" ] && [ "$EUID" -ne 0 ]; then +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. @@ -145,18 +153,25 @@ 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 + else + echo linux_vserver-guest + fi 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 @@ -167,7 +182,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 @@ -192,9 +207,9 @@ fi if [ "$cpuid" = "XenVMMXenVMM" ]; then echo xen; echo xen-hvm skip_qemu_kvm=true -elif [ -f "${root}/proc/xen/capabilities" ]; then +elif [ -d "${root}/proc/xen" ]; then echo xen - if grep -q "control_d" "${root}/proc/xen/capabilities"; then + if grep -q "control_d" "${root}/proc/xen/capabilities" 2>/dev/null; then echo xen-dom0 else echo xen-domU @@ -243,3 +258,8 @@ if ! "$skip_qemu_kvm"; then fi fi fi + +# Check for Docker. +if [ -f "${root}/.dockerinit" ]; then + echo docker +fi