from subprocess import Popen, PIPE import getpass from pathlib import Path import argparse def vm_start(nographic=False): home = Path.home() user = getpass.getuser() image_src = "var/lib/debian.qcow2" vm_storage_location = f"/home/arvp/virtual_machines/{user}.qcow2" image_dest = f"{home}/debian.qcow2" initialize = [ "qemu-system-x86_64", "-enable-kvm", "-m", RAM, # ram allocation "-nic", f'user,hostfwd=tcp::{PORT}-:22', #forward port 5555 in host to port 22 in vm "-drive", "file=%s,media=disk,if=virtio" % image_dest, ] if nographic: initialize.append("-nographic") initialize.append("-serial") initialize.append("mon:stdio") else: initialize.append("-vga") initialize.append("virtio") initialize.append("-display") initialize.append("sdl") #copy the base image to a directory with everyones virtual machines. -n should not overwrite any existing vms. #subprocess.run(["cp", "-n", image_src, vm_storage_location]) Popen(initialize) if __name__ == "__main__": parser = argparse.ArgumentParser( description="ARVP Onboarding Virtual Machine Launcher! Don't use --nographic if you are in a tmux session. it might explode :3") parser.add_argument( "-nographic", action="store_true", help="Run QEMU in nographic mode (runs the VM embedded in your terminal instead of opening a new window)",) parser.add_argument("-port", help="Port to forward to the VM for ssh", default=5555) parser.add_argument("-ram", help="Amount of RAM to allocate to the VM", default="4G") args = parser.parse_args() vm_start(nographic=args.nographic)