Hello community, here is the log from the commit of package perl-Bootloader checked in at Wed Sep 24 17:22:31 CEST 2008. -------- --- perl-Bootloader/perl-Bootloader.changes 2008-09-12 14:49:49.000000000 +0200 +++ /mounts/work_src_done/STABLE/perl-Bootloader/perl-Bootloader.changes 2008-09-19 15:56:14.291698000 +0200 @@ -1,0 +2,15 @@ +Fri Sep 19 15:46:10 CEST 2008 - jreidinger@suse.cz + +- doesn't allow change between default and xen kernel during + install (bnc #397075) +- don't resolve user specified symlinks (bnc #410431) +- remove unnecesary spaces in append line (bnc #266223) +- always have default section in ELILO (bnc #250981) +- try mount /sys if doesn't contain files (bnc #151877) +- check if /boot is mounted during kernel update (bnc #340837) +- properly handle setkey option in GRUB (bnc #410004) +- move thinkpad mbr detection to perl-Bootloader from yast + (start moving some functionality from yast to perl-BL) +- 0.4.71 + +------------------------------------------------------------------- Old: ---- perl-Bootloader-0.4.70.tar.bz2 New: ---- perl-Bootloader-0.4.71.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Bootloader.spec ++++++ --- /var/tmp/diff_new_pack.Wt4312/_old 2008-09-24 17:21:54.000000000 +0200 +++ /var/tmp/diff_new_pack.Wt4312/_new 2008-09-24 17:21:54.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package perl-Bootloader (Version 0.4.70) +# spec file for package perl-Bootloader (Version 0.4.71) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -19,7 +19,7 @@ Name: perl-Bootloader -Version: 0.4.70 +Version: 0.4.71 Release: 1 Requires: perl-base = %{perl_version} Requires: e2fsprogs @@ -74,6 +74,18 @@ /usr/lib/bootloader %changelog +* Fri Sep 19 2008 jreidinger@suse.cz +- doesn't allow change between default and xen kernel during + install (bnc #397075) +- don't resolve user specified symlinks (bnc #410431) +- remove unnecesary spaces in append line (bnc #266223) +- always have default section in ELILO (bnc #250981) +- try mount /sys if doesn't contain files (bnc #151877) +- check if /boot is mounted during kernel update (bnc #340837) +- properly handle setkey option in GRUB (bnc #410004) +- move thinkpad mbr detection to perl-Bootloader from yast + (start moving some functionality from yast to perl-BL) +- 0.4.71 * Fri Sep 12 2008 jreidinger@suse.cz - gfxmenu menu is removed from trustedgrub global section - if type of kernel is changed, then correctly transfer default ++++++ bootloader_entry ++++++ --- perl-Bootloader/bootloader_entry 2008-09-12 14:49:49.000000000 +0200 +++ /mounts/work_src_done/STABLE/perl-Bootloader/bootloader_entry 2008-09-19 15:56:14.369611000 +0200 @@ -301,6 +301,11 @@ fi ) >> $logname +if [ `grep -c "^[^[:space:]]+[[:space:]]+/boot" /etc/fstab` -ne `grep -c "^[^[:space:]]+[[:space:]]+/boot" /etc/mtab` ]; then + echo "/boot directory is not mounted"; + exit 1; +fi + # File containing commands for later execution delayed_exec_file="/boot/perl-BL_delayed_exec" ++++++ perl-Bootloader-0.4.70.tar.bz2 -> perl-Bootloader-0.4.71.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-Bootloader-0.4.70/lib/Bootloader/Core/ELILO.pm new/perl-Bootloader-0.4.71/lib/Bootloader/Core/ELILO.pm --- old/perl-Bootloader-0.4.70/lib/Bootloader/Core/ELILO.pm 2008-09-12 13:30:11.000000000 +0200 +++ new/perl-Bootloader-0.4.71/lib/Bootloader/Core/ELILO.pm 2008-09-16 15:55:27.000000000 +0200 @@ -473,6 +473,7 @@ my @lines = @{$globinfo{"__lines"} || []}; my @lines_new = (); my $go = $self->{"exports"}{"global_options"}; + $globinfo{"default"} = $sections[0]->{"name"} unless (defined $globinfo{"default"}); # FIXME: Do we need the arch stuff??? #my $arch = $self->{"exports"}{"arch"}; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-Bootloader-0.4.70/lib/Bootloader/Core/GRUB.pm new/perl-Bootloader-0.4.71/lib/Bootloader/Core/GRUB.pm --- old/perl-Bootloader-0.4.70/lib/Bootloader/Core/GRUB.pm 2008-09-12 09:58:02.000000000 +0200 +++ new/perl-Bootloader-0.4.71/lib/Bootloader/Core/GRUB.pm 2008-09-18 13:35:48.000000000 +0200 @@ -294,7 +294,8 @@ gfxmenu => "path", password => "", debug => "bool", - configfile => "path" + configfile => "path", + setkeys => "" }; $options{"section_options"} = { @@ -472,7 +473,6 @@ if ($dev eq $fw) { $dev = $unix; $match_found = 1; - last; } } if ($match_found == 0) { @@ -1953,6 +1953,19 @@ elsif (defined ($type) and $type eq "bool") { $ret{$key} = "true"; } + elsif ($key eq "setkey") + { + my @parts = split(" ",$val); + + if (exists $ret{"setkeys"}){ + $ret{"setkeys"}->{$parts[0]} = $parts[1]; + } + else + { + my %measure_array = ( $parts[0] => $parts[1] ); + $ret{'setkeys'} = %measure_array; + } + } elsif ($key =~ m/^boot_/) { # boot_* parameters are handled else where but should not happen! $self->l_milestone ("GRUB::Global2Info: Wrong item here $key, ignored"); @@ -1997,7 +2010,7 @@ } #remove gfxmenu in trusted grub due to security - if ($globinfo{"trusted_grub"} eq "true") { + if (defined $globinfo{"trusted_grub"} && $globinfo{"trusted_grub"} eq "true") { delete ($globinfo{"trusted_grub"}); delete ($globinfo{"gfxmenu"}); } @@ -2015,6 +2028,18 @@ { $line_ref = undef; } + elsif ($key eq "setkey") + { + $line_ref->{"value"} =~ m/^(\s+)\S+(\s+)$/; + if (defined $globinfo{"setkeys"}->{$1}) + { + $line_ref->{"value"} = delete $globinfo{"setkeys"}->{"$key"}; + } + else + { + $line_ref = undef; + } + } elsif ($key eq "default") { $line_ref->{"value"} = $self->IndexOfSection ( @@ -2071,6 +2096,17 @@ if ($key eq "default") { $value = $self->IndexOfSection ($value, $sections_ref) || 0; } + elsif ($key eq "setkeys") + { + while (my ($k,$v) = each (%{$globinfo{"setkeys"}})) + { + push @lines, { + "key" => "setkey", + "value" => "$k $v", + } + } + next; + } # bool values appear in a config file or not elsif ($type eq "bool") { next if $value ne "true"; @@ -2193,6 +2229,7 @@ my $grub_dev = shift; my @devices = (); my $device = $self->GrubDev2UnixDev($grub_dev); + $self->l_milestone ("GRUB::GrubDev2MountPoint : device: $device"); # MD-RAID handling: find the corresponding /dev/mdX if any. while ((my $md, my $members_ref) = each (%{$self->{"md_arrays"}})) { @@ -2202,6 +2239,7 @@ foreach my $md_member (@{$members_ref}) { if ($device eq $md_member) { + $self->l_milestone ("GRUB::GrubDev2MountPoint : find md: $md"); push (@devices, $md); } } @@ -2217,14 +2255,19 @@ foreach $device (@udev_links) { chomp $device; $device = "/dev/" . $device; + $self->l_milestone ("GRUB::GrubDev2MountPoint : find udev link: $device"); push (@devices, $device); } } my $mountpoint = $grub_dev; foreach $device (@devices) { + $self->l_debug ("GRUB::GrubDev2MountPoint : finding for device $device"); + while ((my $mp, my $d) = each (%{$self->{"mountpoints"}})) { - if ($d eq $device) { + $self->l_debug ("GRUB::GrubDev2MountPoint : record $mp <-> $d"); + if ($d eq $device) { + $self->l_milestone ("GRUB::GrubDev2MountPoint : find mountpoint: $mp"); $mountpoint = $mp; } } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-Bootloader-0.4.70/lib/Bootloader/Core.pm new/perl-Bootloader-0.4.71/lib/Bootloader/Core.pm --- old/perl-Bootloader-0.4.70/lib/Bootloader/Core.pm 2008-09-12 14:48:23.000000000 +0200 +++ new/perl-Bootloader-0.4.71/lib/Bootloader/Core.pm 2008-09-16 13:58:38.000000000 +0200 @@ -447,6 +447,7 @@ || ($when eq "blanks" && $text eq "") || index ($text, "=") >= 0) { + $text =~ s: +: :; #remove duplicated spaces $text = ""$text""; } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-Bootloader-0.4.70/lib/Bootloader/Library.pm new/perl-Bootloader-0.4.71/lib/Bootloader/Library.pm --- old/perl-Bootloader-0.4.70/lib/Bootloader/Library.pm 2008-08-14 11:06:00.000000000 +0200 +++ new/perl-Bootloader-0.4.71/lib/Bootloader/Library.pm 2008-09-19 15:43:23.000000000 +0200 @@ -67,6 +67,10 @@ C<< $unix_dev = Bootloader::Library->GrubDev2UnixDev ($grub_dev); >> +C<< $result = Bootloader::Library::DetectThinkpadMBR ($disk); >> + +C<< $result = Bootloader::Library::WriteThinkpadMBR ($disk); >> + =head1 DESCRIPTION =over 2 @@ -79,6 +83,7 @@ use strict; use Bootloader::Core; +use Bootloader::MBRTools; # this is bad style, load modules when required use Bootloader::Core::GRUB; @@ -159,7 +164,7 @@ } $self->{"loader"} = $loader; - $loader->l_debug ("Bootloader::Library::SetLoaderType: TRACE new $bootloader"); + $loader->l_milestone ("Bootloader::Library::SetLoaderType: TRACE new $bootloader"); return 1; } @@ -191,7 +196,7 @@ while ((my $mp, my $dev) = each (%{$mountpoints_ref})) { - $loader->l_debug ("Library::DefineMountPoints: Mount point: $mp ; Device: $dev"); + $loader->l_milestone ("Library::DefineMountPoints: Mount point: $mp ; Device: $dev"); } $loader->{"mountpoints"} = $mountpoints_ref; return 1; @@ -201,7 +206,7 @@ my $self = shift; my $loader = $self->{"loader"}; - $loader->l_debug ("Library::GetMountPoints: TRACE"); + $loader->l_milestone ("Library::GetMountPoints: TRACE"); return $loader->{"mountpoints"}; } @@ -235,7 +240,7 @@ foreach my $part_ref (@{$partitions_ref}) { my ($part, $disk, $num, @part_info ) = @{$part_ref}; - $loader->l_debug ("Library::DefinePartitions: Partition: $part ; " . + $loader->l_milestone ("Library::DefinePartitions: Partition: $part ; " . "Disk: $disk ; Number: $num ; Info: " . join(", ", map { "$_"; } @part_info) ); } @@ -276,7 +281,7 @@ while ((my $md, my $members_ref) = each (%{$md_arrays_ref})) { my $members = join ", ", @{$members_ref}; - $loader->l_debug ("Library::DefineMDArrays: MD Array: $md ; Members: $members"); + $loader->l_milestone ("Library::DefineMDArrays: MD Array: $md ; Members: $members"); } $loader->{"md_arrays"} = $md_arrays_ref; return 1; @@ -305,7 +310,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug( "Library::ReadSettings: TRACE" ); + $loader->l_milestone( "Library::ReadSettings: TRACE" ); my $files_ref = $loader->ReadFiles ($loader->ListFiles ()); if (! defined ($files_ref)) { @@ -343,7 +348,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug(" Library::WriteSettings: TRACE menu_only $menu_only "); + $loader->l_milestone(" Library::WriteSettings: TRACE menu_only $menu_only "); $loader->{"resolve_symlinks"} = 1; my $new_lines_ref = $loader->CreateLines (); if (! defined ($new_lines_ref)) @@ -376,7 +381,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug(" Library::ReadSettingsTmp: TRACE tmp_dir $tmp_dir "); + $loader->l_milestone(" Library::ReadSettingsTmp: TRACE tmp_dir $tmp_dir "); my @files = @{$loader->ListFiles ()}; my %filenames = (); @@ -424,7 +429,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug(" Library::WriteSettingsTmp: TRACE tmp_dir $tmp_dir "); + $loader->l_milestone(" Library::WriteSettingsTmp: TRACE tmp_dir $tmp_dir "); my $new_lines_ref = $loader->CreateLines (); if (! defined ($new_lines_ref)) @@ -469,7 +474,7 @@ return undef; } - $loader->l_debug(" Library::GetFilesContents TRACE "); + $loader->l_milestone(" Library::GetFilesContents TRACE "); $loader->{"resolve_symlinks"} = 0; my $new_lines_ref = $loader->CreateLines (); @@ -502,7 +507,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug(" Library::SetFilesContents TRACE "); + $loader->l_milestone(" Library::SetFilesContents TRACE "); my %lines = (); while ((my $fn, my $contents) = each (%{$files_ref})) @@ -540,7 +545,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug("Library::UpdateBootloader: TRACE avoid_init $avoid_init"); + $loader->l_milestone("Library::UpdateBootloader: TRACE avoid_init $avoid_init"); return $loader->UpdateBootloader ($avoid_init); } @@ -567,7 +572,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug( "Library::InitializeBootloader: TRACE"); + $loader->l_milestone( "Library::InitializeBootloader: TRACE"); return $loader->InitializeBootloader (); } @@ -598,7 +603,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug( "Library::ListConfigurationFiles TRACE"); + $loader->l_milestone( "Library::ListConfigurationFiles TRACE"); return $loader->ListFiles (); } @@ -621,7 +626,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug( "Library::GetSettings TRACE"); + $loader->l_milestone( "Library::GetSettings TRACE"); return $loader->GetSettings (); } @@ -644,7 +649,7 @@ my $loader = $self->{"loader"}; return undef unless defined $loader; - $loader->l_debug( "Library::SetSettings TRACE"); + $loader->l_milestone( "Library::SetSettings TRACE"); return $loader->SetSettings ($settings_ref); } @@ -696,7 +701,7 @@ my $self = shift; my $loader = $self->{loader} || return undef; - $loader->l_debug( "Library::GetMetaData TRACE"); + $loader->l_milestone( "Library::GetMetaData TRACE"); return $loader->GetMetaData();; } @@ -877,7 +882,7 @@ my $unix_file = shift; my $loader = $self->{loader} || return undef; - $loader->l_debug( "Library::UnixFile2GrubDev unix_file: $unix_file" ); + $loader->l_milestone( "Library::UnixFile2GrubDev unix_file: $unix_file" ); my $unix_dev = $loader->UnixFile2UnixDev ($unix_file); my $grub_dev = $loader->UnixDev2GrubDev ($unix_dev); @@ -900,13 +905,47 @@ my $grub_dev = shift; my $loader = $self->{loader} || return undef; - $loader->l_debug( "Library::GrubDev2UnixDev grub_dev: $grub_dev" ); + $loader->l_milestone( "Library::GrubDev2UnixDev grub_dev: $grub_dev" ); my $unix_dev = $loader->GrubDev2UnixDev ($grub_dev); return $unix_dev; } +=item +C<< $result = Bootloader::Library::DetectThinkpadMBR ($disk); >> + +Try detect on disk if contains ThinkpadMBR. Return true if detected. + +=cut + +# DetectThinkpadMBR (string disk) +sub DetectThinkpadMBR { + my $self = shift; + my $disk = shift; + my $res = MBRTools::IsThinkpadMBR($disk); + $self->{"loader"}->l_milestone("Library::DetectThinkpadMBR on $disk result $res" ) + if (defined $self->{"loader"}); + return $res; +} + +=item +C<< $result = Bootloader::Library::WriteThinkpadMBR ($disk); >> + +Write generic mbr to disk on thinkpad. Return undef if fail. + +=cut + +# WriteThinkpadMBR (string disk) +sub WriteThinkpadMBR { + my $self = shift; + my $disk = shift; + my $res = MBRTools::PatchThinkpadMBR($disk); + $self->{"loader"}->l_milestone("Library::WriteThinkpadMBR on $disk result $res" ) + if (defined $self->{"loader"}); + return $res; +} + 1; # diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-Bootloader-0.4.70/lib/Bootloader/MBRTools.pm new/perl-Bootloader-0.4.71/lib/Bootloader/MBRTools.pm --- old/perl-Bootloader-0.4.70/lib/Bootloader/MBRTools.pm 1970-01-01 01:00:00.000000000 +0100 +++ new/perl-Bootloader-0.4.71/lib/Bootloader/MBRTools.pm 2008-09-19 15:43:23.000000000 +0200 @@ -0,0 +1,145 @@ +#!/usr/bin/perl -w +# +# Set of low level tools for mbr manipulation +# + +=head1 NAME + +Bootloader::MBRTools - set of low-level functions for mbr manipulation + + +=head1 PREFACE + +This package contains a set of low-level functions for mbr manipulation + +=head1 SYNOPSIS + +C<< use Bootloader::MBRTools; >> + +C<< $value = Bootloader::MBRTools::IsThinkpadMBR ($disk); >> + +C<< $value = Bootloader::MBRTools::PatchThinkpadMBR ($disk); >> + +=head1 DESCRIPTION + +=over 2 + +=cut + + +package Bootloader::MBRTools; + +use strict; +use base 'Exporter'; + +our @EXPORT = qw( IsThinkpadMBR PatchThinkpadMBR +); + +sub IsThinkpadMBR($) { + my $disk = shift; + my $thinkpad_id = "50e46124108ae0e461241038e074f8e2f458c332edb80103ba8000cd13c3be05068a04240cc0e802c3"; + my $mbr = qx{dd status=noxfer if=$disk bs=512 count=1 2>/dev/null | od -v -t x1 -}; + $mbr =~ s/\d{7}//g; #remove address + $mbr =~ s/\n//g; #remove end lines + $mbr =~ s/\S//g; #remove whitespace + + return $mbr =~ m/$thinkpad_id/ ; +} + +# crc function +sub crc +{ + my $c = 0; + local $_; + + $c ^= $_ for @{$_[0]}; + + return $c; +} + +sub PatchThinkpadMBR($) { + my $disk = shift; + my $new_mbr = + "\x31\xc0\x8e\xd0\x66\xbc\x00\x7c\x00\x00\x8e\xc0\x8e\xd8\x89\xe6" . + "\x66\xbf\x00\x06\x00\x00\x66\xb9\x00\x01\x00\x00\xf3\xa5\xea\x23" . + "\x06\x00\x00\x80\xfa\x80\x7c\x05\x80\xfa\x87\x7e\x02\xb2\x80\x88" . + "\x16\x49\x07\x66\xbf\xbe\x07\x00\x00\x31\xf6\x66\xb9\x04\x00\x00" . + "\x00\x67\x80\x3f\x80\x75\x07\x85\xf6\x75\x0c\x66\x89\xfe\x83\xc7" . + "\x10\xe2\xee\x85\xf6\x75\x0b\x66\xbe\x4a\x07\x00\x00\xe9\x8d\x00" . + "\x00\x00\x8a\x16\x49\x07\x66\x31\xc9\x66\x31\xc0\xb4\x08\xcd\x13" . + "\xc1\xea\x08\x42\x89\xc8\x83\xe0\x3f\x89\xcb\xc1\xe9\x08\x81\xe3" . + "\xc0\x00\x00\x00\xc1\xe3\x02\x09\xd9\x41\xf7\xe2\x66\xf7\xe1\x8a" . + "\x16\x49\x07\x66\x67\x8b\x5e\x08\x66\x39\xc3\x66\x7c\x63\x66\x56" . + "\x52\x66\xbb\xaa\x55\x00\x00\xb4\x41\xcd\x13\x5a\x66\x5e\x72\x51" . + "\x66\xb8\x55\xaa\x00\x00\x39\xc3\x75\x47\xf6\xc1\x01\x74\x42\x67" . + "\x66\xc7\x06\x10\x00\x01\x00\x67\x66\xc7\x46\x04\x00\x7c\x00\x00" . + "\x67\x66\xc7\x46\x0c\x00\x00\x00\x00\xb6\x05\x56\x52\xb4\x42\xcd" . + "\x13\x5a\x5e\x73\x45\xfe\xce\x75\xf2\x66\xbe\x76\x07\x00\x00\xac" . + "\x84\xc0\x74\x0a\xb4\x0e\xb3\x07\x56\xcd\x10\x5e\xeb\xf1\xfb\xeb" . + "\xfd\x67\x8a\x76\x01\x67\x8b\x4e\x02\x66\xbf\x05\x00\x00\x00\x66" . + "\xbb\x00\x7c\x00\x00\x66\xb8\x01\x02\x00\x00\x57\x52\x51\xcd\x13" . + "\x59\x5a\x5f\x73\x05\x4f\x75\xe7\xeb\xbf\x66\xbe\x62\x07\x00\x00" . + "\x67\xa1\xfe\x7d\x00\x00\x66\xbb\x55\xaa\x00\x00\x39\xc3\x75\xaf" . + "\x8a\x16\x49\x07\xea\x00\x7c\x00\x00\x80\x49\x6e\x76\x61\x6c\x69" . + "\x64\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c" . + "\x65\x00\x4e\x6f\x20\x6f\x70\x65\x72\x61\x74\x69\x6e\x67\x20\x73" . + "\x79\x73\x74\x65\x6d\x00\x45\x72\x72\x6f\x72\x20\x6c\x6f\x61\x64" . + "\x69\x6e\x67\x20\x6f\x70\x65\x72\x61\x74\x69\x6e\x67\x20\x73\x79" . + "\x73\x74\x65\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" . + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" . + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; + + open F,$disk; + my $mbr_s; + sysread F,$mbr_s,0x200; + + my @mbr = unpack "C512", $mbr_s; + + my $old_mbr_sec = $mbr[7]; + + # read original mbr + + seek F, ($old_mbr_sec - 1) << 9, 0 or die "$disk: $!\n"; + + my $old_mbr_s; + sysread F, $old_mbr_s, 0x200; + + my @old_mbr = unpack "C512", $old_mbr_s; + + + close F; + + + # verify crc + + if($mbr[6] == 0) { + print STDERR "$disk: orig mbr crc not checked\n" if $mbr[6] == 0; + } + else { + die "$disk: orig mbr crc failure\n" unless crc(@old_mbr) == $mbr[6]; + } + + + # store new mbr & update crc + + substr($old_mbr_s, 0, length $new_mbr) = $new_mbr; + + @old_mbr = unpack "C512", $old_mbr_s; + + $mbr[6] = crc @old_mbr; + + $mbr_s = pack "C512", @mbr; + + + # write it + + open F, "+<$disk"; + syswrite F, $mbr_s, 0x200; + seek F, ($old_mbr_sec - 1) << 9, 0; + syswrite F, $old_mbr_s; + close F; + + return 1; +} + +1; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-Bootloader-0.4.70/lib/Bootloader/Tools.pm new/perl-Bootloader-0.4.71/lib/Bootloader/Tools.pm --- old/perl-Bootloader-0.4.70/lib/Bootloader/Tools.pm 2008-09-12 14:48:23.000000000 +0200 +++ new/perl-Bootloader-0.4.71/lib/Bootloader/Tools.pm 2008-09-18 09:52:14.000000000 +0200 @@ -236,7 +236,11 @@ sub Udev2Dev { my $udev = shift; - # FIXME: maybe useless code + my $mounted = undef; + unless (-e "/sys/block/") { + $mounted = `mount /sys`; + } + # FIXME: maybe useless code my $cmd = "udevinfo -q name -p /block/$udev"; my $dev = qx{ $cmd 2>/dev/null }; chomp ($dev); @@ -263,6 +267,8 @@ # CCISS maps slashes to bangs so we have to reverse that. $dev =~ s:!:/:g; + `umount /sys` if (defined $mounted); + return $dev; } @@ -279,6 +285,10 @@ # FIXME: this has to be read through yast::storage sub ReadPartitions { my $sb = "/sys/block"; + my $mounted = undef; + unless (-e $sb) { + $mounted = `mount /sys`; + } opendir(BLOCK_DEVICES, "$sb") || die ("ReadPartitions(): Failed to open dir $sb"); @@ -386,6 +396,11 @@ } } } + + if (defined $mounted){ + $mounted = `unmount /sys`; + } + return @devices; } @@ -652,7 +667,14 @@ if (my $udev_path = qx{$cmd 2>/dev/null}){ chomp ($udev_path); + + my $mounted = undef; + unless (-e "/sys/block") { + $mounted = `mount /sys`; + } $majmin = qx{cat /sys$udev_path/dev}; + `umount /sys` if (defined $mounted); + } chomp ($majmin); return $majmin; @@ -675,6 +697,10 @@ my $sb="/sys/block"; my $devmajmin; + my $mounted = undef; + unless (-e "/sys/block") { + $mounted = `mount /sys`; + } opendir (SYSBLOCK, "$sb"); foreach my $dirent (readdir(SYSBLOCK)) { @@ -708,6 +734,8 @@ } closedir (SYSBLOCK); + `umount /sys` if (defined $mounted); + return $part; } @@ -1398,7 +1426,8 @@ # and resolve them if found if ($lineref->{"key"} eq "kernel") { my $kernel_symlink = (split (/ /, $lineref->{"value"}))[0]; - if ($link_target = readlink ($kernel_symlink)) { + if ($link_target = readlink ($kernel_symlink) + and $kernel_symlink =~ m//vmlinu[xz]$/) { #change only default symlink, not user created chomp ($link_target); # Create the new kernel line with long (resolved) @@ -1413,7 +1442,8 @@ # and resolve them if found if ($lineref->{"key"} eq "initrd") { my $initrd_symlink = (split (/ /, $lineref->{"value"}))[0]; - if ($link_target = readlink ($initrd_symlink)) { + if ($link_target = readlink ($initrd_symlink) + and $initrd_symlink =~ m//initrd$/) { chomp ($link_target); # Create the new initrd line with long (resolved) ++++++ update-bootloader ++++++ --- perl-Bootloader/update-bootloader 2008-09-12 14:49:49.000000000 +0200 +++ /mounts/work_src_done/STABLE/perl-Bootloader/update-bootloader 2008-09-19 15:56:14.332647000 +0200 @@ -381,18 +381,10 @@ pod2usage("There are already sections with image '$opt_image'"); } } else { - my $default_image = GetDefaultImage(); - # Check if default image is a symlink. If this is the case, let the new - # kernel be the default one. - if (-l $default_image) { - $default_image = readlink ($default_image); - push @params, default => $opt_default; - } - - # Else, if option $opt_force_default is set, let this new kernel be + # If, if option $opt_force_default is set, let this new kernel be # the default one. - elsif ($opt_force_default) { + if ($opt_force_default) { push @params, default => $opt_default; } @@ -400,6 +392,12 @@ # flavor as the one of the new kernel, let the new kernel be the # default one. else { + my $default_image = GetDefaultImage(); + + if (-l $default_image) { + $default_image = readlink ($default_image); + } + $default_image =~ s/^.*-//; if ($opt_image =~ m/.*-${default_image}$/) { ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org