lmn-client/roles/lmn_vm/files/run-vm.sh

87 lines
2.3 KiB
Bash
Executable file

#!/usr/bin/bash
# create and run clone
set -eu
show_help() {
cat << EOF >&2
Usage: $(basename "$0") [-n] vmname"
Create a new clone, start the vm (if not yet running) and run virt-viewer.
Squid-Proxy will be started too.
User Home will be mounted on /media/USERNAME/home
-n new clone will be created, even if exists
-s qemu:///session instead of default qemu:///system
EOF
}
exit_script() {
echo "run-vm.sh ${VM_NAME} terminated by trap!" >> "/tmp/${UID}/exit-run-vm.log"
virsh --connect="${QEMU}" destroy "${VM_NAME}-clone"
trap - SIGHUP SIGINT SIGTERM # clear the trap
kill -- -$$ # Sends SIGTERM to child/sub processes
}
QEMU='qemu:///system'
NEWCLONE=0
while getopts ':ns' OPTION; do
case "$OPTION" in
n)
NEWCLONE=1
;;
s)
QEMU='qemu:///session'
;;
?)
show_help
exit 1
;;
esac
done
shift "$((OPTIND -1))"
# if less than one arguments supplied, display usage
if [[ $# -ne 1 ]] ; then
show_help
exit 1
fi
VM_NAME=$1
if [[ ! -f "/var/lib/libvirt/images/${VM_NAME}.qcow2" ]]; then
echo "no base VM disk '${VM_NAME}.qcow2' found" >&2
exit 1
fi
# check, if we have to start squid
if [[ ! -f "/tmp/squid.pid" ]]; then
echo "starting squid."
/usr/sbin/squid -f /etc/squid/squid-usermode.conf
fi
# check, if we have to mount home
if ! findmnt "/media/${USER}/home"; then
echo "mounting home."
sudo mounthome.sh
fi
export XDG_CONFIG_HOME="/tmp/${UID}/.config"
VM_DIR="/tmp/${UID}/vmimages"
if ! virsh --connect="${QEMU}" list | grep "${VM_NAME}-clone"; then
echo "VM not yet running. Try to clone and start."
if [[ "${NEWCLONE}" = 1 ]] || [[ ! -f "${VM_DIR}/${VM_NAME}-clone.qcow2" ]]; then
create-clone.sh "${VM_NAME}"
fi
# delete the old vm
virsh --connect=qemu:///session undefine "${VM_NAME}-clone" || echo "${VM_NAME}-clone did not exist"
# finally, create the new vm
virsh --connect=qemu:///session define "${VM_DIR}/xml/${VM_NAME}-clone.xml"
trap exit_script SIGHUP SIGINT SIGTERM
[[ "${QEMU}" = 'qemu:///session' ]] && sudo /usr/local/bin/start-virtiofsd.sh "${VM_NAME}"
virsh --connect="${QEMU}" start "${VM_NAME}-clone"
fi
echo "starting viewer"
virt-viewer --connect="${QEMU}" --full-screen "${VM_NAME}-clone"