#!/usr/bin/env sh # # Author: Adrian Erik Hoemann # Date: 9.18.2024 # TODO: Implement operating system installer variable list. # Debug mode # 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 default values . ".env" # Sources virtual machine specific values . "$ROOT_PATH/$OS_NAME/.env" # Functions # Defines install image source def_os_source() { case $OS_NAME in "openbsd") INSTALL_IMG="https://cdn.openbsd.org/pub/OpenBSD/7.5/i386/cd75.iso" ;; "debian") INSTALL_IMG="" ;; *) err_func "INSTALL_IMG for $OS_NAME not found" ;; esac } check_func() { if [ -z $OS_NAME ] err_func "Operating system is empty" fi if [ -z $INSTALL_IMG ] info_func "$INSTALL_IMG is not set" fi } err_func() { printf "$@" >&2 exit 1 } warn_func() { printf "$@" >&2 } info_func() { printf "$@" >&1 } # Virtual machine removal remove_func() { rm -r $ROOT_PATH/$OS_NAME } # Virtual machine start without a console start_func() { 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() { qemu-system-x86_64 -boot c \ -display curses \ -drive file=$IMG_PATH,format=raw \ -m $RAM -smp $CPU } # Virtual machine initialization with a console init_func() { def_os_source mkdir -p "$ROOT_PATH/$OS_NAME" qemu-img create $IMG_PATH $DISK_SIZE if [ ! -f $ISO_PATH ] && [ ! -z $INSTALL_IMG ]; then info_func "Fetching $OSNAME installer at: $INSTALL_IMG" curl -o $ISO_PATH $INSTALL_IMG elif [ ! -z $INSTALL_IMG ]; then info_func "Current INSTALL_IMG for $OS_NAME: $ISO_PATH" else err_func "Install image path is missing" 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 } # Display usage usage_func() { printf "Usage: shemum [init] " printf " init initialize a virtual machine" printf " start start a QEMU virtual machine without console output" printf " console start a QEMU virtual machine with console output" printf " remove remove virtual machine directory and all it's contents" } # Options case $OPTION in "init") init_func ;; "console") console_func ;; "start") start_func ;; "remove") remove_func ;; *) usage_func esac