[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Libguestfs] [PATCH] virt-v2v: Support for Converting VirtualBox Guests



Hi,

attached is an updated [1] patch for virt-v2v to support converting VirtualBox guests with VirtualBox Guest Additions [2] installed. With the patch applied a VirtualBox RHEL 6 guest with Guest Additions can be converted with the steps documented in the manual page.

I've tested this patch on a RHEL 6.2 host running VirtualBox 4.1.8 using a RHEL 6.2 guest, the guest works as expected on libvirt/KVM and all traces of Guest Additions except for few log files were removed. This version uses VirtualBox Guest Additions configuration file to locate the script to uninstall [3].

If it would be possible to skip some of the needed steps and support VirtualBox directly from the command line that'd be great - if so, please adjust the patch as needed.

1) https://www.redhat.com/archives/virt-tools-list/2012-February/msg00064.html
2) http://www.virtualbox.org/manual/ch04.html
3) http://www.virtualbox.org/manual/ch04.html#idp11370256

Cheers,

--
Marko Myllynen
>From 543d23c76b2ab68eaf2776b7d4cd007a8d29ae93 Mon Sep 17 00:00:00 2001
From: Marko Myllynen <myllynen redhat com>
Date: Mon, 12 Mar 2012 12:45:27 +0200
Subject: [PATCH] virt-v2v: Support for Converting VirtualBox Guests

Add support for converting VirtualBox guests with VirtualBox
Guest Additions installed.

http://www.virtualbox.org/manual/ch04.html
---
 lib/Sys/VirtConvert/Converter/RedHat.pm |   41 +++++++++++++++++++++++++++++++
 v2v/virt-v2v.pl                         |   29 +++++++++++++++++++---
 2 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/lib/Sys/VirtConvert/Converter/RedHat.pm b/lib/Sys/VirtConvert/Converter/RedHat.pm
index 2efce8a..b299b58 100644
--- a/lib/Sys/VirtConvert/Converter/RedHat.pm
+++ b/lib/Sys/VirtConvert/Converter/RedHat.pm
@@ -875,6 +875,7 @@ sub _unconfigure_hv
     my @apps = $g->inspect_list_applications($root);
 
     _unconfigure_xen($g, $desc, \ apps);
+    _unconfigure_vbox($g, $desc, \ apps);
     _unconfigure_vmware($g, $desc, \ apps);
 }
 
@@ -939,6 +940,46 @@ sub _unconfigure_xen
     }
 }
 
+# Unconfigure VirtualBox specific guest modifications
+sub _unconfigure_vbox
+{
+    my ($g, $desc, $apps) = @_;
+
+    # Uninstall VirtualBox Guest Additions
+    foreach my $app (@$apps) {
+        my $name = $app->{app_name};
+
+        if ($name eq "virtualbox-guest-additions") {
+            _remove_application($name, $g);
+        }
+    }
+
+    # VirtualBox Guest Additions may have been installed from tarball, in which
+    # case the above won't detect it. Look for the uninstall tool, and run it
+    # if it's present.
+    #
+    # Note that it's important we do this early in the conversion process, as
+    # this uninstallation script naively overwrites configuration files with
+    # versions it cached prior to installation.
+    my $vboxconfig = '/var/lib/VBoxGuestAdditions/config';
+    my $vboxuninstall;
+    foreach (split /\n/, $g->cat($vboxconfig)) {
+        if ($_ =~ /^INSTALL_DIR=(.*$)/) {
+	    $vboxuninstall = $1 . '/uninstall.sh';
+        }
+    }
+    if ($g->exists($vboxuninstall)) {
+        eval { $g->command([$vboxuninstall]) };
+        logmsg WARN, __x('VirtualBox Guest Additions were detected, but '.
+                         'uninstallation failed. The error message was: '.
+                         '{error}', error => $@) if $@;
+
+        # Reload augeas to detect changes made by vbox tools uninstallation
+        eval { $g->aug_load() };
+        augeas_error($g, $@) if $@;
+    }
+}
+
 # Unconfigure VMware specific guest modifications
 sub _unconfigure_vmware
 {
diff --git a/v2v/virt-v2v.pl b/v2v/virt-v2v.pl
index 8961ff9..2e28722 100755
--- a/v2v/virt-v2v.pl
+++ b/v2v/virt-v2v.pl
@@ -54,10 +54,11 @@ virt-v2v - Convert a guest to use KVM
 
 =head1 DESCRIPTION
 
-virt-v2v converts guests from a foreign hypervisor to run on KVM, managed by
-libvirt or Red Hat Enterprise Virtualisation (RHEV) version 2.2 or later. It can
-currently convert Red Hat Enterprise Linux and Windows guests running on Xen and
-VMware ESX. It will enable VirtIO drivers in the converted guest if possible.
+virt-v2v converts guests from a foreign hypervisor to run on KVM, managed by 
+libvirt or Red Hat Enterprise Virtualisation (RHEV) version 2.2 or later. It 
+can currently convert Red Hat Enterprise Linux and Windows guests running on 
+Xen, VirtualBox, and VMware ESX. It will enable VirtIO drivers in the 
+converted guest if possible.
 
 =head1 OPTIONS
 
@@ -776,6 +777,26 @@ This will require a reboot if the host running Xen is the same host that will
 run KVM. This is because libvirt needs to connect to a running xen hypervisor to
 obtain its metadata.
 
+=head2 Local VirtualBox guests
+
+The following is required when converting guests which used to run VirtualBox 
+and are being converted to KVM. The conversion needs a guest XML definition 
+file which needs to be adjusted for the guest to be converted (at least name, 
+uuid, image path, image type, and MAC address):
+
+ qemu-img convert -O qcow2 /tmp/v-rhel.vdi /var/lib/libvirt/images/v-rhel.img
+ virsh --connect qemu:///system pool-refresh default
+ virt-cat /var/lib/libvirt/images/v-rhel.img \
+  /etc/sysconfig/network-scripts/ifcfg-eth0 | grep ^HWADDR
+ # Replace the MAC address in the guest XML definition file or adjust 
+ # ifcfg-eth0 after booting up the guest to match the MAC address defined in 
+ # XML file
+ virt-v2v -i libvirtxml -os default /tmp/v-rhel.xml
+
+B<N.B.> For the time being when converting VirtualBox Windows guests the
+VirtualBox Guest Additions need to be manually uninstalled on the guest
+when still running on VirtualBox.
+
 =head2 Converting to run on libvirt/KVM
 
 =head3 Create a local storage pool for transferred storage
-- 
1.7.1


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]