...
./do_build.sh -s dom0,installer,installer2,ship.
You will notice that uivm will not come up. That is because our blktap binary still works with the old blktap library interface. We can circumvent that particular problem by moving /usr/sbin/tap-ctl to /usr/sbin/tap-ctl.bak and instead, pasting the following wrapper as /usr/sbin/tap-ctl
#!/bin/ash
if echo $@ | grep "create" > /dev/null 2>/dev/null; then
tmp="`echo $@ | sed 's/-R//'`"
/usr/sbin/tap-ctl.bak $tmp
elif echo $@ | grep "destroy" > /dev/null 2>/dev/null; then
MINOR=`echo $@ | sed -e 's/\(^.*\)\(.$\)/\2/'`
PID=$(/usr/sbin/tap-ctl.bak list -m ${MINOR} | grep "pid=" | awk '{print $1}' | sed -r 's/^.{4}//')
/usr/sbin/tap-ctl.bak destroy -p $PID -m $MINOR
else
/usr/sbin/tap-ctl.bak $@
fi
At this point, we need to make modifications to the running OpenXT system to allow XL to operate. In particular, we need to disable flask in /boot/system/grub/grub.cfg. After a reboot, we can proceed to paste the following into /usr/lib/xen/bin/qemu-system-i386:
#!/bin/bash
DOMID=`cat /tmp/domid`
let "NEWID=$DOMID+1"
echo "$NEWID" > /tmp/domid
/usr/bin/qemu-system-i386 -xen-domid $DOMID -nodefaults -name qemu-3.0 -machine xenfv,max-ram-below-4g=0xf0000000 -m 1024 -vga std -display surfman -drive file=/dev/xen/blktap-2/tapdev0,if=ide,index=0,media=disk,format=raw,readonly=off
Make sure that /tmp/domid exists and starts with a "1". A sample config file for a Win7 HVM guest can be:
builder = "hvm"
name = "Win7x64"
uuid = "8d85049a-9bdd-11e2-9e91-18037322eba8"
memory = 1024
vcpus = 1
disk = [ '/dev/xen/blktap-2/tapdev0,raw,xvda,rw' ]
vnc = 1
videoram = 16
Note that the disk has to be a tap device since our QEMU does not understand VHDs. XL should now be able to create a domain and at least start the guest.
TODO: QEMU mess and sv-interposer and qemu-dm-wrapper ... what is REALLY necessary?