#!/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:///system instead of default qemu:///session 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:///session' NEWCLONE=0 while getopts ':ns' OPTION; do case "$OPTION" in n) NEWCLONE=1 ;; s) QEMU='qemu:///system' ;; ?) 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 VM_DIR="/tmp/${UID}/vmimages" if [[ ! -f "/var/lib/libvirt/images/${VM_NAME}.qcow2" && ! -f "${VM_DIR}/${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 ! killall -s 0 squid; 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" 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"