In some cases (specifically, SUSE grub2 environments) it is possible to
fail to update the block entries in device.map. In turn, this causes an
invalid path to be returned in perl-Bootloader code, which causes the
conversion to fail with the following message:
is_file_opts: is_file: is_file_stub: path must start with a / character
This patch prevents the problem by adding device.map (for /boot/grub and
/boot/grub2) to the list of configurations to remap, then adds a check
to ensure invalid paths are not passed to is_file_opts.
Note - This is for the existing (perl version) of virt-v2v.
---
lib/Sys/VirtConvert/Converter/Linux.pm | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/lib/Sys/VirtConvert/Converter/Linux.pm
b/lib/Sys/VirtConvert/Converter/Linux.pm
index e8463bc..b673120 100644
--- a/lib/Sys/VirtConvert/Converter/Linux.pm
+++ b/lib/Sys/VirtConvert/Converter/Linux.pm
@@ -56,7 +56,10 @@ sub get_initrd
if (defined($initrd)) {
# If the initrd starts with (hdX,X), remove it.
$initrd =~ s/^\(hd.*\)//;
- return $initrd if ($g->is_file_opts($initrd, followsymlinks=>1));
+ # Catch invalid paths by ensuring first character is '/'
+ if ($initrd =~ /^\//) {
+ return $initrd if $g->is_file_opts($initrd, followsymlinks=>1);
+ }
}
}
@@ -2672,13 +2675,13 @@ sub _remap_block_devices
# Add standard configuration files to the checklist
push (@checklist, '/files/etc/fstab/*/spec');
+ push (@checklist, '/files/boot/*/device.map/*'.
+ '[label() != "#comment"]');
# Add grub or grub2 files to the checklist
if (defined($grub->{grub_conf})) {
push (@checklist, "/files$grub->{grub_conf}/*/kernel/root");
push (@checklist, "/files$grub->{grub_conf}/*/kernel/resume");
- push (@checklist, '/files/boot/grub/device.map/*'.
- '[label() != "#comment"]');
}
elsif (defined($grub->{cfg})) {
push (@checklist, '/files/etc/sysconfig/grub/GRUB_CMDLINE_LINUX');
--
1.8.4.5