diff options
Diffstat (limited to 'vm.sh')
| -rwxr-xr-x | vm.sh | 159 |
1 files changed, 93 insertions, 66 deletions
@@ -23,9 +23,9 @@ declare -A HDA=( [$X64]="debian-13-nocloud-amd64.qcow2" [$A64]="debian-13-nocloud-arm64.qcow2" ) -declare -A BIOS=( - [$X64]="/usr/share/edk2/ovmf/OVMF_CODE.fd" - [$A64]="/usr/share/edk2/aarch64/QEMU_EFI.fd" +declare -A BIOS_FD=( + [$X64]="OVMF_CODE.fd" + [$A64]="QEMU_EFI.fd" ) declare -A SSH_PORTS=( [$X64]="2222" @@ -74,7 +74,8 @@ vm_setup() { } vm_machine_check() { - if [[ "$1" != "$X64" && "$1" != "$A64" ]] + local MACHINE=$1 + if [[ "$MACHINE" != "$X64" && "$MACHINE" != "$A64" ]] then echo "Usage $SCRIPT $OPTION $X64|$A64" return 1 @@ -83,22 +84,24 @@ vm_machine_check() { } vm_boot() { - local PID_FILE="${PID_FILES[$1]}" + local MACHINE=$1 + local PID_FILE="${PID_FILES[$MACHINE]}" if [[ -f "$PID_FILE" ]] then - echo "VM $1 is running" + echo "VM $MACHINE is running" return 1 fi + local BIOS=$(locate "${BIOS_FD[$MACHINE]}" | grep "edk2" | head -n 1) local CMD=( - "${QEMU[$1]}" - "-M" "${MACHINES[$1]}" + "${QEMU[$MACHINE]}" + "-M" "${MACHINES[$MACHINE]}" "-cpu" "max" "-m" "$MEMORY" "-smp" "$CORES" "-device" "$DEVICE" - "-netdev" "user,id=net0,hostfwd=tcp::${SSH_PORTS[$1]}-:22" - "-bios" "${BIOS[$1]}" - "-hda" "${HDA[$1]}" + "-netdev" "user,id=net0,hostfwd=tcp::${SSH_PORTS[$MACHINE]}-:22" + "-bios" "$BIOS" + "-hda" "${HDA[$MACHINE]}" "-pidfile" "$PID_FILE" ) for ARG in "${@:2}" @@ -218,7 +221,7 @@ vm_sync() { vm_test_cmd() { local MACHINE=$1 - vm_cmd $MACHINE "make kpl_test; ./kpl_test -a" + vm_cmd $MACHINE "make kpl_test; arch; ./kpl_test -a" } vm_test() { @@ -248,34 +251,53 @@ vm_test() { } vm_stop() { - local ACTION="$1" vm_dir_check - if [[ "$ACTION" != "KILL" ]] - then - vm_ssh_add - fi + vm_ssh_add for MACHINE in "${NAMES[@]}" do local PID_FILE="${PID_FILES[$MACHINE]}" if [[ -f "$PID_FILE" ]] then - if [[ "$ACTION" == "KILL" ]] - then - kill $(cat $PID_FILE) - echo "VM $MACHINE force stop" - else - vm_cmd $MACHINE "sudo poweroff" - echo "VM $MACHINE powering off" - fi + vm_cmd $MACHINE "sudo poweroff" + echo "VM $MACHINE powering off" fi done } +vm_kill() { + vm_dir_check + for MACHINE in "${NAMES[@]}" + do + local PID_FILE="${PID_FILES[$MACHINE]}" + if [[ -f "$PID_FILE" ]] + then + kill $(cat $PID_FILE) + echo "VM $MACHINE force stop" + fi + done +} + +vm_clean_cmd() { + local MACHINE=$1 + vm_machine_check $MACHINE + if [[ $? != 0 ]] + then + echo "Invalid Machine Specified" + return 1 + fi + vm_cmd $MACHINE "make clean; find -type f -regex '^.*\.[ch]' -exec rm -v {} \;" +} + vm_clean() { vm_ssh_add + if [[ "$ARG_COUNT" == 2 ]] + then + vm_clean_cmd $VM + return + fi for MACHINE in "${NAMES[@]}" do - vm_cmd $MACHINE "make clean; find -type f -regex '^.*\.[ch]' -exec rm -v {} \;" + vm_clean_cmd $MACHINE done } @@ -292,52 +314,57 @@ vm_destroy() { return fi echo - vm_stop "KILL" + vm_kill cd .. rm -rf $DIR echo -e "Removed $DIR directory" } +declare -A COMMANDS=( + ["-init"]="vm_init" + ["-setup"]="vm_setup" + ["-cli"]="vm_cli" + ["-start"]="vm_start" + ["-ssh"]="vm_ssh" + ["-sync"]="vm_sync" + ["-test"]="vm_test" + ["-clean"]="vm_clean" + ["-stop"]="vm_stop" + ["-kill"]="vm_kill" + ["-destroy"]="vm_destroy" + ["-help"]="vm_help" +) + vm_help() { + local LENGTH="${#COMMANDS[@]}" + local I=0 echo "See TESTING" - echo "Usage $SCRIPT -init|-setup|-cli|-start|-ssh|-sync|-test|-stop|-kill|-clean|-destroy|-help" + echo -n "Usage $SCRIPT [" + for CMD in "${!COMMANDS[@]}" + do + echo -n "$CMD" + if (( I + 1 < LENGTH )) + then + echo -n "|" + else + echo "]" + fi + ((I++)) + done + return 2 +} + +vm_main() { + for CMD in "${!COMMANDS[@]}" + do + if [[ "$OPTION" == "$CMD" ]] + then + "${COMMANDS[$CMD]}" + return + fi + done + echo -n "Invalid [OPTION], " + vm_help } -case $OPTION in - -init) - vm_init - ;; - -setup) - vm_setup - ;; - -cli) - vm_cli - ;; - -start) - vm_start - ;; - -ssh) - vm_ssh - ;; - -sync) - vm_sync - ;; - -test) - vm_test - ;; - -stop) - vm_stop - ;; - -kill) - vm_stop "KILL" - ;; - -clean) - vm_clean - ;; - -destroy) - vm_destroy - ;; - *) - vm_help - ;; -esac +vm_main |
