[Libguestfs] [PATCH] virt-v2v: Convert RedHat.pm to Linux.pm - for SUSE support

Matthew Booth mbooth at redhat.com
Tue Oct 8 09:05:17 UTC 2013


On Mon, 2013-10-07 at 10:58 -0600, Mike Latimer wrote:
> On Friday, October 04, 2013 09:38:58 AM Matthew Booth wrote:
> > It's specifically an error if we're attempting to configure virtio, and
> > there's no detected virtio kernel. It shouldn't have been possible to
> > get here in that state, hence it's a programmer error. The code below
> > attempts to install *any* kernel in the case that we aren't configuring
> > virtio.
> 
> Ok. I've added a 'kernel' dependency to the virtio capability for SUSE, and 
> this has resolved the above problem. It did bring up a versioning convention 
> difference between RedHat and SUSE, but I've worked around the problem. (SUSE 
> kernels include a build number that is not seen in the 'Linux kernel' string, 
> or in the name of the kernel. However, this complete version string is 
> required for kernel package installations. I now get this full version in 
> _inspect_linux_kernel, and use it later in a couple of places.)
> 
> Speaking of _inspect_linux_kernel, in my testing (under SUSE),
> $g->file('somefile') does not include the expected 'somefile:' at the beginning 
> of the return string. Because of this, the following code isn't correct:
> 
>   if($filedesc =~ /^$path: Linux kernel .*\bversion\s+(\S+)\b/) {
> 
> This works though:
> 
>   if($filedesc =~ /^Linux kernel .*\bversion\s+(\S+)\b/) {
> 
> The above "Linux kernel" string doesn't match the SUSE version output. 
> However, it's better if I don't modify the pattern to catch both version 
> strings, as the next 'else' case will determine the correct version from the 
> vmlinuz file. As the above pattern change doesn't really effect SUSE, I was 
> hoping you could check the output under RedHat and let me know if you'd like 
> '$path: ' removed from my version.

Feel free to remove ^$path. However, for robustness I ditch the leading
^ from your replacement. The difference will be down to a different
version of file included in the libguestfs appliance on SUSE.

> One other item I was hoping you could doublecheck is in the filtering out of 
> xen/xenU in _install_capability. Shouldn't the xen/xenU portion of the release 
> string actually be '-xen/xenU'? In other words, would the inclusion of the 
> hypen in the following code also be applicable for RedHat?
> 
>                         if (defined($kernel_release) &&
>                             $kernel_release =~ /^(\S+?)(-xen)?(U)?$/)
>                         {
>                             $kernel_release = $1;
>                         }

Yes, RH xen kernels also have the hyphen.

> > You can still make $kernel a list, you just need to ensure it's always a
> > list. The updates to the other installation methods should be trivial.
> 
> Rather than doing that, I've added the -base kernel as an app dependency for 
> the kernel. (It seems appropriate anyway.) At the end of _install_config, I 
> catch this condition, and install the packages together. This approach 
> shouldn't impact any non-SUSE environments.

_install_config should already install all dependencies in a single
transaction for exactly this reason. If it doesn't, we should fix that.
I take it zypper just does the right thing?

> > This is because there are 2 names here: the 'libvirt' name, which calls
> > ide devices hdX and is independent of the guest OS because it's at the
> > level of the hypervisor, and the name used by the guest os, which may
> > will be different if the guest uses libata.
> > 
> > The only direct information we have about the guest comes from the
> > hypervisor, so the only names we have to start off with are the names
> > the hypervisor uses. Everything else comes from subsequent inspection.
> > If the guest uses something different we need to handle that, hence this
> > whole complicated and fragile dance.
> 
> Agreed, but I still think there could be environments where hdX devices exist 
> (from the guest perspective) in a libata environment. If that ever is the 
> case, I think any such devices should be included in the rename map.
> 
> I've set all SUSE environments to $libata=0 for now, but I'm still doing 
> research to see if there is ever a condition where we want $prefix set to 'sd' 
> (which would mean that setting will need to be changed).

I'm not convinced. Either IDE devices will be presented as scsi devices
(default libata), or they won't (non-libata, or udev rewriting to
maintain the legacy behaviour). I'd be surprised to find a configuration
where some IDE devices become SCSI devices, but others don't.

Matt




More information about the Libguestfs mailing list