Matthew Booth
2010-Jun-30 10:55 UTC
[Libguestfs] [PATCH 1/2] Add new augeas directory with grub device.map lens
Add a directory to contain required augeas lenses which aren't yet upstream. Include a new lens for grub's device.map. --- augeas/README.txt | 4 ++++ augeas/device_map.aug | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 0 deletions(-) create mode 100644 augeas/README.txt create mode 100644 augeas/device_map.aug diff --git a/augeas/README.txt b/augeas/README.txt new file mode 100644 index 0000000..709be7c --- /dev/null +++ b/augeas/README.txt @@ -0,0 +1,4 @@ +This directory contains augeas lenses required by virt-v2v. + +device_map.aug posted upstream: +http://www.redhat.com/archives/augeas-devel/2010-June/msg00027.html diff --git a/augeas/device_map.aug b/augeas/device_map.aug new file mode 100644 index 0000000..090edd5 --- /dev/null +++ b/augeas/device_map.aug @@ -0,0 +1,28 @@ +(* Parsing grub's device.map *) + +module Device_map + autoload xfm + + let sep_tab = Sep.tab + let eol = Util.eol + let fspath = Rx.fspath + let del_str = Util.del_str + + let comment = Util.comment + let empty = Util.empty + + let dev_name = /(h|f|c)d[0-9]+(,[0-9a-zA-Z]+){0,2}/ + let dev_hex = /0x[0-9a-fA-F]+/ + let dev_dec = /[0-9]+/ + + let device = del_str "(" . key ( dev_name | dev_hex | dev_dec ) . del_str ")" + + let map = [ device . sep_tab . store fspath . eol ] + + let lns = ( empty | comment | map ) * + + let xfm = transform lns (incl "/boot/grub/device.map") + +(* Local Variables: *) +(* mode: caml *) +(* End: *) -- 1.7.1
This patch updates device paths in grub's device.map. Fixes RHBZ#609448 --- lib/Sys/VirtV2V/GuestOS/RedHat.pm | 43 ++++++++++++++++++++++++++++++++---- 1 files changed, 38 insertions(+), 5 deletions(-) diff --git a/lib/Sys/VirtV2V/GuestOS/RedHat.pm b/lib/Sys/VirtV2V/GuestOS/RedHat.pm index f881612..8898576 100644 --- a/lib/Sys/VirtV2V/GuestOS/RedHat.pm +++ b/lib/Sys/VirtV2V/GuestOS/RedHat.pm @@ -1540,13 +1540,29 @@ sub remap_block_devices # that all Fedora distributions in use use libata. if ($libata) { - # Look for IDE and SCSI devices in fstab for the guest + # Look for IDE and SCSI devices in guest config files my %guestif; eval { + my @guestdevs; + foreach my $spec ($g->aug_match('/files/etc/fstab/*/spec')) { my $device = $g->aug_get($spec); - next unless($device =~ m{^/dev/(sd|hd)([a-z]+)}); + push(@guestdevs, $device); + } + + foreach my $key ($g->aug_match('/files/boot/grub/device.map/*')) { + $key =~ m{/files/boot/grub/device.map/(.*)} or die; + my $gdev = $1; + + next if ($gdev =~ /^#comment/); + + my $odev = $g->aug_get($key); + push(@guestdevs, $odev); + } + + foreach my $dev (@guestdevs) { + next unless($dev =~ m{^/dev/(sd|hd)([a-z]+)}); $guestif{$1} ||= {}; $guestif{$1}->{$1.$2} = 1; } @@ -1554,8 +1570,8 @@ sub remap_block_devices $self->_augeas_error($@) if ($@); - # If fstab contains references to sdX, these could refer to IDE or SCSI - # devices. We may need to update them. + # If guest config contains references to sdX, these could refer to IDE + # or SCSI devices. We may need to update them. if (exists($guestif{sd})) { # Look for IDE and SCSI devices from the domain definition my %domainif; @@ -1613,7 +1629,7 @@ sub remap_block_devices } eval { - # Go through fstab again, updating bare device references + # Update bare device references in fstab foreach my $spec ($g->aug_match('/files/etc/fstab/*/spec')) { my $device = $g->aug_get($spec); @@ -1625,6 +1641,23 @@ sub remap_block_devices $g->aug_set($spec, "/dev/".$map{$name}.$part); } + # Update device.map + foreach my $key ($g->aug_match('/files/boot/grub/device.map/*')) { + $key =~ m{/files/boot/grub/device.map/(.*)} or die; + my $gdev = $1; + + next if ($gdev =~ /^#comment/); + + my $odev = $g->aug_get($key); + + next unless($odev =~ m{^/dev/([a-z]+)(\d*)}); + my $name = $1; + my $part = $2; + + next unless(exists($map{$name})); + + $g->aug_set($key, "/dev/".$map{$name}.$part); + } $g->aug_save(); }; -- 1.7.1
Richard W.M. Jones
2010-Jul-02 17:11 UTC
[Libguestfs] [PATCH 1/2] Add new augeas directory with grub device.map lens
On Wed, Jun 30, 2010 at 11:55:50AM +0100, Matthew Booth wrote:> Add a directory to contain required augeas lenses which aren't yet upstream. > Include a new lens for grub's device.map.And these are not upstream why? I think we should just push these upstream fast as possible, and push them into the Fedora augeas package as patches as we need them. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones New in Fedora 11: Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 70 libraries supprt'd http://fedoraproject.org/wiki/MinGW http://www.annexia.org/fedora_mingw
Richard W.M. Jones
2010-Jul-02 17:13 UTC
[Libguestfs] [PATCH 2/2] Update grub's device.map
On Wed, Jun 30, 2010 at 11:55:51AM +0100, Matthew Booth wrote:> + foreach my $key ($g->aug_match('/files/boot/grub/device.map/*')) { > + $key =~ m{/files/boot/grub/device.map/(.*)} or die; > + my $gdev = $1; > + > + next if ($gdev =~ /^#comment/);Shouldn't the Augeas lens take care of these? Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones New in Fedora 11: Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 70 libraries supprt'd http://fedoraproject.org/wiki/MinGW http://www.annexia.org/fedora_mingw
Reasonably Related Threads
- [PATCH] btrfs-progs: fix 32bit int/pointer cast warnings
- [PATCHv2 RFC] virtio-pci: flexible configuration layout
- [PATCHv2 RFC] virtio-pci: flexible configuration layout
- [PATCHv3 RFC] virtio-pci: flexible configuration layout
- [PATCHv3 RFC] virtio-pci: flexible configuration layout