You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.2 KiB
120 lines
3.2 KiB
#!/bin/sh
|
|
|
|
# -------------------------------------------------------------------------- #
|
|
# Copyright 2002-2023, OpenNebula Project, OpenNebula Systems #
|
|
# #
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
# not use this file except in compliance with the License. You may obtain #
|
|
# a copy of the License at #
|
|
# #
|
|
# http://www.apache.org/licenses/LICENSE-2.0 #
|
|
# #
|
|
# Unless required by applicable law or agreed to in writing, software #
|
|
# distributed under the License is distributed on an "AS IS" BASIS, #
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
|
# See the License for the specific language governing permissions and #
|
|
# limitations under the License. #
|
|
#--------------------------------------------------------------------------- #
|
|
|
|
set -e
|
|
|
|
CMD=$(basename ${0})
|
|
|
|
# file path to the new qemu-kvm symlink
|
|
QEMU_ONE="/usr/bin/qemu-kvm-one"
|
|
|
|
#
|
|
# functions
|
|
#
|
|
|
|
print_usage()
|
|
{
|
|
cat <<EOF
|
|
NAME:
|
|
${CMD} - System agnostic QEMU/KVM symlink generator
|
|
|
|
It will try to find a qemu-kvm binary in the system from a list of known
|
|
paths and if successful - it will create a proper symlink:
|
|
'${QEMU_ONE}'
|
|
|
|
USAGE:
|
|
${CMD} [-f|--force]
|
|
Find the system QEMU binary and create the symlink
|
|
|
|
-f|--force: This option will overwrite existing symlink or file
|
|
|
|
${CMD} -h|--help
|
|
Print this help
|
|
EOF
|
|
}
|
|
|
|
#
|
|
# main
|
|
#
|
|
|
|
FORCE_CREATE=
|
|
case "$1" in
|
|
'')
|
|
:
|
|
;;
|
|
-h|--help)
|
|
print_usage
|
|
exit 0
|
|
;;
|
|
-f|--force)
|
|
FORCE_CREATE=yes
|
|
;;
|
|
*)
|
|
echo "ERROR: ${CMD}: Unknown option '${1}' !" >&2
|
|
print_usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# find cpu arch or default to x86_64
|
|
if command -v arch >/dev/null 2>&1 ; then
|
|
ARCH=$(arch)
|
|
else
|
|
ARCH="x86_64"
|
|
fi
|
|
|
|
# verify that symlink is not already created
|
|
if [ -L "${QEMU_ONE}" ] ; then
|
|
# symlink already exists
|
|
|
|
qemu_target=$(readlink "${QEMU_ONE}")
|
|
|
|
if [ -e "${qemu_target}" ] && [ -z "${FORCE_CREATE}" ] ; then
|
|
# symlink is valid
|
|
exit 0
|
|
fi
|
|
elif [ -e "${QEMU_ONE}" ] ; then
|
|
# there is a file of the same name and it is not a symlink
|
|
|
|
if [ -z "${FORCE_CREATE}" ] ; then
|
|
echo "ERROR: ${CMD}: File '${QEMU_ONE}' already exists but it is not a symlink !" >&2
|
|
exit 1
|
|
else
|
|
# --force is used
|
|
rm -f "${QEMU_ONE}"
|
|
fi
|
|
fi
|
|
|
|
# search the known paths for qemu binary
|
|
#
|
|
# NOTE: you can add new supported paths here in the future
|
|
for QEMU_BIN in \
|
|
/usr/libexec/qemu-kvm \
|
|
/usr/bin/qemu-kvm \
|
|
/usr/bin/qemu-system-${ARCH} \
|
|
;
|
|
do
|
|
if [ -e "${QEMU_BIN}" ] ; then
|
|
ln -s ${FORCE_CREATE:+-f} "${QEMU_BIN}" "${QEMU_ONE}"
|
|
exit 0
|
|
fi
|
|
done
|
|
|
|
# no qemu binary found -> we signal error and exit
|
|
echo "ERROR: ${CMD}: No qemu kvm binary found !" >&2
|
|
exit 1
|
|
|