#!/bin/bash # # launcher script for qemu-kvm # # machines are sourced from a file which defines functions, each # specifying options for the particular VM, for example: # # vm_beatbox() { # net+=",mac=de:ad:be:ef:00:01" # cdrom="-cdrom $isoroot/archlinux-2011.05.08-core-x86_64.iso -boot d" # # opts=(-nographic) # drives=( # "-drive file=$imgroot/beatbox.1.qcow2,if=virtio" # "-drive file=$imgroot/beatbox.2.qcow2,if=virtio" # ) # } # # If unspecified: # ${drives[@]}: will match all of "$imgroot/$vm".*.{qcow2,raw} # shopt -s nullglob ### Paths ################################ #declare config_root=/mnt/levant/nfs/tmp/Florian/qemu declare config_root=/mnt/data/qemu declare -r machines=~/.config/qinit-machines declare isoroot=$config_root declare imgroot=$config_root ### Defaults ############################# declare mem="-m 1024" declare cpus="-cpu host -smp 4" declare net="-netdev bridge,br=virbr1,id=mynet0 -device virtio-net,netdev=mynet0" cdrom+=("-boot" "d") #declare cdrom="-cdrom $isoroot/archlinux-2012.11.01-dual.iso -boot d" for iso in "$isoroot/"*.iso; do cdrom+=("-cdrom" "$iso") done ### Launcher ############################# . "$machines" while getopts 'c' flag; do case $flag in c) usecdrom=true ;; esac done shift $(( OPTIND - 1 )) if [[ -z $1 ]]; then printf 'Available VMs:\n' compgen -A function -- vm_ | sed 's/^vm_/ /' exit 0 fi vm=$1; shift if ! type -t vm_$vm >/dev/null; then printf 'unknown VM: %s\n' "$vm" exit 1 fi vm_$vm # default drives if (( ${#drives[*]} == 0 )); then for drive in "$imgroot/$vm".*.raw; do drives+=("-drive" "file=$drive,if=virtio,format=virtio-scsi") done for drive in "$imgroot/$vm".*.qcow2; do drives+=("-drive" "file=$drive,if=virtio") done fi exec qemu-system-x86_64 -monitor stdio --machine type=pc,accel=kvm -boot order=dcn "${opts[@]}" $cpus $mem "${drives[@]}" $net ${usecdrom:+${cdrom[@]}} "$@"