VERSION="@VERSION@"
function fail {
- echo "virt-what: $1"
+ echo "virt-what: $1" >&2
exit 1
}
root="$2"
shift 2
;;
- -v|--version) echo $VERSION; exit 0 ;;
+ -v|--version) echo "$VERSION"; exit 0 ;;
--) shift; break ;;
*) fail "internal error ($1)" ;;
esac
# 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
+PATH="${root}@libexecdir@:${root}/sbin:${root}/usr/sbin:${PATH}"
# Check we're running as root.
-uid=`id -u`
-if [ "$uid" != 0 ]; then
+if [ "x$root" = "x" ] && [ "$EUID" -ne 0 ]; then
fail "this script must be run as root"
fi
# container)
# /proc/bc - exists on node, but not inside container.
-if [ -d $root/proc/vz -a ! -d $root/proc/bc ]; then
+if [ -d "${root}/proc/vz" -a ! -d "${root}/proc/bc" ]; then
echo openvz
fi
+# Check for LXC containers
+# http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface
+# Added by Marc Fournier
+
+if [ -e "${root}/proc/1/environ" ] &&
+ cat "${root}/proc/1/environ" | tr '\000' '\n' | grep -Eiq '^container='; then
+ echo lxc
+fi
+
# Check for Linux-VServer
-if cat $root/proc/self/status | grep -q "VxID: [0-9]*"; then
+if 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 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 grep -q '^vendor_id.*PowerVM Lx86' "${root}/proc/cpuinfo"; then
echo powervm_lx86
fi
# Check for Hitachi Virtualization Manager (HVM) Virtage logical partitioning.
if echo "$dmi" | grep -q 'Manufacturer.*HITACHI' &&
- echo "$dmi" | grep -q 'Product.*HVM LPAR'; then
+ echo "$dmi" | grep -q 'Product.* LPAR'; then
echo virtage
fi
# Check for IBM SystemZ.
-if grep -q '^vendor_id.*IBM/S390' $root/proc/cpuinfo; then
+if 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
+ if [ -f "${root}/proc/sysinfo" ]; then
+ if grep -q 'VM.*Control Program.*z/VM' "${root}/proc/sysinfo"; then
echo ibm_systemz-zvm
- elif grep -q '^LPAR' $root/proc/sysinfo; then
+ elif grep -q '^LPAR' "${root}/proc/sysinfo"; then
echo ibm_systemz-lpar
else
# This is unlikely to be correct.
if [ "$cpuid" = "XenVMMXenVMM" ]; then
echo xen; echo xen-hvm
skip_qemu_kvm=true
-elif [ -f $root/proc/xen/capabilities ]; then
+elif [ -f "${root}/proc/xen/capabilities" ]; then
echo xen
- if grep -q "control_d" $root/proc/xen/capabilities; then
+ if grep -q "control_d" "${root}/proc/xen/capabilities"; then
echo xen-dom0
else
echo xen-domU
fi
skip_qemu_kvm=true
-elif [ -f $root/sys/hypervisor/type ] &&
- grep -q "xen" $root/sys/hypervisor/type; then
+elif [ -f "${root}/sys/hypervisor/type" ] &&
+ grep -q "xen" "${root}/sys/hypervisor/type"; then
# Ordinary kernel with pv_ops. There does not seem to be
# enough information at present to tell whether this is dom0
# or domU. XXX
echo xen
elif [ "$arch" = "ia64" ]; then
- if [ -d $root/sys/bus/xen -a ! -d $root/sys/bus/xen-backend ]; then
+ if [ -d "${root}/sys/bus/xen" -a ! -d "${root}/sys/bus/xen-backend" ]; then
# PV-on-HVM drivers installed in a Xen guest.
echo xen
echo xen-hvm
# seen that it's Parallels. Xen uses QEMU as the device model, so
# skip this test if we know it is Xen.
-if ! $skip_qemu_kvm; then
+if ! "$skip_qemu_kvm"; then
if [ "$cpuid" = "KVMKVMKVM" ]; then
echo kvm
else
# option, since /proc/cpuinfo will not contain the QEMU
# string. The long term fix for this would be to export
# another CPUID leaf for non-accelerated qemu.
- if grep -q 'QEMU' $root/proc/cpuinfo; then
+ if grep -q 'QEMU' "${root}/proc/cpuinfo"; then
echo qemu
fi
fi