Hello community,

here is the log from the commit of package perl-Bootloader for openSUSE:Factory 
checked in at 2013-08-27 15:09:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Bootloader (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Bootloader.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Bootloader"

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Bootloader/perl-Bootloader.changes  
2013-07-09 20:55:34.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-Bootloader.new/perl-Bootloader.changes     
2013-08-27 15:09:42.000000000 +0200
@@ -1,0 +2,13 @@
+Mon Aug 26 14:29:03 CEST 2013 - [email protected]
+
+- update-bootloader refresh cleanup and introduce reinit
+- better way to know kerenl device of physical drive
+- fix grub2-set-default error during installation
+- remove floppy in device map
+- clean up unused functions and variables
+- use grub2-probe to get device map
+- unify indention
+- require coreutils for %post
+- 0.709
+
+-------------------------------------------------------------------

Old:
----
  grub2-on-powerpc.patch
  perl-Bootloader-0.708.tar.xz

New:
----
  perl-Bootloader-0.709.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Bootloader.spec ++++++
--- /var/tmp/diff_new_pack.0zkrNL/_old  2013-08-27 15:09:43.000000000 +0200
+++ /var/tmp/diff_new_pack.0zkrNL/_new  2013-08-27 15:09:43.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           perl-Bootloader
-Version:        0.708
+Version:        0.709
 Release:        0
 Requires:       coreutils
 Requires:       e2fsprogs
@@ -27,7 +27,6 @@
 License:        GPL-2.0+
 Group:          System/Boot
 Source:         perl-Bootloader-%{version}.tar.xz
-Patch0:         grub2-on-powerpc.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 Conflicts:      multipath-tools < 0.4.8-40.25.1
@@ -47,7 +46,6 @@
 
 %prep
 %setup -q
-%patch0 -p1
 
 %build
 

++++++ perl-Bootloader-0.708.tar.xz -> perl-Bootloader-0.709.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.708/perl-Bootloader.changes 
new/perl-Bootloader-0.709/perl-Bootloader.changes
--- old/perl-Bootloader-0.708/perl-Bootloader.changes   2013-02-25 
16:26:15.000000000 +0100
+++ new/perl-Bootloader-0.709/perl-Bootloader.changes   2013-08-26 
14:35:52.000000000 +0200
@@ -1,4 +1,27 @@
 -------------------------------------------------------------------
+Mon Aug 26 14:29:03 CEST 2013 - [email protected]
+
+- update-bootloader refresh cleanup and introduce reinit
+- better way to know kerenl device of physical drive
+- fix grub2-set-default error during installation
+- remove floppy in device map
+- clean up unused functions and variables
+- use grub2-probe to get device map
+- unify indention
+- require coreutils for %post
+- 0.709
+
+-------------------------------------------------------------------
+Tue Jul  2 08:29:00 UTC 2013 - [email protected]
+
+- Enable grub2 installation on PowerPC 
+
+-------------------------------------------------------------------
+Tue Jul  2 08:18:58 UTC 2013 - [email protected]
+
+- Package grub2 for PowerPC 
+
+-------------------------------------------------------------------
 Mon Feb 25 16:22:22 CET 2013 - [email protected]
 
 - support uefi secureboot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.708/perl-Bootloader.spec.in 
new/perl-Bootloader-0.709/perl-Bootloader.spec.in
--- old/perl-Bootloader-0.708/perl-Bootloader.spec.in   2013-02-25 
16:27:08.000000000 +0100
+++ new/perl-Bootloader-0.709/perl-Bootloader.spec.in   2013-08-26 
14:35:52.000000000 +0200
@@ -58,7 +58,7 @@
 %endif
 %endif
 %ifarch ppc ppc64
-rm -f 
$RPM_BUILD_ROOT/%{perl_vendorlib}/Bootloader/Core/{ZIPL*,LILO*,ELILO*,GRUB*}
+rm -f 
$RPM_BUILD_ROOT/%{perl_vendorlib}/Bootloader/Core/{ZIPL*,LILO*,ELILO*,GRUB.*}
 %if 0%{?suse_version} == 0 || 0%{?suse_version} <= 1130
 sed -i '/ZIPL/D;/ELILO/D;/\/LILO/D;/GRUB/D;' 
$RPM_BUILD_ROOT/%{perl_vendorarch}/auto/Bootloader/.packlist
 %endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.708/src/Core/GRUB2.pm 
new/perl-Bootloader-0.709/src/Core/GRUB2.pm
--- old/perl-Bootloader-0.708/src/Core/GRUB2.pm 2013-02-25 16:24:03.000000000 
+0100
+++ new/perl-Bootloader-0.709/src/Core/GRUB2.pm 2013-08-26 14:35:52.000000000 
+0200
@@ -56,6 +56,94 @@
 
 #module interface
 
+sub GetDeviceMap {
+
+    my $self = shift;
+    my $ret = 0;
+    my %map_byid = ();
+    my %map_kern = ();
+    my @blacklist = ();
+
+    # WARN: It may not report disks without partitions.
+    # TODO: We need a better way to figure out physical drive though
+    # eg, whatever listed by `find /sys/class/block/*/device`
+    GETMAP: foreach (@{$self->{"partitions"}}) {
+
+        my $kern_dev = $_->[1];
+        my $probe = '/usr/sbin/grub2-probe';
+        my $probe_args = "--target=compatibility_hint --device $kern_dev";
+
+        # skip empty drive which is not likely.
+        if ($kern_dev eq "") {
+            $self->warning ("no drive for a partition\n");
+            next GETMAP;
+        }
+
+        # skip blaklisted device
+        foreach (@blacklist) {
+            if ($kern_dev eq $_) {
+                $self->milestone ("blacklisted drive $kern_dev in device map");
+                next GETMAP;
+            }
+        }
+
+        # skip partitions, assume they were ended with digits
+        if ($kern_dev =~ /\d+$/) {
+            $self->milestone ("skip partition $kern_dev in device map");
+            next GETMAP;
+        }
+
+        # skip device that's known to be invalid if installed to
+        my @ignore = ('/dev/sr', '/dev/dm', '/dev/md', '/dev/tmpfs');
+        foreach (@ignore) {
+            if ($kern_dev =~ $_) {
+                $self->milestone ("ignore $kern_dev in device map");
+                next GETMAP;
+            }
+        }
+
+        # try to map kernel device to grub device if not mapped yet
+        if (not exists $map_kern{$kern_dev}) {
+            my $gdev = qx($probe $probe_args 2>&1);
+            if ($? == 0) {
+                chomp $gdev;
+                if ($gdev =~ /^[a-z]{1,2}\d+$/) {
+                    $map_kern{$kern_dev} = $gdev;
+                } else {
+                    $self->milestone ("not a grub device: $gdev");
+                }
+            } else {
+                # blacklist the device if grub2-probe fails on them
+                # to save some unnecessary cpu cycles
+                $self->milestone ("run $probe $probe_args failed with 
$gdev\n");
+                $self->milestone ("blacklist $kern_dev\n");
+                push @blacklist, $kern_dev;
+            }
+        }
+    }
+
+    while ((my $udev_dev, my $kern_dev) = each %{$self->{"udevmap"}}) {
+        # map by-id device to grub device
+        if ($udev_dev =~ /\/by-id\// and exists $map_kern{$kern_dev}) {
+            $map_byid{$udev_dev} = $map_kern{$kern_dev};
+        }
+    }
+
+    # we prefer by-id device than kernel device
+    if (%map_byid) {
+        $self->{device_map} = \%map_byid;
+    } elsif (%map_kern) {
+        $self->{device_map} = \%map_kern;
+    } else {
+        $self->{device_map} = {};
+        $self->warning ("empty device.map\n");
+    }
+
+    while ((my $unix, my $fw) = each (%{$self->{device_map}})) {
+        $self->milestone ("grub2 device map: $unix <=>  $fw\n");
+    }
+}
+
 sub GetKernelDevice {
     my $self = shift;
     my $orig = shift;
@@ -89,12 +177,12 @@
     my $dev = shift;
 
     unless ($dev) {
-       $self->error("Empty device to translate");
-       return $dev;
+        $self->error("Empty device to translate");
+        return $dev;
     }
     if ($dev !~ /^\(.*\)$/) {
-       $self->warning("Not translating device $dev");
-       return $dev;
+        $self->warning("Not translating device $dev");
+        return $dev;
     }
 
     my $original = $dev;
@@ -103,12 +191,12 @@
     # Check if $dev consists of something like (hd0,1), thus a grub device
     # TODO: warns once detect (hd0,0) as GRUB2 partition is one based
     if ($dev =~ /\(([^,]+),([^,]+)\)/) {
-       $dev = $1;
-    # GRUB2 device partition is now one based (eg, (hd0,1) = /dev/sda1)
-       $partition = $2;
+        $dev = $1;
+        # GRUB2 device partition is now one based (eg, (hd0,1) = /dev/sda1)
+        $partition = $2;
     }
     elsif ($dev =~ /\(([^,]+)\)/) {
-       $dev = $1;
+        $dev = $1;
     }
 
     my $match_found = 0;
@@ -117,10 +205,10 @@
         $self->milestone("device_map: $unix <-> $fw.");
     }
     while ((my $unix, my $fw) = each (%{$self->{"device_map"}})) {
-       if ($dev eq $fw) {
-           $dev = $unix;
-           $match_found = 1;
-       }
+        if ($dev eq $fw) {
+            $dev = $unix;
+            $match_found = 1;
+        }
     }
 
     if ($match_found == 0) {
@@ -134,19 +222,19 @@
 
     if (defined ($partition)) {
         my $finded = undef;
-       foreach my $dev_ref (@{$self->{"partitions"}}) {
-           if ( $dev_ref->[1] eq $dev
+        foreach my $dev_ref (@{$self->{"partitions"}}) {
+            if ( $dev_ref->[1] eq $dev
               && $dev_ref->[2] == $partition) {
-               $dev = $dev_ref->[0];
-               $self->milestone("Translated $original to $dev");
-               $finded = 1;;
-           }
-       }
+                $dev = $dev_ref->[0];
+                $self->milestone("Translated $original to $dev");
+                $finded = 1;;
+            }
+        }
         if (defined $finded){
-          return $dev;
+            return $dev;
         }
         #no partition found so return $dev with partition
-       $self->warning("No partition found for $dev with $partition.");
+        $self->warning("No partition found for $dev with $partition.");
         return $dev.$partition;
     }
 
@@ -155,124 +243,11 @@
     return $dev;
 }
 
-=item
-C<< $grub_dev = Bootloader::Core::GRUB2->UnixDev2GrubDev ($unix_dev); >>
-
-Translates the UNIX device (eg. '/dev/hda1') to GRUB2 device (eg. '(hd0,1)').
-As argument takes the UNIX device, returns the GRUB2 device (both strings).
-
-=cut
-
 # Pattern for grub device specification. Please note that this does not work
 # with BSD labeled disks which use things like "hd0,b"
 # The pattern matches disk or floppy or network or cd
 my $grubdev_pattern = "(?:hd\\d+(?:,\\d+)?|fd\\d+|nd|cd)";
 
-
-# string UnixDev2GrubDev (string unix_dev)
-sub UnixDev2GrubDev {
-    my $self = shift;
-    my $dev = shift;
-    my $g_dev;
-    local $_;
-
-    if ($dev eq "") {
-       $self->error("Empty device to translate");
-       return ""; # return an error
-    }
-
-    # TODO: check whether listed grubdev valid for grub2 ?
-    # Seems to be a grub device already
-    if ($dev =~ /^\(${grubdev_pattern}\)$/) {
-       $self->warning("Not translating device $dev");
-       return $dev;
-    }
-
-    $self->milestone("Translating $dev ...");
-
-    # remove parenthesis to be able to handle entries like "(/dev/sda1)" which
-    # might be there by error
-    $dev =~ s/^\((.*)\)$/$1/;
-
-    # This gives me the devicename, whether $dev is the device or a link!
-    # This works for udev (kernel) devices only, devicemapper doesn't
-    # need to be changed here
-
-    my $original = $dev;
-    my $kernel_dev = $self->GetKernelDevice($dev);
-
-    $self->milestone("kernel device: $kernel_dev");
-
-    my $partition = undef;
-
-    if ($kernel_dev =~ m#/dev/md\d+#) {
-       my @members = @{$self->MD2Members ($kernel_dev) || []};
-       # FIXME! This only works for mirroring (Raid1)
-       $kernel_dev = $self->GetKernelDevice($members[0] || $kernel_dev );
-       $self->milestone("First device of MDRaid: $original -> $kernel_dev");
-    }
-
-    # print all entries of device.map - for debugging
-    if ($self->{device_map}) {
-        $self->milestone("device_map:");
-
-       for (sort keys %{$self->{device_map}}) {
-           $self->milestone("unix device: $_ <==> grub device: 
$self->{device_map}{$_}");
-       }
-    }
-    else {
-       $self->warning("empty device_map");
-    }
-
-    # fetch the underlying device (sda1 --> sda)
-    for (@{$self->{partitions}}) {
-       if ($_->[0] eq $kernel_dev) {
-           $kernel_dev = $_->[1];
-    # grub2 device is one based
-           $partition = $_->[2];
-           $self->milestone("dev base part: $_->[0] $_->[1] $_->[2]");
-           last;
-       }
-    }
-
-    for (sort keys %{$self->{device_map}}) {
-        if ($kernel_dev eq $self->GetKernelDevice($_)) {
-            $g_dev = $self->{device_map}{$_};
-            last;
-        }
-    }
-
-    # TODO: Is the fallback work for grub2 ???
-    # fallback if translation has failed - this is good enough for many cases
-    # FIXME: this is nonsense - we should return an error
-    if (!$g_dev) {
-        $self->warning("Unknown device/partition, using fallback");
-
-        $g_dev = "hd0";
-        $partition = undef;
-
-        if (
-            $original =~ m#^/dev/(?:vx|das|[ehpsvx])d[a-z]{1,2}(\d+)$# ||
-            $original =~ m#^/dev/\S+\-part(\d+)$# ||
-            $original =~ m#^/dev(?:/[^/]+){1,2}p(\d+)$#
-        ) {
-            $partition = $1 - 1;
-            $partition = 0 if $partition < 0;
-        }
-    }
-
-    if (defined $partition) {
-        $g_dev = "($g_dev,$partition)";
-        $self->milestone("Translated UNIX partition -> GRUB2 device: $original 
to $g_dev");
-    }
-    else {
-        $g_dev = "($g_dev)";
-        $self->milestone("Translated UNIX device -> GRUB2 device: $original to 
$g_dev");
-    }
-
-    return $g_dev;
-}
-
 sub GrubCfgSections {
     my ($parent, $cfg, $sect) = @_;
     my @m = $cfg =~ /(submenu|menuentry) \s+ '([^']*)' (.*?) ( \{ (?: [^{}]* | 
(?4))* \} )/sxg;
@@ -330,32 +305,35 @@
 
 sub new
 {
-  my $self = shift;
-  my $ref = shift;
-  my $old = shift;
-
-  my $loader = $self->SUPER::new($ref, $old);
-  bless($loader);
-
-  # Do we support any architecture besides x86?
-  my $target = "i386-pc";
-  $loader->{'target'} = $target;
+    my $self = shift;
+    my $ref = shift;
+    my $old = shift;
+    my $arch = `uname --hardware-platform`;
+    my $target;
+
+    my $loader = $self->SUPER::new($ref, $old);
+    bless($loader);
+
+    # Set target based on architecture (ppc or x86)
+    $target = "i386-pc" if $arch =~ /(i386|x86_64)/;
+    $target = "powerpc-ieee1275" if $arch =~ /(ppc|ppc64)/;
+    $loader->{'target'} = $target;
 
-  $loader->milestone("Created GRUB2 instance for target $target");
+    $loader->milestone("Created GRUB2 instance for target $target");
 
-  return $loader;
+    return $loader;
 }
 
 
 sub IsDisc {
-  my $self = shift;
-  my $disc = shift;
-  my $ret = undef;
-  foreach my $dev (keys %{$self->{"device_map"}}) {
-    if ( $self->GetKernelDevice($disc) eq $self->GetKernelDevice($dev) ){
-      $ret = 1;
+    my $self = shift;
+    my $disc = shift;
+    my $ret = undef;
+    foreach my $dev (keys %{$self->{"device_map"}}) {
+        if ( $self->GetKernelDevice($disc) eq $self->GetKernelDevice($dev) ){
+            $ret = 1;
+        }
     }
-  }
   return $ret;
 }
 
@@ -370,8 +348,7 @@
 # list<string> ListFiles ()
 sub ListFiles {
     my $self = shift;
-    my @ret = ( Bootloader::Path::Grub2_devicemap(),
-                Bootloader::Path::Grub2_installdevice(),
+    my @ret = ( Bootloader::Path::Grub2_installdevice(),
                 Bootloader::Path::Grub2_defaultconf() );
 
     if (-e Bootloader::Path::Grub2_conf()) {
@@ -400,34 +377,12 @@
     my %files = %{+shift};
     my $avoid_reading_device_map = shift;
 
-    #first set the device map - other parsing uses it
-    my @device_map = @{$files{Bootloader::Path::Grub2_devicemap()} || []};
-    $self->milestone("input from device.map :\n'" . join("'\n' ", @device_map) 
. "'");
-    my %devmap = ();
-    foreach my $dm_entry (@device_map)
-    {
-       if ($dm_entry =~ /^\s*\(([^\s#]+)\)\s+(\S+)\s*$/)
-       {
-          #multipath handling, multipath need real device, because multipath
-          # device have broken geometry (bnc #448110)
-          if (defined $self->{"multipath"} && defined 
$self->{"multipath"}->{$self->GetKernelDevice($2)}){
-            $devmap{ $self->{"multipath"}->{$self->GetKernelDevice($2)} } = $1;
-          } else {
-           $devmap{$2} = $1;
-          }
-       }
-    };
-    $self->milestone("avoided_reading device map.") if 
($avoid_reading_device_map );
-    $self->{"device_map"} = \%devmap   if (! $avoid_reading_device_map);
-    $self->milestone("device_map: ".$self->{"device_map"});
-    while ((my $unix, my $fw) = each (%{$self->{"device_map"}})) {
-        $self->milestone("device_map: $unix <-> $fw.");
-    }
+    $self->GetDeviceMap () if (! $avoid_reading_device_map);
 
     # and now proceed with /etc/default/grub
     my @defaultconf = @{$files{Bootloader::Path::Grub2_defaultconf()} || []};
     $self->milestone("input from default conf :\n'" .
-                        join("'\n' ", @defaultconf) . "'");
+                     join("'\n' ", @defaultconf) . "'");
 
     # prefix commented config with '@' instread of '#'
     # this is to new notation for "commented config" and
@@ -470,27 +425,29 @@
         my $mbr_dev =  $self->GrubDev2UnixDev("(hd0)");
 
         foreach my $dev (@devices) {
-           $self->milestone("checking boot device $dev");
+            $self->milestone("checking boot device $dev");
 
-           #Quick fix for activate and generic_mbr regression ..
-           # TODO: Need figure out better handling of them
+            #Quick fix for activate and generic_mbr regression ..
+            # TODO: Need figure out better handling of them
             if ($dev eq "activate") {
                 $glob_ref->{"activate"} = "true";
-               next;
-           }
+                next;
+            }
 
-           if ($dev eq "generic_mbr") {
+            if ($dev eq "generic_mbr") {
                 $glob_ref->{"generic_mbr"} = "true";
-               next;
-           }
+                next;
+            }
 
-           if ($dev =~ /^\(${grubdev_pattern}\)$/) {
-               $dev = $self->GrubDev2UnixDev($dev);
-           }
-
-           if ($dev eq $mbr_dev) {
-               $glob_ref->{"boot_mbr"} = "true";
-               $self->milestone("detected boot_mbr");
+            if ($dev =~ /^\(${grubdev_pattern}\)$/) {
+                $dev = $self->GrubDev2UnixDev($dev);
+            } else {
+                $dev = $self->GetKernelDevice($dev);
+            }
+
+            if ($dev eq $mbr_dev) {
+                $glob_ref->{"boot_mbr"} = "true";
+                $self->milestone("detected boot_mbr");
                 if (defined $self->{"md_arrays"}
                     and ((scalar keys %{$self->{"md_arrays"}}) > 0)){
                     if (defined $glob_ref->{"boot_md_mbr"}
@@ -501,19 +458,19 @@
                     }
                     $self->milestone("detected boot_md_mbr 
".$glob_ref->{"boot_md_mbr"});
                 }
-           }
-           elsif ($dev eq $root_dev) {
-               $glob_ref->{"boot_root"} = "true";
-               $self->milestone("detected boot_root");
-           }
-           elsif ($dev eq $boot_dev) {
-               $glob_ref->{"boot_boot"} = "true";
-               $self->milestone("detected boot_boot");
-           }
-           elsif ($dev eq $extended_dev) {
-               $glob_ref->{"boot_extended"} = "true";
-               $self->milestone("detected boot_extended");
-           }
+            }
+            elsif ($dev eq $root_dev) {
+                $glob_ref->{"boot_root"} = "true";
+                $self->milestone("detected boot_root");
+            }
+            elsif ($dev eq $boot_dev) {
+                $glob_ref->{"boot_boot"} = "true";
+                $self->milestone("detected boot_boot");
+            }
+            elsif ($dev eq $extended_dev) {
+                $glob_ref->{"boot_extended"} = "true";
+                $self->milestone("detected boot_extended");
+            }
             elsif ($self->IsDisc($dev)
                    and defined $self->{"md_arrays"}
                    and ((scalar keys %{$self->{"md_arrays"}}) > 0)){
@@ -524,10 +481,10 @@
                 }
                 $self->milestone("detected boot_md_mbr 
".$glob_ref->{"boot_md_mbr"});
             }
-           else {
-               $glob_ref->{"boot_custom"} = $dev;
-               $self->milestone("set boot_custom");
-           }
+            else {
+                $glob_ref->{"boot_custom"} = $dev;
+                $self->milestone("set boot_custom");
+            }
         }
     }
 
@@ -554,93 +511,95 @@
     my %glob = %{$self->{"global"}};
     my @grub2_installdev = ();
     my %s1_devices = ();
-    # md_discs stores grub discs which should be synchronized (needed for 
correct stage2 location)
-    my $md_discs = {};
 
     {
-       my $dev;
-       my $flag;
+        my $dev;
+        my $flag;
 
-       # boot_custom => "selectdevice:Custom Boot Partition::"
-       $dev = delete($glob{"boot_custom"});
-       $s1_devices{$dev} = 1 if (defined $dev and $dev ne "");
-
-       # boot_mbr    => "bool:Boot from Master Boot Record:false",
-       $flag = delete $glob{"boot_mbr"};
-       if (defined $flag and $flag eq "true") {
-           # if /boot mountpoint exists add($disk(/boot) else add disk(/)
-           # mbr_dev is the first bios device
-           $dev =  $self->GrubDev2UnixDev("(hd0)");
-           $s1_devices{$dev} = 1 if defined $dev;
-       }
-
-       # boot_md_mbr   synchronize mbr of disc in md raid
-  #(it is little tricky as md raid synchronize only partitions)
-       $flag = delete $glob{"boot_md_mbr"};
-       if (defined $flag and $flag ne "") {
+        # boot_custom => "selectdevice:Custom Boot Partition::"
+        $dev = delete($glob{"boot_custom"});
+        $s1_devices{$dev} = 1 if (defined $dev and $dev ne "");
+
+        # boot_mbr    => "bool:Boot from Master Boot Record:false",
+        $flag = delete $glob{"boot_mbr"};
+        if (defined $flag and $flag eq "true") {
+            # if /boot mountpoint exists add($disk(/boot) else add disk(/)
+            # mbr_dev is the first bios device
+            $dev =  $self->GrubDev2UnixDev("(hd0)");
+            $s1_devices{$dev} = 1 if defined $dev;
+        }
+
+        # boot_md_mbr   synchronize mbr of disc in md raid
+        #(it is little tricky as md raid synchronize only partitions)
+        $flag = delete $glob{"boot_md_mbr"};
+        if (defined $flag and $flag ne "") {
             my @discs = split(/,/,$flag);
             chomp @discs;
             foreach my $mbr_disc (@discs){
-             $s1_devices{$mbr_disc} = 1;
-              my $gdev = $self->UnixDev2GrubDev($mbr_disc);
-              $md_discs->{$gdev} = substr($gdev,1,-1);
-                   $self->milestone("md_mbr device: $gdev ");
-            }
-       }
-
-       # boot_root   => "bool:Boot from Root Partition:true",
-       $flag = delete $glob{"boot_root"};
-       if (defined $flag and $flag eq "true") {
-           # add partition(/)
-           ($dev,) = $self->SplitDevPath ("/");
-           $s1_devices{$dev} = 1 if defined $dev;
-       }
-
-       # boot_boot   => "bool:Boot from Boot Partition:true",
-       $flag = delete $glob{"boot_boot"};
-       if (defined $flag and $flag eq "true") {
-           # add partition(/boot)
-           ($dev,) = $self->SplitDevPath ("/boot");
-           $s1_devices{$dev} = 1 if defined $dev;
-       }
-
-       # boot_extended   => "bool:Boot from Extended Partition:true",
-       $flag = delete $glob{"boot_extended"};
-       if (defined $flag and $flag eq "true") {
-           # add partition(extended)
-           $dev = $self->GetExtendedPartition($self->SplitDevPath("/boot"));
-           $s1_devices{$dev} = 1 if defined $dev;
-       }
-
-       # convert any raid1 device entry into multiple member entries
-       foreach my $s1dev (keys %s1_devices)
-       {
-           if ($s1dev =~ m:/dev/md\d+:) {
-               delete $s1_devices{$s1dev};
-               # Please note all non-mirror raids are silently deleted here
-               my @members = @{$self->MD2Members($s1dev) || []};
-               map { $s1_devices{$_} = 1; } @members;
-           }
-       }
-
-       # FIXME: convert all impossible configurations to some viable
-       # fallback:
-       #     boot from primary xfs -> mbr
-       #     boot from extended -> set generic_mbr
-       # other options ???
+                $s1_devices{$mbr_disc} = 1;
+            }
+        }
+
+        # boot_root   => "bool:Boot from Root Partition:true",
+        $flag = delete $glob{"boot_root"};
+        if (defined $flag and $flag eq "true") {
+            # add partition(/)
+            ($dev,) = $self->SplitDevPath ("/");
+            $s1_devices{$dev} = 1 if defined $dev;
+        }
+
+        # boot_boot   => "bool:Boot from Boot Partition:true",
+        $flag = delete $glob{"boot_boot"};
+        if (defined $flag and $flag eq "true") {
+            # add partition(/boot)
+            ($dev,) = $self->SplitDevPath ("/boot");
+            $s1_devices{$dev} = 1 if defined $dev;
+        }
+
+        # boot_extended   => "bool:Boot from Extended Partition:true",
+        $flag = delete $glob{"boot_extended"};
+        if (defined $flag and $flag eq "true") {
+            # add partition(extended)
+            $dev = $self->GetExtendedPartition($self->SplitDevPath("/boot"));
+            $s1_devices{$dev} = 1 if defined $dev;
+        }
+
+        # convert any raid1 device entry into multiple member entries
+        foreach my $s1dev (keys %s1_devices)
+        {
+            if ($s1dev =~ m:/dev/md\d+:) {
+                delete $s1_devices{$s1dev};
+                # Please note all non-mirror raids are silently deleted here
+                my @members = @{$self->MD2Members($s1dev) || []};
+                map { $s1_devices{$_} = 1; } @members;
+            }
+        }
+
+        # FIXME: convert all impossible configurations to some viable
+        # fallback:
+        #     boot from primary xfs -> mbr
+        #     boot from extended -> set generic_mbr
+        # other options ???
     }
 
     $self->milestone("found s1_devices: " . join(",",keys %s1_devices));
 
     if (scalar (keys (%s1_devices)) > 0)
     {
-       foreach my $new_dev (keys (%s1_devices))
-       {
-           $new_dev = $self->UnixDev2GrubDev ($new_dev);
-           if ($new_dev ne "") {
-               push @grub2_installdev, $new_dev;
-           }
-       }
+        foreach my $new_dev (keys (%s1_devices))
+        {
+            while ((my $udev_dev, my $kern_dev) = each %{$self->{"udevmap"}}) {
+                if ($udev_dev =~ /\/by-id\// and $kern_dev eq $new_dev) {
+                    $self->milestone("Translating install device from $new_dev 
to $udev_dev");
+                    $new_dev = $udev_dev;
+                    last;
+                }
+            }
+
+            if ($new_dev ne "") {
+                push @grub2_installdev, $new_dev;
+            }
+        }
     }
 
     my $activate  = delete $glob{"activate"};
@@ -721,13 +680,20 @@
     my @device_map = ();
     while ((my $unix, my $fw) = each (%{$self->{"device_map"}}))
     {
+        # this doesn't matters, as floppy device is specified
+        # by os device now
+        if ($fw =~ m/^fd[0-9]+$/) {
+            $self->milestone ("skip floppy device for writing device.map");
+            next;
+        }
+
         my $line = "($fw)\t$unix";
         push @device_map, $line;
     }
     return {
-       Bootloader::Path::Grub2_installdevice() => $grub2_installdev,
-   Bootloader::Path::Grub2_defaultconf() => $grub2_defaultconf,
-       Bootloader::Path::Grub2_devicemap() => \@device_map,
+        Bootloader::Path::Grub2_installdevice() => $grub2_installdev,
+        Bootloader::Path::Grub2_defaultconf() => $grub2_defaultconf,
+        Bootloader::Path::Grub2_devicemap() => \@device_map,
     }
 }
 
@@ -1131,16 +1097,16 @@
 
     chomp $saved_entry;
     if ($saved_entry eq "") {
-       $saved_entry = "0";
+        $saved_entry = "0";
     }
     if ($saved_entry =~ m/^\d+$/) {
-       my $sect = $sections->[$saved_entry];
+        my $sect = $sections->[$saved_entry];
 
-       if (defined $sect) {
-           $globals->{"default"} = $sect->{"menuentry"};
-       }
+        if (defined $sect) {
+            $globals->{"default"} = $sect->{"menuentry"};
+        }
     } else {
-       $globals->{"default"} = $saved_entry;
+        $globals->{"default"} = $saved_entry;
     }
 
     return $ret;
@@ -1160,15 +1126,6 @@
     my $self = shift;
     my %settings = %{+shift};
 
-    my $default  = delete $settings{"global"}->{"default"};
-
-    if (defined $default and $default ne "") {
-        $self->RunCommand (
-            "/usr/sbin/grub2-set-default '$default'",
-            Bootloader::Path::BootCommandLogname()
-        );
-    }
-
     return $self->SUPER::SetSettings (\%settings);
 }
 
@@ -1186,6 +1143,7 @@
 sub UpdateBootloader {
     my $self = shift;
     my $avoid_init = shift;
+    my %glob = %{$self->{"global"}};
 
     # backup the config file
     # it really did nothing for now
@@ -1197,6 +1155,15 @@
         return $self->InitializeBootloader ();
     }
 
+    my $default  = delete $glob{"default"};
+
+    if (defined $default and $default ne "") {
+        $self->RunCommand (
+            "/usr/sbin/grub2-set-default '$default'",
+            Bootloader::Path::BootCommandLogname()
+        );
+    }
+
     return 0 == $self->RunCommand (
         "/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg",
         Bootloader::Path::BootCommandLogname()
@@ -1259,6 +1226,15 @@
         return 0 if (0 != $ret);
     }
 
+    my $default  = delete $glob{"default"};
+
+    if (defined $default and $default ne "") {
+        $self->RunCommand (
+            "/usr/sbin/grub2-set-default '$default'",
+            Bootloader::Path::BootCommandLogname()
+        );
+    }
+
     return 0 ==  $self->RunCommand (
         "/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg",
         Bootloader::Path::BootCommandLogname()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.708/src/Core/GRUB2EFI.pm 
new/perl-Bootloader-0.709/src/Core/GRUB2EFI.pm
--- old/perl-Bootloader-0.708/src/Core/GRUB2EFI.pm      2013-02-25 
16:24:03.000000000 +0100
+++ new/perl-Bootloader-0.709/src/Core/GRUB2EFI.pm      2013-08-26 
14:35:52.000000000 +0200
@@ -113,26 +113,26 @@
 
 sub new
 {
-  my $self = shift;
-  my $ref = shift;
-  my $old = shift;
-
-  my $loader = $self->SUPER::new($ref, $old);
-  bless($loader);
-
-  my ($sysname, $nodename, $release, $version, $machine) = POSIX::uname();
-  # This exactly mimics grub-install logic and needs to be in sync with it
-  if ($machine =~ /^i.86.*/) {
-    $machine = "i386";
-  } elsif ($machine =~ /^(x86_64|amd64).*/) {
-    $machine = "x86_64";
-  }
-  my $target = "$machine-efi";
-  $loader->{'target'} = $target;
+    my $self = shift;
+    my $ref = shift;
+    my $old = shift;
+
+    my $loader = $self->SUPER::new($ref, $old);
+    bless($loader);
+
+    my ($sysname, $nodename, $release, $version, $machine) = POSIX::uname();
+    # This exactly mimics grub-install logic and needs to be in sync with it
+    if ($machine =~ /^i.86.*/) {
+        $machine = "i386";
+    } elsif ($machine =~ /^(x86_64|amd64).*/) {
+        $machine = "x86_64";
+    }
+    my $target = "$machine-efi";
+    $loader->{'target'} = $target;
 
-  $loader->milestone("Created GRUB2EFI instance for target $target");
+    $loader->milestone("Created GRUB2EFI instance for target $target");
 
-  return $loader;
+    return $loader;
 }
 
 
@@ -715,15 +715,6 @@
     my $self = shift;
     my %settings = %{+shift};
 
-    my $default  = delete $settings{"global"}->{"default"};
-
-    if (defined $default and $default ne "") {
-        $self->RunCommand (
-            "/usr/sbin/grub2-set-default '$default'",
-            Bootloader::Path::BootCommandLogname()
-        );
-    }
-
     return $self->SUPER::SetSettings (\%settings);
 }
 
@@ -742,6 +733,7 @@
 sub UpdateBootloader {
     my $self = shift;
     my $avoid_init = shift;
+    my %glob = %{$self->{"global"}};
 
     # backup the config file
     # it really did nothing for now
@@ -774,6 +766,15 @@
         return 0 if (0 != $ret);
     }
 
+    my $default  = delete $glob{"default"};
+
+    if (defined $default and $default ne "") {
+        $self->RunCommand (
+            "/usr/sbin/grub2-set-default '$default'",
+            Bootloader::Path::BootCommandLogname()
+        );
+    }
+
     return 0 == $self->RunCommand (
         "/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg",
         Bootloader::Path::BootCommandLogname()
@@ -792,6 +793,7 @@
 # boolean InitializeBootloader ()
 sub InitializeBootloader {
     my $self = shift;
+    my %glob = %{$self->{"global"}};
 
     my $ret = $self->RunCommand (
         "/usr/sbin/grub2-install --target=$self->{'target'}",
@@ -820,6 +822,15 @@
         return 0 if (0 != $ret);
     }
 
+    my $default  = delete $glob{"default"};
+
+    if (defined $default and $default ne "") {
+        $self->RunCommand (
+            "/usr/sbin/grub2-set-default '$default'",
+            Bootloader::Path::BootCommandLogname()
+        );
+    }
+
     return 0 == $self->RunCommand (
         "/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg",
         Bootloader::Path::BootCommandLogname()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.708/update-bootloader 
new/perl-Bootloader-0.709/update-bootloader
--- old/perl-Bootloader-0.708/update-bootloader 2013-02-25 16:24:03.000000000 
+0100
+++ new/perl-Bootloader-0.709/update-bootloader 2013-08-26 14:35:52.000000000 
+0200
@@ -32,7 +32,7 @@
 
 update-bootloader [operation] [options]
 
-operation is one of --add, --remove or --refresh.
+operation is one of --add, --remove, --refresh or --reinit.
 
 valid options are --help, --man, --image <file>, --initrd <file>,
 --xen-kernel <file>, --xen, --default, --previous, --name <string>, --force,
@@ -59,7 +59,11 @@
 
 =item B<--refresh>
 
-activate the new config e.g. write boot loader to disk
+activate the new config and write boot loader to disk if necessary
+
+=item B<--reinit>
+
+reinitize the bootloader by refreshing config and reinstalling it
 
 =back
 
@@ -172,6 +176,7 @@
 GetOptions (\%oper,
     'add|a'             ,
     'refresh'    ,
+    'reinit'     ,
     'remove|r'          ,
     'examinembr|e=s', 
     'default|d'  => \$opt_default,
@@ -189,7 +194,7 @@
 pod2usage(1) if $opt_help;
 pod2usage(-exitstatus => 0, -verbose => 2) if $opt_man;
 
-die("Specify exactly one operation, either 'add', 'remove' or 'refresh'\n")
+die("Specify exactly one operation, either 'add', 'remove', 'refresh' or 
'reinit'\n")
     unless scalar keys(%oper) == 1;
 
 die("Option 'default' is only allowed for operation 'add'\n")
@@ -253,15 +258,10 @@
 }
 
 # grub2 handles input options differently here ..
-# when refresh, it will update both installation and config ($avoid_init=0)
-# when add or remove, only update config ($avoid_init=1)
+# when add or remove, only update config ($avoid_init=1) by calling 
grub2-mkconfig
 if (Bootloader::Tools::GetBootloader() =~ /^(grub2|grub2-efi)$/)
 {
-       if (defined $oper{refresh}) {
-           # Always set $avoid_init=0 to guarentee bootloader installed 
(bnc#759224)
-           my $ret = UpdateBootloader(0);
-           exit 1 if ( !$ret );
-       } elsif (defined $oper{add} || defined $oper{remove}) {
+       if (defined $oper{add} || defined $oper{remove}) {
            # The add or remove should trigger config update (bnc#780622)
            # Set $avoid_init=1 to avoid installing bootloader
            my $ret = UpdateBootloader(1);
@@ -271,7 +271,6 @@
        # clear handled option
        delete $oper{add};
        delete $oper{remove};
-       delete $oper{refresh};
 }
 
 # FIXME: these section names should be unified somehow together with multi
@@ -510,8 +509,25 @@
 
 }
 
+# The function refresh will update config and reinstall if necessary
+# Usually used by package when they want bootloader config be written and take 
effect
 if (defined $oper{refresh}) {
-    # Always set $avoid_init=0 to guarentee bootloader installed (bnc#759224)
+    my $loader = Bootloader::Tools::GetBootloader();
+    my $ret;
+
+    if ($loader eq "lilo") {
+        # set avoid_init=0 because lilo requires reinstall for any config 
change
+        $ret = UpdateBootloader(0);
+    } else {
+        # set avoid_init=1 to only update config for the rest (ie grub etc)
+        $ret = UpdateBootloader(1);
+    }
+    exit 1 if ( !$ret );
+}
+
+# The function reinit will reinitialize bootloader by reinstalling and 
updating it's config
+# Usually used when updating bootloader package
+if (defined $oper{reinit}) {
     my $ret = UpdateBootloader(0);
     exit 1 if ( !$ret );
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.708/version 
new/perl-Bootloader-0.709/version
--- old/perl-Bootloader-0.708/version   2013-02-25 16:24:03.000000000 +0100
+++ new/perl-Bootloader-0.709/version   2013-08-26 14:35:52.000000000 +0200
@@ -1 +1 @@
-0.708
+0.709

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to