summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2008-03-28 17:47:42 +0000
committerPascal Rigaux <pixel@mandriva.com>2008-03-28 17:47:42 +0000
commit82e7fa470773e0f2cca95d3f0ac76445960bdc89 (patch)
tree66c023446cb57a6f2fc86efecdb54daf9ca6c357
parent5a3539f4db4d5262c9090c35c1ee2273dd835123 (diff)
downloaddrakx-82e7fa470773e0f2cca95d3f0ac76445960bdc89.tar
drakx-82e7fa470773e0f2cca95d3f0ac76445960bdc89.tar.gz
drakx-82e7fa470773e0f2cca95d3f0ac76445960bdc89.tar.bz2
drakx-82e7fa470773e0f2cca95d3f0ac76445960bdc89.tar.xz
drakx-82e7fa470773e0f2cca95d3f0ac76445960bdc89.zip
- warn the user and propose to install/quit-install before upgrading from a
partition where "/" is ext3 with block-size 1KB to avoid kernel bug (#37583)
-rw-r--r--perl-install/install/NEWS3
-rw-r--r--perl-install/install/steps_interactive.pm49
2 files changed, 52 insertions, 0 deletions
diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS
index 1986dfe5f..886dfd2dc 100644
--- a/perl-install/install/NEWS
+++ b/perl-install/install/NEWS
@@ -1,3 +1,6 @@
+- warn the user and propose to install/quit-install before upgrading from a
+ partition where "/" is ext3 with block-size 1KB to avoid kernel bug (#37583)
+
Version 10.21 - 25 March 2008
- partitioning wizard: allow "Use free space" if there is an extended
diff --git a/perl-install/install/steps_interactive.pm b/perl-install/install/steps_interactive.pm
index 239b6c7bf..84984e32c 100644
--- a/perl-install/install/steps_interactive.pm
+++ b/perl-install/install/steps_interactive.pm
@@ -145,6 +145,11 @@ sub selectInstallClass {
goto askInstallClass;
}
+ _check_unsafe_upgrade_and_warn($o, $p->{part}) or $p = undef;
+ }
+
+ if (ref $p) {
+
if ($p->{part}) {
log::l("choosing to upgrade partition $p->{part}{device}");
$o->{migrate_device_names} = install::any::use_root_part($o->{all_hds}, $p->{part}, $o);
@@ -169,6 +174,50 @@ sub selectInstallClass {
}
}
+sub _check_unsafe_upgrade_and_warn {
+ my ($o, $part) = @_;
+ !_is_unsafe_upgrade($part) || _warn_unsafe_upgrade($o);
+}
+sub _is_unsafe_upgrade {
+ my ($part) = @_;
+
+ my $r = run_program::get_stdout('dumpe2fs', devices::make($part->{device}));
+ my $block_size = $r =~ /^Block size:\s*(\d+)/m && $1;
+ log::l("block_size $block_size");
+ $block_size == 1024;
+}
+sub _warn_unsafe_upgrade {
+ my ($o) = @_;
+
+ log::l("_warn_unsafe_upgrade");
+
+ my @choices = (
+ N_("Cancel installation, reboot system"),
+ N_("New Installation"),
+ N_("Upgrade previous installation (not recommended)"),
+ );
+
+ my $choice;
+ $o->ask_from_({ messages => N("Installer have detected your installed Mandriva Linux system could not
+safely be upgraded to %s.
+
+New installation replacing your previous one is recommended.
+
+Warning : you should backup all your personal data before choosing \"New
+Installation\".", 'Mandriva Linux 2008 Spring') },
+ [ { val => \$choice, type => 'list', list => \@choices, format => \&translate } ]);
+
+ log::l("_warn_unsafe_upgrade: got $choice");
+
+ if ($choice eq $choices[0]) {
+ any::reboot($o);
+ } elsif ($choice eq $choices[1]) {
+ undef;
+ } else {
+ 1;
+ }
+}
+
#------------------------------------------------------------------------------
sub selectMouse {
my ($o, $force) = @_;