aboutsummaryrefslogtreecommitdiff
path: root/vm.sh
diff options
context:
space:
mode:
authornodist <kevin.comas.git@gmail.com>2026-09-17 12:05:27 -0400
committernodist <kevin.comas.git@gmail.com>2026-09-17 12:05:27 -0400
commit39ed69c0663cab7f6a2d01bcb02cce69c806a08c (patch)
tree08d80656efd407701ad98912505cffef98a67f4e /vm.sh
parent349fe86e9b6e8cdfec43bfaaf7f4691b4f7b1cd9 (diff)
auto qemu testing for kpl_test
Diffstat (limited to 'vm.sh')
-rwxr-xr-xvm.sh113
1 files changed, 100 insertions, 13 deletions
diff --git a/vm.sh b/vm.sh
index e48ba3e..b011402 100755
--- a/vm.sh
+++ b/vm.sh
@@ -7,6 +7,7 @@ ARG_COUNT=$#
DIR="qemu"
USER="user"
HOST="localhost"
+RSYNC_LIST="rsync_list"
CORES="2"
MEMORY="2G"
DEVICE="virtio-net-pci,netdev=net0"
@@ -45,6 +46,7 @@ vm_init() {
mkdir $DIR
echo "DO NOT MODIFY CONTENTS OF THIS DIRECTORY" > "$DIR/README"
fi
+ make rsync_list > "$DIR/$RSYNC_LIST"
cd $DIR
if [[ ! -d "$USER" ]]
then
@@ -68,10 +70,10 @@ vm_setup() {
echo $HEADER
echo " mkdir .ssh; cd .ssh; echo \"$PUB\" > authorized_keys; chmod 600 authorized_keys; cd ~"
echo $HEADER
- echo " sudo apt update; sudo apt upgrade; sudo apt install ssh make gcc gdb; sudo poweroff"
+ echo " sudo apt update; yes | sudo apt upgrade; yes | sudo apt install ssh make gcc gdb rsync; sudo poweroff"
}
-vm_check() {
+vm_machine_check() {
if [[ "$1" != "$X64" && "$1" != "$A64" ]]
then
echo "Usage $SCRIPT $OPTION $X64|$A64"
@@ -107,9 +109,18 @@ vm_boot() {
"${CMD[@]}"
}
-vm_cli() {
+vm_dir_check() {
+ if [[ ! -d "$DIR" ]]
+ then
+ echo "Environment not setup, run: $SCRIPT -init"
+ exit 1
+ fi
cd $DIR
- vm_check $VM
+}
+
+vm_cli() {
+ vm_dir_check
+ vm_machine_check $VM
if [[ $? != 0 ]]
then
return
@@ -118,15 +129,17 @@ vm_cli() {
}
vm_start() {
- cd $DIR
+ vm_dir_check
if [[ $ARG_COUNT == 2 ]]
then
- vm_check $VM
+ vm_machine_check $VM
if [[ $? == 0 ]]
then
vm_boot $VM "-display" "none" "-daemonize"
- return
+ else
+ echo "Invalid Machine Specified"
fi
+ return
fi
for NAME in "${NAMES[@]}"
do
@@ -134,32 +147,105 @@ vm_start() {
done
}
+vm_ssh_options() {
+ local MACHINE=$1
+ local -n OPTIONS=$2
+ OPTIONS=(
+ "ssh"
+ "-o" "UserKnownHostsFile=/dev/null"
+ "-o" "StrictHostKeyChecking=no"
+ "-p" "${SSH_PORTS[$MACHINE]}"
+ )
+}
+
vm_cmd() {
- vm_check $1
+ local MACHINE=$1
+ vm_machine_check $MACHINE
if [[ $? != 0 ]]
then
return
fi
- ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$USER@$HOST" -p "${SSH_PORTS[$1]}" $2
+ local SSH_OPTIONS=()
+ vm_ssh_options $MACHINE SSH_OPTIONS
+ "${SSH_OPTIONS[@]}" "$USER@$HOST" $2
}
vm_ssh() {
- cd $DIR
+ vm_dir_check
ssh-add "$USER/$USER" &> /dev/null
vm_cmd $VM
}
+vm_rsync_machine() {
+ local MACHINE=$1
+ vm_machine_check $MACHINE
+ if [[ $? != 0 ]]
+ then
+ echo "Invalid Machine Specified"
+ return
+ fi
+ local SSH_OPTIONS=()
+ vm_ssh_options $MACHINE SSH_OPTIONS
+ SSH_STRING="${SSH_OPTIONS[@]}"
+ local CMD=(
+ "rsync"
+ "-avz"
+ "-e" "$SSH_STRING"
+ "--include-from=$DIR/$RSYNC_LIST"
+ "--exclude=*"
+ "$PWD/"
+ "$USER@$HOST:/home/$USER"
+ )
+ echo "${CMD[*]}"
+ ssh-add "$DIR/$USER/$USER" &> /dev/null
+ "${CMD[@]}"
+}
+
vm_sync() {
- echo "TODO ${FUNCNAME[0]}"
+ if [[ "$ARG_COUNT" == 2 ]]
+ then
+ vm_rsync_machine $VM
+ return
+ fi
+ for NAME in "${NAMES[@]}"
+ do
+ vm_rsync_machine $NAME
+ done
+}
+
+vm_test_cmd() {
+ local MACHINE=$1
+ vm_cmd $MACHINE "make kpl_test; ./kpl_test -a"
}
vm_test() {
- echo "TODO ${FUNCNAME[0]}"
+ if [[ "$ARG_COUNT" == 2 ]]
+ then
+ vm_rsync_machine $VM
+ vm_test_cmd $VM
+ return
+ fi
+ local -A TEST_STATUS=([$X64]=0 [$A64]=0)
+ for NAME in "${NAMES[@]}"
+ do
+ vm_rsync_machine $NAME
+ vm_test_cmd $NAME
+ TEST_STATUS[$NAME]=$?
+ done
+ for NAME in "${NAMES[@]}"
+ do
+ if [[ ${TEST_STATUS[$NAME]} != 0 ]]
+ then
+ echo "----------------------------"
+ echo " MACHINE $NAME FAILED TESTS"
+ echo "----------------------------"
+ fi
+ done
}
vm_stop() {
local ACTION="$1"
- cd $DIR
+ vm_dir_check
if [[ "$ACTION" != "KILL" ]]
then
ssh-add "$USER/$USER" &> /dev/null
@@ -193,6 +279,7 @@ vm_clean() {
echo
return
fi
+ vm_stop "KILL"
rm -r $DIR
echo -e "\nRemoved $DIR directory"
}