From b54bcfd68bcb854bf9733359de52f0df76e58713 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Tue, 12 May 2020 10:44:41 -0300 Subject: Fix: more qemu/screen version handling --- kvmx | 54 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 20 deletions(-) (limited to 'kvmx') diff --git a/kvmx b/kvmx index c0895a7..2d6d7a7 100755 --- a/kvmx +++ b/kvmx @@ -456,23 +456,51 @@ function kvmx_up { boot_opts="-boot $boot" fi + # Check kvm version + if kvm --help | grep -q -- "^-balloon"; then + local new_qemu="0" + else + local new_qemu="1" + fi + if [ -z "$net" ] || [ "$net" == "user" ]; then #net_opts="user,hostfwd=tcp:127.0.0.1:$SSH-:22,hostfwd=udp:127.0.0.1:$XDMCP_PORT-:177$hostfwd -net nic,model=$nic_model" net_opts="user,hostfwd=tcp:127.0.0.1:$SSH-:22$hostfwd -net nic,model=$nic_model" elif [ "$net" == "tap" ]; then - # Thanks kvm-manager + # Thanks to kvm-manager tap="${VM}0" # MAC address is derived from a hash of the host's name and the guest's name: mac_address="$(printf "02:%s" "$(printf "%s\0%s" "$(hostname)" "${VM}" | sha256sum | sed 's/\(..\)/\1:/g' | cut -f1-5 -d:)")" bridge="br0" - net_opts="tap,ifname=$tap,script=no,downscript=no,vlan=0,name=hostnet0 -device virtio-net-pci,vlan=0,id=net0,mac=$mac_address,bus=pci.0" + + if [ "$new_qemu" == "0" ]; then + net_opts="tap,ifname=$tap,script=no,downscript=no,vlan=0,name=hostnet0 -device virtio-net-pci,vlan=0,id=net0,mac=$mac_address,bus=pci.0" + else + #net_opts="tap,ifname=$tap,script=no,downscript=no,id=n1 -device virtio-net-pci,netdev=n1,id=net0,mac=$mac_address,bus=pci.0" + net_opts="tap,ifname=$tap,script=no,downscript=no,id=net0 -device virtio-net-pci,netdev=net0,mac=$mac_address,bus=pci.0" + fi fi if [ ! -z "$net_dns" ] && [ "$net_dns" != "host" ]; then net_opts="$net_opts,dns=$net_dns" fi - net_opts="-net $net_opts" + # Check screen version + if screen --help | grep -q -- "-Logfile"; then + local screen_log="-L -Logfile" + else + local screen_log="-L" + fi + + # Additional net and balloon options depending on qemu version + #if kvm --help | grep -q -- "^-balloon"; then + if [ "$new_qemu" == "0" ]; then + local balloon="-balloon virtio" + net_opts="-net $net_opts" + else + local balloon="-device virtio-balloon" + net_opts="-netdev $net_opts" + fi # Always run spice using a socket to provide some GUI isolation between guest # Otherwise any guest could open a spice connection to another guest using the host local IP (10.0.2.2) and the other guest spice port @@ -511,20 +539,6 @@ function kvmx_up { #usb_opts="$usb_opts -chardev spicevmc,name=usbredir,id=usbredirchardev3" #usb_opts="$usb_opts -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3" - # Check screen version - if screen --help | grep -q -- "-Logfile"; then - local screen_log="-L -Logfile $LOGFILE" - else - local screen_log="-L $LOGFILE" - fi - - # Check kvm version - if kvm --help | grep -q -- "^-balloon"; then - local balloon="-balloon virtio" - else - local balloon="-device virtio-balloon" - fi - # Run virtual machine, nohup approach # See https://en.wikipedia.org/wiki/Nohup#Overcoming_hanging #nohup setsid kvm -m $memory -name $VM \ @@ -543,7 +557,7 @@ function kvmx_up { # Run virtual machine, screen approach # This is more immune to hangups - screen $screen_log -S kvmx-qemu-$VM -d -m kvm -m $memory -name $VM \ + screen $screen_log $LOGFILE -S kvmx-qemu-$VM -d -m kvm -m $memory -name $VM \ -chardev "socket,id=monitor,path=$MONITORFILE,server,nowait" -mon chardev=monitor,mode=readline \ -chardev "socket,id=serial0,path=$CONSOLEFILE,server,nowait" -device isa-serial,chardev=serial0 \ -smp $smp -cpu host \ @@ -574,8 +588,8 @@ function kvmx_up { sleep 1 # Thanks kvm-manager code for that portion - /usr/bin/screen -D -m -L $LOG_DIR/servicelog \ - -c $APP_BASE/share/screen/screenrc \ + /usr/bin/screen -D -m $screen_log $LOG_DIR/servicelog \ + -c $APP_BASE/share/screen/screenrc \ -S "kvmx-$VM" -t "kvmx-$VM" socat STDIO,raw,echo=0 "UNIX:${CONSOLEFILE},retry=30" & if [ "$run_spice_client" == "1" ]; then -- cgit v1.2.3