summaryrefslogtreecommitdiffstats
path: root/perl-install/install2.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/install2.pm')
-rw-r--r--perl-install/install2.pm123
1 files changed, 14 insertions, 109 deletions
diff --git a/perl-install/install2.pm b/perl-install/install2.pm
index f50f289a5..cd03399d5 100644
--- a/perl-install/install2.pm
+++ b/perl-install/install2.pm
@@ -121,7 +121,7 @@ $o = $::o = {
autoSCSI => 0,
mkbootdisk => 1, #- no mkbootdisk if 0 or undef, find a floppy with 1
#- packages => [ qw() ],
- partitioning => { clearall => 0, eraseBadPartitions => 0, auto_allocate => 0, autoformat => 0 },
+ partitioning => { clearall => 0, eraseBadPartitions => 0, auto_allocate => 0, autoformat => 0, readonly => 1 },
#- partitions => [
#- { mntpoint => "/boot", size => 16 << 11, type => 0x83 },
#- { mntpoint => "/", size => 256 << 11, type => 0x83 },
@@ -174,7 +174,7 @@ $o = $::o = {
#- user => { name => 'foo', password => 'bar', home => '/home/foo', shell => '/bin/bash', realname => 'really, it is foo' },
#- keyboard => 'de',
-# display => "192.168.1.19:1",
+#- display => "192.168.1.19:1",
steps => \%installSteps,
orderedSteps => \@orderedInstallSteps,
@@ -239,85 +239,7 @@ sub selectKeyboard {
#------------------------------------------------------------------------------
sub selectPath {
$o->selectPath;
-
- if ($o->{isUpgrade}) {
- #- try to find the partition where the system is installed if beginner
- #- else ask the user the right partition, and test it after.
- unless ($o->{hds}) {
- $o->{drives} = [ detect_devices::hds() ];
- $o->{hds} = catch_cdie { fsedit::hds($o->{drives}, $o->{partitioning}) }
- sub { 1; };
-
- unless (@{$o->{hds}} > 0) {
- $o->setupSCSI if $o->{autoSCSI}; #- ask for an unautodetected scsi card
- }
- }
-
- my @normal_partitions = fsedit::get_fstab(@{$o->{hds}});
-
- fs::check_mounted([@normal_partitions]);
-
- #- get all ext2 partition that may be root partition.
- my %partitions_lookup;
- my @partitions = map {
- $partitions_lookup{$_->{device}} = $_;
- type2fs($_->{type}) eq 'ext2' ? $_->{device} : (); } @normal_partitions;
-
- my $root;
- my $root_partition;
- my $selected_partition;
- do {
- if ($selected_partition->{mntpoint} && !$selected_partition->{currentMntpoint}) {
- $o->ask_warn(_("Information"), "$selected_partition->{device}" . _(" : This is not a root partition, please select another one."))
- unless $::beginner;
- log::l("umounting non root partition $selected_partition->{device}");
- eval { fs::umount_part($selected_partition); };
- $selected_partition->{mntpoint} = '';
- $selected_partition->{mntreadonly} = undef;
- }
-
- $root_partition = $::beginner ? $partitions[0] : $o->selectRootPartition(@partitions);
- $selected_partition = $partitions_lookup{$root_partition};
-
- unless ($root = $selected_partition->{currentMntpoint}) {
- $selected_partition->{mntpoint} = $root = $o->{prefix};
- $selected_partition->{mntreadonly} = 1;
- log::l("trying to mount root partition $root_partition");
- eval { fs::mount_part($selected_partition); };
- }
-
- #- avoid testing twice a partition.
- for my $i (0..$#partitions) {
- splice @partitions, $i, 1 if $partitions[$i] eq $root_partition;
- }
- } until $root && -d "$root/etc/sysconfig" && -r "$root/etc/fstab" || !(scalar @partitions);
-
-
- if ($root && -d "$root/etc/sysconfig" && -r "$root/etc/fstab") {
- $o->ask_warn(_("Information"), _("Found root partition : ") . $root_partition);
- $o->{prefix} = $root;
- $o->{fstab} = \@normal_partitions;
-
- #- test if the partition has to be fschecked and remounted rw.
- if ($selected_partition->{mntpoint} && !$selected_partition->{currentMntpoint}) {
- my @fstab = fs::read_fstab("$root/etc/fstab");
-
- eval { fs::umount_part($selected_partition); };
- $selected_partition->{mntpoint} = '';
- $selected_partition->{mntreadonly} = undef;
-
- foreach (@fstab) {
- if ($selected_partition = $partitions_lookup{$_->{device}}) {
- $selected_partition->{mntpoint} = $_->{mntpoint};
- }
- }
- #- TODO fsck, create check_mount_all ?
- fs::mount_all([ grep { isExt2($_) || isSwap($_) } @{$o->{fstab}} ], $o->{prefix});
- }
- } else {
- $o->ask_warn(_("Error"), _("No root partition found"));
- }
- }
+ install_any::searchAndMount4Upgrade($o) if $o->{isUpgrade};
}
#------------------------------------------------------------------------------
@@ -327,7 +249,6 @@ sub selectInstallClass {
$::expert = $o->{installClass} eq "expert";
$::beginner = $o->{installClass} eq "beginner";
$o->{partitions} ||= $suggestedPartitions{$o->{installClass}};
- $o->{partitioning}{auto_allocate} ||= -1 if $::beginner;
if ($o->{steps}{choosePackages}{entered} >= 1 && !$o->{steps}{doInstallStep}{done}) {
$o->setPackages(\@install_classes);
@@ -347,43 +268,27 @@ sub setupSCSI {
sub partitionDisks {
return if ($o->{isUpgrade});
- unless ($o->{hds}) {
- $o->{drives} = [ detect_devices::hds() ];
- $o->{hds} = catch_cdie { fsedit::hds($o->{drives}, $o->{partitioning}) }
- sub {
- $o->ask_warn(_("Error"),
-_("I can't read your partition table, it's too corrupted for me :(
-I'll try to go on blanking bad partitions"));
- $o->{partitioning}{auto_allocate} = 0;
- 1;
- };
-
- unless (@{$o->{hds}} > 0) {
- $o->setupSCSI if $o->{autoSCSI}; #- ask for an unautodetected scsi card
- }
- }
- if (@{$o->{hds}} == 0) { #- no way
- die _("An error has occurred - no valid devices were found on which to create new filesystems. Please check your hardware for the cause of this problem");
- }
+ $::o->{steps}{formatPartitions}{done} = 0;
+ fs::umount_all($o->{fstab}, $o->{prefix}) if $o->{fstab};
- $o->{partitioning}{auto_allocate} = 0
- if $o->{partitioning}{auto_allocate} == -1 && fsedit::get_fstab(@{$o->{hds}}) >= 4;
+ my $ok = is_empty_array_ref($o->{hds}) ? install_any::getHds($o) : 1;
+ my $auto = $ok && !$o->{partitioning}{readonly} &&
+ ($o->{partitioning}{auto_allocate} || $::beginner && fsedit::get_fstab(@{$o->{hds}}) < 4);
- eval { fsedit::auto_allocate($o->{hds}, $o->{partitions}) } if
- $o->{partitioning}{auto_allocate} && ($o->{partitioning}{auto_allocate} != -1 || $::beginner);
+ eval { fsedit::auto_allocate($o->{hds}, $o->{partitions}) } if $auto;
- if ($o->{partitioning}{auto_allocated} = ($::beginner && fsedit::get_root_($o->{hds}) && $_[1] == 1)) {
- install_steps::doPartitionDisks($o, $o->{hds});
+ if ($auto && fsedit::get_root_($o->{hds}) && $_[1] == 1) {
+ #- we have a root partition, that's enough :)
+ $o->install_steps::doPartitionDisks($o->{hds});
+ } elsif ($o->{partitioning}{readonly}) {
+ $o->ask_mntpoint_s($o->{fstab});
} else {
$o->doPartitionDisks($o->{hds});
}
-
unless ($::testing) {
$o->rebootNeeded foreach grep { $_->{rebootNeeded} } @{$o->{hds}};
}
-
$o->{fstab} = [ fsedit::get_fstab(@{$o->{hds}}) ];
-
fsedit::get_root($o->{fstab}) or die _("Partitioning failed: no root filesystem");
}