diff options
Diffstat (limited to 'qinit')
-rwxr-xr-x | qinit | 80 |
1 files changed, 80 insertions, 0 deletions
@@ -0,0 +1,80 @@ +#!/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 +# + +shopt -s nullglob + +### Paths ################################ +#declare config_root=/mnt/levant/nfs/tmp/Florian/qemu +declare config_root=/mnt/data/qemu +declare -r machines=$config_root/machines +declare isoroot=$config_root +declare imgroot=$config_root + +### Defaults ############################# +declare mem="-m 1024" +declare cpus="-cpu host -smp 4" +#declare net="-net vde -net nic,model=virtio" +declare net="-netdev bridge,br=br-qemu,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/"archlinux-*.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=raw") + done + + for drive in "$imgroot/$vm".*.qcow2; do + drives+=("-drive" "file=$drive,if=virtio") + done +fi + +exec qemu-system-x86_64 --machine type=pc,accel=kvm "${opts[@]}" $cpus $mem "${drives[@]}" $net ${usecdrom:+${cdrom[@]}} "$@" + |