#!/bin/sh

SNAPSHOT_PARTITION=/dev/sdb2
SNAPSHOT_DIR=/SNAPSHOT

BD=`sin 2>/dev/null | grep "SWBD" | cut -d ':' -f 2`

SWBD=SWBD$BD
CURR_DIR=`pwd`

mount_exist=`mount | grep VM | wc -l`
if [ $mount_exist -eq 0 ]; then
	mkdir -p /VM
	mount -t ext4 /dev/sda5 /VM
fi
VM_DIR="/VM"

echo "SNAPSHOT_RESTORE: Firmware Restore from Snapshot Images"
echo "======================================================="

	case $BD in
	# MMVM disk size is 25G
	'2000' | '2001')
		VM_NUM=1
		VM_NAME=MMVM
		VM_IMG_NAME=$VM_NAME.img
		MOUNT_PATH=/$VM_DIR/mnt
		VM_SIZE=63
		VM_SIZE_1=16
		VM_SIZE_2=16
		VM_SIZE_3=1
		VM_SIZE_4=30
		;;

	'4000')
		VM_NUM=1
		VM_NAME=SLXVM$VM_NUM
		VM_IMG_NAME=$VM_NAME.img
		VM_SIZE=37
		VM_SIZE_1=8
		VM_SIZE_2=8
		VM_SIZE_3=1
		VM_SIZE_4=20
		;;
	*)
		$ECHO "$0: Unsupported BD $BD"
		;;
	esac




VM_IMG_PATH="$VM_DIR/$VM_IMG_NAME"
echo "Creating $VM_NAME for $SWBD"

mkdir -p ${VM_DIR}

echo "Create QEMU Image"
# Create QEMU image
qemu-img create -f raw $VM_IMG_PATH ${VM_SIZE}G

# Display image info
qemu-img info $VM_IMG_PATH

# Create partition
echo "Partitioning the image"
VM_PART1_START="2MiB"
VM_PART1_END=${VM_SIZE_1}GiB
VM_PART2_START=$VM_PART1_END
NEXT_SIZE=$((VM_SIZE_1 + VM_SIZE_2))
VM_PART2_END=${NEXT_SIZE}GiB
VM_PART3_START=$VM_PART2_END
NEXT_SIZE=$((NEXT_SIZE + VM_SIZE_3))
VM_PART3_END=${NEXT_SIZE}GiB
VM_PART4_START=$VM_PART3_END
NEXT_SIZE=$((NEXT_SIZE + VM_SIZE_4))
VM_PART4_END=100%

FS=ext4

echo "VM partition with P1($VM_PART1_START - $VM_PART1_END), P2($VM_PART2_START  - $VM_PART2_END), P3($VM_PART3_START - $VM_PART3_END)"
parted -a minimal -s $VM_IMG_PATH mklabel msdos
parted -a minimal -s $VM_IMG_PATH mkpart primary $FS $VM_PART1_START  $VM_PART1_END
parted -a minimal -s $VM_IMG_PATH mkpart primary $FS $VM_PART2_START  $VM_PART2_END
parted -a minimal -s $VM_IMG_PATH mkpart primary $FS $VM_PART3_START  $VM_PART3_END set 3 boot on
parted -a minimal -s $VM_IMG_PATH mkpart primary $FS $VM_PART4_START  $VM_PART4_END
parted -a minimal -s $VM_IMG_PATH unit GiB print

# Create device maps from partition tables
res=`kpartx -av $VM_IMG_PATH`
part_num=`echo $res | cut -d' ' -f 3 | cut -d'p' -f 2`

# Create EXT4 filesystem in all partitions
echo "Creating EXT4 filesystem using /dev/loop$part_num"
mkfs.ext4 -q /dev/mapper/loop${part_num}p1
mkfs.ext4 -q /dev/mapper/loop${part_num}p2
mkfs.ext4 -q /dev/mapper/loop${part_num}p3
mkfs.ext4 -q /dev/mapper/loop${part_num}p4

# Mount partitions
mkdir -p $MOUNT_PATH/part1
mkdir -p $MOUNT_PATH/part2
mkdir -p $MOUNT_PATH/part3
mkdir -p $MOUNT_PATH/part4

# Mount the partitions
mount -t ext4 /dev/mapper/loop${part_num}p1 $MOUNT_PATH/part1
mount -t ext4 /dev/mapper/loop${part_num}p2 $MOUNT_PATH/part2
mount -t ext4 /dev/mapper/loop${part_num}p3 $MOUNT_PATH/part3
mount -t ext4 /dev/mapper/loop${part_num}p4 $MOUNT_PATH/part4

#Tune FS parameters
tune2fs -c 0 -i 0 /dev/mapper/loop${part_num}p1
tune2fs -c 0 -i 0 /dev/mapper/loop${part_num}p2
tune2fs -c 0 -i 0 /dev/mapper/loop${part_num}p3
tune2fs -c 0 -i 0 /dev/mapper/loop${part_num}p4

echo "========================================================================="
echo "Installing GRUB"
# Install grub
grub-install --boot-directory $MOUNT_PATH/part3/ --force /dev/loop${part_num}

# Set partition 1 as the main partition
#echo "set PRT=1" > $MOUNT_PATH/part3/grub/prt


#mount snapshot and copy from it to VM partition
for snap in `mount | cut -d" " -f3 | grep "$SNAPSHOT_DIR"`
do
	umount $SNAPSHOT_DIR
done
mkdir -p $SNAPSHOT_DIR
mount $SNAPSHOT_PARTITION   $SNAPSHOT_DIR

echo "SNAPSHOT_RESTORE: Restoring VM images from snapshot partition"
	 rsync -rlpgoDxt $SNAPSHOT_DIR/VM/ $MOUNT_PATH/part1/
	 rsync -rlpgoDxt $SNAPSHOT_DIR/VM/ $MOUNT_PATH/part2/
	 rsync -rlpgoDxt $SNAPSHOT_DIR/VM/main/ $MOUNT_PATH/part3/
	 # disable this part as of now not taking support backup in snapshot
	 #rsync -rlpgoDxt $SNAPSHOT_DIR/VM/support/ $MOUNT_PATH/part4/



echo "Image $VM_IMG_NAME creation done. Cleaning up..."
cd $CURR_DIR
sleep 1

# Unmount mounted dirs
fuser -k $SNAPSHOT_DIR
fuser -k $MOUNT_PATH/part1
fuser -k $MOUNT_PATH/part2
fuser -k $MOUNT_PATH/part3
fuser -k $MOUNT_PATH/part4
sleep 1

umount $SNAPSHOT_DIR
umount $MOUNT_PATH/part1
umount $MOUNT_PATH/part2
umount $MOUNT_PATH/part3
umount $MOUNT_PATH/part4

# remove device maps from partition tables
kpartx -d $VM_IMG_PATH

echo "***** Created VM $VM_NAME *****"

sleep 1
echo "SNAPSHOT_RESTORE: VM Images Restored."


rm -rf $MOUNT_PATH

if [ -e /fusion/bin/vm_register ]; then
/fusion/bin/vm_register
fi
