#!/usr/bin/bash # # Start a netboot VM connected to macvtap device and fraction of mem/cpus # set -eu menu=(standard "CLI Standard Debian GNU/Linux NFS" standard-ram "CLI Standard Debian GNU/Linux RAM" kde-desktop "KDE Plasma Desktop Debian GNU/Linux NFS" gnome-desktop "Gnome Desktop Debian GNU/Linux NFS") img=$(dialog --clear --backtitle "Virtual Machine Chooser" \ --title "Choose the Virtual Machine to Start" \ --menu "Start VM:" 12 70 6 "${menu[@]}" 2>&1 >/dev/tty) ## If the menu is canceled, $0 stops here because of set -e mac="$(ip link | grep -A1 "vm-macvtap" | \ sed -nE "s%\s+link/ether ([[:xdigit:]:]{17}) .+%\1%p")" if [[ $# -eq 0 ]] ; then mem=$(sed -En "s/^MemTotal:\s+([0-9]+)\s+kB/\1/p" /proc/meminfo) cpu=$(sed -En "0,/^cpu cores/s/^cpu cores\s+:\s+([0-9]+)/\1/p" /proc/cpuinfo) arg=("--memory=$((mem/2048))" "--vcpu=$((cpu/2))") echo Set options: "${arg[@]}" else arg=("$@") fi kernel="http://livebox/d-i/n-live/${img%-ram}/live/vmlinuz" initrd="http://livebox/d-i/n-live/${img%-ram}/live/initrd.img" kargs=(boot=live components splash locales=de_DE.UTF-8 keyboard-layouts=de swap=true live-config.timezone=Europe/Berlin) case "$img" in standard*) arg+=(--autoconsole=text) kargs+=(console=ttyS0) ;;& *-ram) kargs+=("fetch=http://10.190.1.2/d-i/n-live/${img%-ram}/live/filesystem.squashfs") ;; *) kargs+=(netboot=nfs "nfsroot=10.190.1.2:/srv/nfs/debian-live/${img%-ram}") ;; esac type="ethernet,mac=${mac},target.dev=vm-macvtap,xpath1.set=./target/@managed=no" ## FIXME: use passt, needs more settings for correct DNS/gateway # type=user,xpath1.create=./backend,xpath2.set=./backend/@type=passt,xpath3.create=./ip,xpath4.set=./ip/@family=ipv4,xpath5.set=./ip/@address=172.16.1.1,xpath6.set=./ip/@prefix=24,xpath7.create=./portForward,xpath8.set=./portForward/@proto=tcp,xpath9.set=./portForward/range/@start=2001,xpath10.set=./portForward/range/@end=2500,xpath11.set=./portForward/range/@to=1 http_proxy='' XDG_CONFIG_HOME="/tmp/${UID}/.config" \ exec virt-install \ --name "$img" \ --osinfo debiantesting \ --nodisks --import --noreboot --transient \ --controller type=scsi,model=virtio-scsi \ --install kernel="$kernel",initrd="$initrd",kernel_args="${kargs[*]}" \ --network "type=$type" "${arg[@]}" # --filesystem "$HOME",share # mount -t 9p share /mnt