a simple vm launcher
This commit is contained in:
parent
77f7c60f78
commit
ba9eed114a
1 changed files with 165 additions and 0 deletions
165
vm-start.sh
Executable file
165
vm-start.sh
Executable 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
|
||||||
|
|
Loading…
Reference in a new issue