aboutsummaryrefslogtreecommitdiff
path: root/vm.sh
diff options
context:
space:
mode:
Diffstat (limited to 'vm.sh')
-rwxr-xr-xvm.sh159
1 files changed, 93 insertions, 66 deletions
diff --git a/vm.sh b/vm.sh
index 351886c..a10215a 100755
--- a/vm.sh
+++ b/vm.sh
@@ -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