config/scripts/1.qemu.sh

77 lines
2.4 KiB
Bash
Raw Normal View History

#! /bin/sh
#
# This collection of scripts aims to install a NOVIT cluster easily, with help of QEMU
#
#
# QEMU local bridge name. If you specificy a custom name, you may have to configure qemu bridge helper to allow it
QEMU_BR_NAME=virbr0
#
# QEMU VM default disk size
QEMU_DISK_SIZE=30G
# Allocated CPUs to QEMU VMs
QEMU_VM_CPU=4
# Allocated Memory to QEMU VMs
QEMU_VM_MEM=8096
################
## QEMU functions
#
prereqs_qemu() {
for com in qemu-system-x86_64 truncate docker iptables ; do
command -v $com 1>/dev/null || error Command $com not found, please install it. Aborting...
done
}
setup_network_qemu() {
2023-05-24 18:12:07 +00:00
if ! ip li show $QEMU_BR_NAME ; then
ip li add name $QEMU_BR_NAME type bridge
ip li set $QEMU_BR_NAME up
fi
QEMU_BR_IP=$(extract_var clusters gateway)
QEMU_BR_MASK=$(extract_var clusters netmask)
if [ $(echo $QEMU_BR_IP | wc -w) -gt 1 ]; then
perror "More than one cluster is configured, not compatible with our quick-start setup, exiting"
fi
pinfo "Using detected gateway IP $QEMU_BR_IP for bridge $QEMU_BR_NAME"
2023-05-24 18:12:07 +00:00
if ! ip a show dev $QEMU_BR_NAME | grep $QEMU_BR_IP ; then
ip a add $QEMU_BR_IP/$QEMU_BR_MASK dev $QEMU_BR_NAME
sudo iptables -t nat -I POSTROUTING -j MASQUERADE -s $QEMU_BR_IP/$QEMU_BR_MASK \! -o $QEMU_BR_NAME
sudo iptables -I FORWARD -o $QEMU_BR_NAME -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD -j ACCEPT -i $QEMU_BR_NAME
2023-05-24 18:12:07 +00:00
fi
}
run_qemu() {
id=1
for host in ${!hosts[*]}; do
2023-05-24 18:12:07 +00:00
ip route show |grep "${hosts[$host]} dev $QEMU_BR_NAME" ||\
ip route add ${hosts[$host]} dev $QEMU_BR_NAME
if test -f $ctxdir/data/$host/pid ; then
2023-05-24 18:12:07 +00:00
pinfo "Detected a pid file, killing process in case VM was already started"
kill $(cat $ctxdir/data/$host/pid) && sleep 1
fi
2023-05-24 18:12:07 +00:00
pinfo "Starting host $host with ip ${hosts[$host]}"
qemu-system-x86_64 -enable-kvm -smp $QEMU_VM_CPU -m $QEMU_VM_MEM \
-nic bridge,br=$QEMU_BR_NAME,mac=42:42:42:42:42:0${id} \
-kernel $ctxdir/data/$host/kernel -initrd $ctxdir/data/$host/initrd-v2 -vga qxl \
2023-05-24 18:12:07 +00:00
-drive format=raw,file=$ctxdir/data/$host/disk &
echo $! >$ctxdir/data/$host/pid
((++id))
done
2023-05-24 18:12:07 +00:00
pinfo "$(ls $ctxdir/data/*/pid|wc -w) host(s) have been started"
}
# # # # # # # #
2023-05-24 18:12:07 +00:00
source $(dirname $0)/.common
check_root
prereqs
check_conf
2023-05-24 18:12:07 +00:00
#fresh_start
trap clean SIGINT SIGTERM SIGKILL
declare -A hosts
setup_network_qemu
get_hosts
get_parts
run_qemu
2023-05-24 18:12:07 +00:00
#clean