Quantcast
Channel: Adam Young's Web Log
Viewing all articles
Browse latest Browse all 516

Running Qemu/KVM without libvirt

$
0
0

When I booted a VM yesterda, I noticed that there was a huge command line that showed up if I ran ps. I tried to run that by hand.  It is huge, so I wrapped it with a script, but the command is not too bad to understand:  everything that qemu needs to do needs to be passed in on the command line.

Complete command line is at the end of the article.
I first put SELinux into permissive mode, as it will not allow my user to create a VM.

I needed to adjust three values.

  1. First, the VM opens a domain socket, used for monitoring the VM. The path that this points to is in /var/lib/libvirt/qemu/ which my user does not have access to. I changed this to /home/ayoung/devel/qemu.
  2. The image is read out of /home/ayoung/devel/qemu which my user does not have access to. I copied it to /home/ayoung/devel/qemu and changed ownership. I also changed the path used in the call.
  3. How to connect to the network interface.  when libvirt kicks is off, it uses an fd argument, which indicates it should reuse an open file descriptor. Since that is a process specific value, we can’t use that, but need to link the VM up to a network some other way. I’m still fiddling with this.

The xml file that has that defined is in

/etc/libvirt/qemu/generic.xml.

The network is called default.  It is defined in

/var/lib/libvirt/dnsmasq/default.conf

And that maps to :

interface=virbr0

I first tried using

tap,id=hostnet0,ifname=tap0

but that seems to try to connect to

/dev/net/tun

which is not allowed. So instead I tried changing to a bridge device:

bridge,id=hostnet0,br=virbr0

If I run with that up, I see that ip addr reports:

12: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN group default qlen 1000
    link/ether fe:2f:d3:35:da:91 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc2f:d3ff:fe35:da91/64 scope link 
       valid_lft forever preferred_lft forever

And that goes way if I kill the VM.

Once it is up I try to use netcat to talk to to the VM (thanks Kashyap)

$ nc -U monitor.sock
{"QMP": {"version": {"qemu": {"micro": 1, "minor": 6, "major": 2}, "package": " (qemu-2.6.1-1.fc24)"}, "capabilities": []}}

So the VM process is reporting status.

I can attach using SPICE:

remote-viewer spice://127.0.0.1:5900

but nothing shows. However, if the VM is not running, it just fails. So, I know this is working, but I still need a way to communicate with the VM.

Here is what I am using to run the VM.

#!/bin/sh

#VARPATH=/var/lib/libvirt/qemu/domain-2-generic
VARPATH=/home/ayoung/devel/qemu
#IMAGEPATH=/var/lib/libvirt/images
IMAGEPATH=/home/ayoung/devel/qemu
#NETDEV_PARAMS=tap,fd=29,id=hostnet0
NETDEV_PARAMS=bridge,id=hostnet0,br=virbr0

/usr/bin/qemu-system-x86_64 \
    -machine accel=kvm \
    -name generic,debug-threads=on \
    -S \
    -machine pc-i440fx-2.6,accel=kvm,usb=off,vmport=off \
    -cpu Haswell-noTSX \
    -m 1024 \
    -realtime mlock=off \
    -smp 1,sockets=1,cores=1,threads=1 \
    -uuid 6f6f9463-8b7e-401c-910e-d217e00816a1 \
    -no-user-config \
    -nodefaults \
    -chardev socket,id=charmonitor,path=$VARPATH/monitor.sock,server,nowait \
    -mon chardev=charmonitor,id=monitor,mode=control \
    -rtc base=utc,driftfix=slew \
    -global kvm-pit.lost_tick_policy=discard \
    -no-hpet \
    -no-shutdown \
    -global PIIX4_PM.disable_s3=1 \
    -global PIIX4_PM.disable_s4=1 \
    -boot strict=on \
    -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 \
    -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 \
    -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x6.0x1 \
    -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x6.0x2 \
    -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 \
    -drive file=$IMAGEPATH/generic.qcow2,format=qcow2,if=none,id=drive-ide0-0-0 \
    -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
    -netdev $NETDEV_PARAMS \
    -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:4d:04:7d,bus=pci.0,addr=0x3 \
    -chardev pty,id=charserial0 \
    -device isa-serial,chardev=charserial0,id=serial0 \
    -chardev spicevmc,id=charchannel0,name=vdagent \
    -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 \
    -spice port=5900,addr=127.0.0.1,disable-ticketing,image-compression=off,seamless-migration=on \
    -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vram64_size_mb=0,vgamem_mb=16,bus=pci.0,addr=0x2 \
    -device intel-hda,id=sound0,bus=pci.0,addr=0x4 \
    -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
    -chardev spicevmc,id=charredir0,name=usbredir \
    -device usb-redir,chardev=charredir0,id=redir0 \
    -chardev spicevmc,id=charredir1,name=usbredir \
    -device usb-redir,chardev=charredir1,id=redir1 \
    -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 \
    -msg timestamp=on

Viewing all articles
Browse latest Browse all 516

Latest Images

Trending Articles



Latest Images