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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
#!/bin/bash -
# @configure_input@
# Copyright (C) 2008-2010 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# '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.
#
# 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
VERSION="@VERSION@"
function fail {
echo "virt-what: $1"
exit 1
}
function usage {
echo "virt-what [options]"
echo "Options:"
echo " --help Display this help"
echo " --version Display version and exit"
exit 0
}
# Handle the command line arguments, if any.
TEMP=`getopt -o v --long help --long version -n 'virt-what' -- "$@"`
if [ $? != 0 ]; then exit 1; fi
eval set -- "$TEMP"
while true; do
case "$1" in
--help) usage ;;
-v|--version) echo $VERSION; exit 0 ;;
--) shift; break ;;
*) fail "internal error" ;;
esac
done
# Check we're running as root.
uid=`id -u`
if [ "$uid" != 0 ]; then
fail "this script must be run as root"
fi
# Add /sbin and /usr/sbin to the path so we can find system
# binaries like dmicode.
# Add /usr/libexec to the path so we can find the helper binary.
prefix=@prefix@
exec_prefix=@exec_prefix@
PATH=@libexecdir@:/sbin:/usr/sbin:$PATH
# Many fullvirt hypervisors give an indication through CPUID. Use the
# helper program to get this information.
cpuid=`virt-what-cpuid-helper`
# Check for various products in the BIOS information.
dmi=`dmidecode 2>&1`
# Check for VMware.
# cpuid check added by Chetan Loke.
if [ "$cpuid" = "VMwareVMware" ]; then
echo vmware
elif echo "$dmi" | grep -q 'Manufacturer: VMware'; then
echo vmware
fi
# Check for Hyper-V.
# http://blogs.msdn.com/b/sqlosteam/archive/2010/10/30/is-this-real-the-metaphysics-of-hardware-virtualization.aspx
if [ "$cpuid" = "Microsoft Hv" ]; then
echo hyperv
fi
# Check for VirtualPC.
if echo "$dmi" | grep -q 'Manufacturer: Microsoft Corporation'; then
echo virtualpc
fi
# Check for VirtualBox.
# Added by Laurent Léonard.
if echo "$dmi" | grep -q 'Manufacturer: innotek GmbH'; then
echo virtualbox
fi
# Check for OpenVZ / Virtuozzo.
# Added by Evgeniy Sokolov.
# /proc/vz - always exists if OpenVZ kernel is running (inside and outside
# container)
# /proc/bc - exists on node, but not inside container.
if [ -d /proc/vz -a ! -d /proc/bc ]; then
echo openvz
fi
# Check for UML.
# Added by Laurent Léonard.
if grep -q 'UML' /proc/cpuinfo; then
echo uml
fi
# Check for Xen.
if [ "$cpuid" = "XenVMMXenVMM" ]; then
echo xen; echo xen-hvm
is_xen=1
elif [ -f /proc/xen/capabilities ]; then
echo xen
if grep -q "control_d" /proc/xen/capabilities; then
echo xen-dom0
else
echo xen-domU
fi
is_xen=1
elif [ -d /proc/xen ]; then
# This directory can be present when Xen paravirt drivers are
# installed, even on baremetal. Don't confuse people by
# printing anything.
:
fi
# Check for QEMU/KVM.
if [ ! "$is_xen" ]; then
# Disable this test if we know this is Xen already, because Xen
# uses QEMU for its device model.
if grep -q 'QEMU' /proc/cpuinfo; then
if [ "$cpuid" = "KVMKVMKVM" ]; then
echo kvm
else
echo qemu
fi
fi
fi
|