a simple vm launcher

This commit is contained in:
primardj 2024-01-13 16:50:37 +00:00
parent 77f7c60f78
commit ba9eed114a

165
vm-start.sh Executable file
View file

@ -0,0 +1,165 @@
#!/bin/bash
#
#RESULT_POSSIBLE=("init","start","start-backup","create","backup","restore")
VERSION=0.5
MAIN_LOCATION="$HOME/virtual-machine/"
INIT() {
echo "INIT for vm $1"
NAME=$1
echo "How many proccessor will you use ? "
read NPROC
echo "How much memory will you need ? "
read MEMORY
echo "Do you want to forward ssh port (y/n) "
read entry
if [[ $entry =~ ^[yY]$ ]]
then
FORWARD=",hostfwd=tcp::10022-:22" # forward VM 22 port to Host 10022
else
FORWARD=""
fi
mkdir -p conf
echo "
NAME=\"$NAME\"
VMHOSTNAME=\"\$NAME-vm\"
NPROC=$NPROC
MEMORY=\"$MEMORY\"
FORWARD=\"$FORWARD\"
LOCATION=\"\$NAME-sandbox/\"
" > conf/$NAME-vm_var.sh
chmod +x conf/$NAME-vm_var.sh
}
START() {
qemu-system-x86_64 \
-enable-kvm \
-cpu host \
-smp $NPROC \
-net nic \
-net user$FORWARD,hostname=$VMHOSTNAME \
-m $MEMORY \
-drive file=${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow \
-daemonize
sleep 5
ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" primardj@localhost -p 10022
}
START-BACKUP() {
qemu-system-x86_64 \
-enable-kvm \
-cpu host \
-smp $NPROC \
-net nic \
-net user$FORWARD,hostname=$VMHOSTNAME \
-m $MEMORY \
-drive file=${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow.backup \
-daemonize
sleep 5
#ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" primardj@localhost -p 10022
}
CREATE() {
if [[ ! -f ${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow ]]
then
echo "ceate directory ${MAIN_LOCATION}${LOCATION}"
mkdir -p ${MAIN_LOCATION}${LOCATION}
qemu-img create -f qcow2 ${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow 40G
fi
qemu-system-x86_64 \
-enable-kvm \
-cpu host \
-smp $NPROC \
-net nic \
-net user$FORWARD,hostname=$VMHOSTNAME \
-m $MEMORY \
-drive file=${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow \
-boot d \
-drive file="$1",media=cdrom
}
RESTORE() {
echo "Are you sure you want to restore the rescue? (y/N)"
read entry
if [[ $entry =~ ^[yY]$ ]]
then
cp ${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow.backup ${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow
echo "Done"
fi
}
BACKUP() {
echo "Are you sure you want to backup the volume? If you continue the previous backup will be lost (y/N)"
read entry
if [[ $entry =~ ^[yY]$ ]]
then
cp ${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow ${MAIN_LOCATION}${LOCATION}${VMHOSTNAME}.cow.backup
echo "Done"
fi
}
if [ $# -lt 2 ]
then
echo "Error, not enough args"
exit 1
fi
cd "$( dirname "$( readlink -f "$0" )" )"
if [[ ! -f conf/$1-vm_var.sh ]]
then
INIT $1
fi
source conf/$1-vm_var.sh
if [ "$2" == "start" ]
then
echo "starting VM $1"
START
elif [ "$2" == "start-backup" ]
then
echo "starting VM rescue"
START-BACKUP
elif [ "$2" == "backup" ]
then
echo "backup VM"
BACKUP
elif [ "$2" == "restore" ]
then
echo "restore VM"
RESTORE
elif [ "$2" == "create" ]
then
echo "creating VM"
if [[ $# == 3 ]]
then
echo "using image disk $3"
CREATE $3
else
echo "Error, no image defined."
fi
elif [[ "$2" == "version" ]]
then
echo "script lancement vm version v.$VERSION"
else
echo "commande $2 inconnue"
fi