#!/usr/bin/env sh # # Author: Adrian Erik Hoemann # Date: 9.18.2024 # Debug mode # To enable debug mode remove the comment. # Default: true DEBUG=true # Debug mode check if [$DEBUG -eq true] set +x fi # Arguments OPTION=$1 OS_NAME=$2 # Defining paths ROOT_PATH="$HOME/Machines" ISO_PATH="$ROOT_PATH/$OS_NAME/$OS_NAME.iso" IMG_PATH="$ROOT_PATH/$OS_NAME/$OS_NAME.img" # Sources defualt values . ".env" # Sources virtual machine specific values . "$ROOT_PATH/$OS_NAME/.env" # Defines install image repository. case $OS_NAME in "openbsd") INSTALL_IMG="https://cdn.openbsd.org/pub/OpenBSD/7.5/i386/cd75.iso" ;; "debian") INSTALL_IMG="" ;; *) echo "$OS_NAME is not an option" >&2 exit 1 ;; esac # Functions # Virtual machine removal remove_func function { rm -r $ROOT_PATH/$OS_NAME } # Virtual machine start without a console start_func function { qemu-system-x86_64 -boot c \ -display none \ -drive file=$IMG_PATH,format=raw \ -m $RAM -smp $CPU } # Virtual machine start with a console console_func function { qemu-system-x86_64 -boot c \ -display curses \ -drive file=$IMG_PATH,format=raw \ -m $RAM -smp $CPU } # Options case $OPTION in # Initializes the VM and starts the installer image. "init") mkdir -p "$ROOT_PATH/$OS_NAME" qemu-img create $IMG_PATH $DISK_SIZE if [ ! -f $ISO_PATH ] && [ ! -z $INSTALL_IMG ]; then echo $INSTALL_IMG curl -o $ISO_PATH $INSTALL_IMG elif [ ! -z $INSTALL_IMG ]; then echo "Current INSTALL_IMG for $OS_NAME: $ISO_PATH" else: echo "Install image path is missing" >&2 exit 1 fi qemu-system-x86_64 -boot d \ -display curses \ -drive file=$ISO_PATH,media=cdrom \ -drive file=$IMG_PATH,format=raw \ -m $RAM -smp $CPU ;; "console") console_func ;; "start") start_func ;; "remove") remove_func ;; *) echo "Usage: shemum [init] " echo " init initialize a virtual machine" echo " start start a QEMU virtual machine without console output" echo " console start a QEMU virtual machine with console output" echo " remove remove virtual machine directory and all it's contents" esac