diff options
Diffstat (limited to 'perl-install/install_interactive.pm')
-rw-r--r-- | perl-install/install_interactive.pm | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/perl-install/install_interactive.pm b/perl-install/install_interactive.pm deleted file mode 100644 index a486a13ec..000000000 --- a/perl-install/install_interactive.pm +++ /dev/null @@ -1,243 +0,0 @@ -package install_interactive; # $Id$ - -use diagnostics; -use strict; - -use vars; - -use common qw(:common :functional); -use partition_table qw(:types); -use partition_table_raw; -use detect_devices; -use install_steps; -use devices; -use fsedit; -use log; -use fs; - - -sub tellAboutProprietaryModules { - my ($o) = @_; - my @l = grep {$_} map { $_->{driver} =~ /^Bad:(.*)/ && $1 } detect_devices::probeall(); - $o->ask_warn('', -_("Some hardware on your computer needs ``proprietary'' drivers to work. -You can find some information about them at: %s", join(", ", @l))) if @l; -} - -sub partition_with_diskdrake { - my ($o, $hds, $nowizard) = @_; - my $ok; - - $o->set_help('partition_with_diskdrake'); - do { - $ok = 1; - require diskdrake; - diskdrake::main($hds, $o->{lvms}, $o->{raid}, interactive_gtk->new, $nowizard); - delete $o->{wizard} and return partitionWizard($o, 'nodiskdrake'); - my @fstab = fsedit::get_fstab(@$hds, @{$o->{lvms}}, $o->{raid}); - - unless (fsedit::get_root_(\@fstab)) { - $ok = 0; - $o->ask_okcancel('', _("You must have a root partition. -For this, create a partition (or click on an existing one). -Then choose action ``Mount point'' and set it to `/'"), 1) or return; - } - if (!grep { isSwap($_) } @fstab) { - $o->ask_warn('', _("You must have a swap partition")), $ok=0 if !$::expert; - $ok &&= $::expert || $o->ask_okcancel('', _("You don't have a swap partition\n\nContinue anyway?")); - } - } until $ok; - 1; -} - -sub partitionWizardSolutions { - my ($o, $hds, $fstab, $readonly) = @_; - my @wizlog; - my (@solutions, %solutions); - - my $min_linux = 400 << 11; - my $max_linux = 3000 << 11; - my $min_swap = 50 << 11; - my $max_swap = 300 << 11; - my $min_freewin = 100 << 11; - - # each solution is a [ score, text, function ], where the function retunrs true if succeeded - - my @good_hds = grep { partition_table::can_raw_add($_) } @$hds; - if (fsedit::free_space(@good_hds) > $min_linux and !$readonly) { - $solutions{free_space} = [ 20, _("Use free space"), sub { fsedit::auto_allocate($hds); 1 } ] - } else { - push @wizlog, _("Not enough free space to allocate new partitions") . ": " . - (@good_hds ? - fsedit::free_space(@good_hds) . " < $min_linux" : - "no harddrive on which partitions can be added") if !$readonly; - } - - if (my @truefs = grep { isTrueFS($_) } @$fstab) { - #- value twice the ext2 partitions - $solutions{existing_part} = [ 6 + @truefs + @$fstab, _("Use existing partition"), sub { $o->ask_mntpoint_s($fstab) } ] - } else { - push @wizlog, _("There is no existing partition to use"); - } - - my @fats = grep { isFat($_) } @$fstab; - fs::df($_) foreach @fats; - if (my @ok_forloopback = sort { $b->{free} <=> $a->{free} } grep { $_->{free} > $min_linux + $min_swap + $min_freewin } @fats) { - $solutions{loopback} = - [ -10 - @fats, _("Use the Windows partition for loopback"), - sub { - my ($s_root, $s_swap); - my $part = $o->ask_from_listf('', _("Which partition do you want to use for Linux4Win?"), \&partition_table_raw::description, \@ok_forloopback) or return; - $max_swap = $min_swap + 1 if $part->{free} - $max_swap < $min_linux; - $o->ask_from_entries_refH('', _("Choose the sizes"), [ - { label => _("Root partition size in MB: "), val => \$s_root, min => $min_linux >> 11, max => min($part->{free} - $max_swap, $max_linux) >> 11, type => 'range' }, - { label => _("Swap partition size in MB: "), val => \$s_swap, min => $min_swap >> 11, max => $max_swap >> 11, type => 'range' }, - ]) or return; - push @{$part->{loopback}}, - { type => 0x83, loopback_file => '/lnx4win/linuxsys.img', mntpoint => '/', size => $s_root << 11, device => $part, notFormatted => 1 }, - { type => 0x82, loopback_file => '/lnx4win/swapfile', mntpoint => 'swap', size => $s_swap << 11, device => $part, notFormatted => 1 }; - 1; - } ]; - $solutions{resize_fat} = - [ 6 - @fats, _("Use the free space on the Windows partition"), - sub { - $o->set_help('resizeFATChoose'); - my $part = $o->ask_from_listf('', _("Which partition do you want to resize?"), \&partition_table_raw::description, \@ok_forloopback) or return; - $o->set_help('resizeFATWait'); - my $w = $o->wait_message(_("Resizing"), _("Computing Windows filesystem bounds")); - require resize_fat::main; - my $resize_fat = eval { resize_fat::main->new($part->{device}, devices::make($part->{device})) }; - $@ and die _("The FAT resizer is unable to handle your partition, -the following error occured: %s", $@); - my $min_win = $resize_fat->min_size; - $part->{size} > $min_linux + $min_swap + $min_freewin + $min_win or die _("Your Windows partition is too fragmented, please run ``defrag'' first"); - $o->ask_okcancel('', _("WARNING! - -DrakX will now resize your Windows partition. Be careful: this operation is -dangerous. If you have not already done so, you should first exit the -installation, run scandisk under Windows (and optionally run defrag), then -restart the installation. You should also backup your data. -When sure, press Ok.")) or return; - - my $size = $part->{size}; - $o->ask_from_entries_refH('', _("Which size do you want to keep for windows on"), [ - { label => _("partition %s", partition_table_raw::description($part)), val => \$size, min => $min_win >> 11, max => ($part->{size} - $min_linux - $min_swap) >> 11, type => 'range' }, - ]) or return; - $size <<= 11; - - local *log::l = sub { $w->set(join(' ', @_)) }; - eval { $resize_fat->resize($size) }; - $@ and die _("FAT resizing failed: %s", $@); - - $part->{size} = $size; - $part->{isFormatted} = 1; - - my ($hd) = grep { $_->{device} eq $part->{rootDevice} } @$hds; - $hd->{isDirty} = $hd->{needKernelReread} = 1; - $hd->adjustEnd($part); - partition_table::adjust_local_extended($hd, $part); - partition_table::adjust_main_extended($hd); - - fsedit::auto_allocate($hds); - 1; - } ] if !$readonly; - } else { - push @wizlog, _("There is no FAT partitions to resize or to use as loopback (or not enough space left)") . - @fats ? "\nFAT partitions:" . join('', map { "\n $_->{device} $_->{free} (" . ($min_linux + $min_swap + $min_freewin) . ")" } @fats) : ''; - } - - if (@$fstab && !$readonly) { - $solutions{wipe_drive} = - [ 10, fsedit::is_one_big_fat($hds) ? _("Remove Windows(TM)") : _("Erase entire disk"), - sub { - $o->set_help('takeOverHdChoose'); - my $hd = $o->ask_from_listf('', _("You have more than one hard drive, which one do you install linux on?"), - \&partition_table_raw::description, $hds) or return; - $o->set_help('takeOverHdConfirm'); - $o->ask_okcancel('', _("ALL existing partitions and their data will be lost on drive %s", partition_table_raw::description($hd))) or return; - partition_table_raw::zero_MBR($hd); - fsedit::auto_allocate($hds); - 1; - } ]; - } - - if (!$readonly && ref($o) =~ /gtk/) { #- diskdrake only available in gtk for now - $solutions{diskdrake} = [ 0, _("Custom disk partitioning"), sub { partition_with_diskdrake($o, $hds, 'nowizard') } ]; - } - - $solutions{fdisk} = - [ -10, _("Use fdisk"), sub { - $o->enter_console; - foreach (@$hds) { - print "\n" x 10, _("You can now partition %s. -When you are done, don't forget to save using `w'", partition_table_raw::description($_)); - print "\n\n"; - my $pid = 0; - if (arch() =~ /ppc/) { - $pid = fork or exec "pdisk", devices::make($_->{device}); - } else { - $pid = fork or exec "fdisk", devices::make($_->{device}); - } - waitpid($pid, 0); - } - $o->leave_console; - 0; - } ] if $o->{partitioning}{fdisk}; - - log::l("partitioning wizard log:\n", (map { ">>wizlog>>$_\n" } @wizlog)); - %solutions; -} - -sub partitionWizard { - my ($o, $nodiskdrake) = @_; - - $o->set_help('doPartitionDisks'); - - my %solutions = partitionWizardSolutions($o, $o->{hds}, $o->{fstab}, $o->{partitioning}{readonly}); - if ($o->{lnx4win}) { - if ($solutions{loopback}) { - %solutions = (loopback => $solutions{loopback}); - } else { - $o->ask_warn('', _("You don't have enough free space on your Windows partition")) if grep { isFat($_) } @{$o->{fstab}} - } - } - - delete $solutions{diskdrake} if $nodiskdrake; - - my @solutions = sort { $b->[0] <=> $a->[0] } values %solutions; - - my $level = $::expert ? -9999 : 0; - my @sol = grep { $_->[0] >= $level } @solutions; - - log::l( "solutions found: " . join('', map {$_->[1]} @sol) . - " (all solutions found: " . join('', map {$_->[1]} @solutions) . ")"); - - @solutions = @sol if @sol > 1; - log::l("solutions: ", int @solutions); - @solutions or $o->ask_warn('', _("I can't find any room for installing")), die 'already displayed'; - - my $ok; while (!$ok) { - log::l('HERE: ', join(',', map { $_->[1] } @solutions)); - my $sol = $o->ask_from_listf('', _("The DrakX Partitioning wizard found the following solutions:"), sub { $_[0][1] }, \@solutions) or redo; - log::l("partitionWizard calling solution $sol->[1]"); - eval { $ok = $sol->[2]->() }; - die if $@ =~ /setstep/; - $ok &&= !$@; - $@ and $o->ask_warn('', _("Partitioning failed: %s", $@)); - } -} - -sub upNetwork { - my ($o, $pppAvoided) = @_; - my $w = $o->wait_message('', _("Bringing up the network")); - install_steps::upNetwork($o, $pppAvoided); -} -sub downNetwork { - my ($o, $pppOnly) = @_; - my $w = $o->wait_message('', _("Bringing down the network")); - install_steps::downNetwork($o, $pppOnly); -} - - - -1; |