Virtio install Windows 7 KVM (x64/x86) on Fedora 14

Fedora 14 has version of Libvirt 0.8.7 and qemu-0.13.0-1 installed via Rawhide Preview Repo. However, straightforward attempt to virt-install Windows 7 on virtio boot device fails to detect device after viostor.sys gets preloaded. It’s a known bug [1]. Actually, thread at Red Hat Bugzilla – Bug 656353 contains required patch , but doesn’t contain any explanation how to rebuild and reinstall required package python-virtinst-0.500.4-1.fc14.noarch.rpm. Detailed workaround for this issue follows bellow as well as build of new package python-virtinst-0.500.5-1.fc14.noarch.rpm based on recent release virtinst 0.500.5 (Friday January 14, 2011)
Download and install python-virtinst-0.500.4-1.fc14.src.rpm. Apply patch bellow to /root/rpmbuild/SOURCES/virtinst-0.500.4/virtinst/Installer.py per Red Hat Bugzilla – Bug 656353 ( [1] ) and recreate /root/rpmbuild/SOURCES/virtinst-0.500.4.tar.gz. Then
# cd ../SPECS
# rpmbuild -bb ./python-virtinst.spec

--- aaa/virtinst/Installer.py	2010-08-24 00:05:33.000000000 +0400
+++ bbb/virtinst/Installer.py	2011-01-24 23:03:13.142553167 +0300
@@ -236,6 +236,20 @@
     # Private methods
     def _get_bootdev(self, isinstall, guest):
         raise NotImplementedError
+    def _build_boot_order(self, isinstall, guest):
+        bootorder = [self._get_bootdev(isinstall, guest)]
+
+        # If guest has an attached disk, always have 'hd' in the boot
+        # list, so disks are marked as bootable/installable (needed for
+        # windows virtio installs, and booting local disk from PXE)
+        for disk in guest.get_devices("disk"):
+            if disk.device == disk.DEVICE_DISK:
+                bootdev = self.bootconfig.BOOT_DEVICE_HARDDISK
+                if bootdev not in bootorder:
+                    bootorder.append(bootdev)
+                break
+
+        return bootorder
 
     def _get_osblob_helper(self, guest, isinstall, bootconfig):
         def get_param(obj, paramname):
@@ -287,6 +301,8 @@
         @type isinstall: C{bool}
         """
         bootdev = self._get_bootdev(isinstall, guest)
+        bootorder = self._build_boot_order(isinstall, guest)
+
         if isinstall:
             bootconfig = self._install_bootconfig
         else:
@@ -298,7 +314,7 @@
 
         bootconfig = copy.copy(bootconfig)
         if not bootconfig.bootorder:
-            bootconfig.bootorder = [bootdev]
+          bootconfig.bootorder = bootorder
 
         return self._get_osblob_helper(guest, isinstall, bootconfig)

Now reinstall python-virtinst-0.500.4-1.fc14.noarch.rpm
# cd ../RPMS/noarch
# yum reinstall python-virtinst-0.500.4-1.fc14.noarch.rpm
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
Setting up Reinstall Process
Examining python-virtinst-0.500.4-1.fc14.noarch.rpm: python-virtinst-0.500.4-1.fc14.noarch
Resolving Dependencies
–> Running transaction check
—> Package python-virtinst.noarch 0:0.500.4-1.fc14 set to be reinstalled
–> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================
Package Arch Version Repository Size
===================================================================================================================
Reinstalling:
python-virtinst noarch 0.500.4-1.fc14 /python-virtinst-0.500.4-1.fc14.noarch 1.7 M

Transaction Summary
===================================================================================================================
Reinstall 1 Package(s)

Total size: 1.7 M
Installed size: 1.7 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : python-virtinst-0.500.4-1.fc14.noarch 1/1

Installed:
python-virtinst.noarch 0:0.500.4-1.fc14

Complete!

Another option based on virtinst 0.500.5 released on Friday January 14, 2011 :-
# cd ../SOURCES
# wget http://virt-manager.org/download/sources/virtinst/virtinst-0.500.5.tar.gz
# cd ../SPECS
# Update in python-virtinst.spec
Version: 0.500.5
Save
# rpmbuild -ba ./python-virtinst.spec
# cd ../RPMS/noarch
# yum install python-virtinst-0.500.5-1.fc14.noarch.rpm

New version of python-virtinst-0.500.5-1.fc14.src.rpm should be available for download
via https://bugzilla.redhat.com/show_bug.cgi?id=656353
Now run virt-install :-

virt-install --connect qemu:///system --virt-type kvm \
--name W7VIRT64 --ram 4096 --disk path=/dev/vg_virtuals/vm01,bus=virtio \
--disk /usr/tmp/virtio-win-1.1.16.vfd,device=floppy \
--os-variant win7 \
--cdrom /usr/tmp/Win7_64.iso --vcpus 2










References
1.https://bugzilla.redhat.com/show_bug.cgi?id=656353

Leave a comment