diff options
Diffstat (limited to 'perl-install/install_steps_interactive.pm')
-rw-r--r-- | perl-install/install_steps_interactive.pm | 1374 |
1 files changed, 0 insertions, 1374 deletions
diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm deleted file mode 100644 index 212e3fd4a..000000000 --- a/perl-install/install_steps_interactive.pm +++ /dev/null @@ -1,1374 +0,0 @@ -package install_steps_interactive; # $Id$ - - -use diagnostics; -use strict; -use vars qw(@ISA $new_bootstrap $com_license); - -@ISA = qw(install_steps); - -$com_license = _(" -Warning - -Please read carefully the terms below. If you disagree with any -portion, you are not allowed to install the next CD media. Press 'Refuse' -to continue the installation without using these media. - - -Some components contained in the next CD media are not governed -by the GPL License or similar agreements. Each such component is then -governed by the terms and conditions of its own specific license. -Please read carefully and comply with such specific licenses before -you use or redistribute the said components. -Such licenses will in general prevent the transfer, duplication -(except for backup purposes), redistribution, reverse engineering, -de-assembly, de-compilation or modification of the component. -Any breach of agreement will immediately terminate your rights under -the specific license. Unless the specific license terms grant you such -rights, you usually cannot install the programs on more than one -system, or adapt it to be used on a network. In doubt, please contact -directly the distributor or editor of the component. -Transfer to third parties or copying of such components including the -documentation is usually forbidden. - - -All rights to the components of the next CD media belong to their -respective authors and are protected by intellectual property and -copyright laws applicable to software programs. -"); - -#-###################################################################################### -#- misc imports -#-###################################################################################### -use common; -use partition_table qw(:types); -use partition_table::raw; -use install_steps; -use install_interactive; -use install_any; -use detect_devices; -use run_program; -use devices; -use fsedit; -use loopback; -use mouse; -use modules; -use lang; -use keyboard; -use any; -use fs; -use log; - -#-###################################################################################### -#- In/Out Steps Functions -#-###################################################################################### -sub errorInStep($$) { - my ($o, $err) = @_; - $o->ask_warn(_("Error"), [ _("An error occurred"), formatError($err) ]); -} - -sub kill_action { - my ($o) = @_; - $o->kill; -} - -sub charsetChanged {} - -#-###################################################################################### -#- Steps Functions -#-###################################################################################### -#------------------------------------------------------------------------------ -sub selectLanguage { - my ($o) = @_; - - $o->{lang} = any::selectLanguage($o, $o->{lang}, $o->{langs} ||= {}) - || return $o->ask_yesorno('', _("Do you really want to leave the installation?")) ? $o->exit : &selectLanguage; - install_steps::selectLanguage($o); - - $o->charsetChanged; - - if ($o->isa('interactive::gtk')) { - $o->ask_warn('', formatAlaTeX( -"If you see this message it is because you chose a language for -which DrakX does not include a translation yet; however the fact -that it is listed means there is some support for it anyway. - -That is, once GNU/Linux will be installed, you will be able to at -least read and write in that language; and possibly more (various -fonts, spell checkers, various programs translated etc. that -varies from language to language).")) if $o->{lang} !~ /^en/ && !lang::load_mo(); - } else { - #- don't use _( ) for this, as it is never translated - $o->ask_warn('', "The characters of your language can't be displayed in console, -so the messages will be displayed in english during installation") if $ENV{LANGUAGE} eq 'C'; - } -} - -sub acceptLicence { - my ($o) = @_; - return if $o->{useless_thing_accepted}; - - $o->set_help('license'); - $o->{useless_thing_accepted} = $o->ask_from_list_(_("License agreement"), formatAlaTeX( -_("Introduction - -The operating system and the different components available in the Mandrake Linux distribution -shall be called the \"Software Products\" hereafter. The Software Products include, but are not -restricted to, the set of programs, methods, rules and documentation related to the operating -system and the different components of the Mandrake Linux distribution. - - -1. License Agreement - -Please read this document carefully. This document is a license agreement between you and -MandrakeSoft S.A. which applies to the Software Products. -By installing, duplicating or using the Software Products in any manner, you explicitly -accept and fully agree to conform to the terms and conditions of this License. -If you disagree with any portion of the License, you are not allowed to install, duplicate or use -the Software Products. -Any attempt to install, duplicate or use the Software Products in a manner which does not comply -with the terms and conditions of this License is void and will terminate your rights under this -License. Upon termination of the License, you must immediately destroy all copies of the -Software Products. - - -2. Limited Warranty - -The Software Products and attached documentation are provided \"as is\", with no warranty, to the -extent permitted by law. -MandrakeSoft S.A. will, in no circumstances and to the extent permitted by law, be liable for any special, -incidental, direct or indirect damages whatsoever (including without limitation damages for loss of -business, interruption of business, financial loss, legal fees and penalties resulting from a court -judgment, or any other consequential loss) arising out of the use or inability to use the Software -Products, even if MandrakeSoft S.A. has been advised of the possibility or occurance of such -damages. - -LIMITED LIABILITY LINKED TO POSSESSING OR USING PROHIBITED SOFTWARE IN SOME COUNTRIES - -To the extent permitted by law, MandrakeSoft S.A. or its distributors will, in no circumstances, be -liable for any special, incidental, direct or indirect damages whatsoever (including without -limitation damages for loss of business, interruption of business, financial loss, legal fees -and penalties resulting from a court judgment, or any other consequential loss) arising out -of the possession and use of software components or arising out of downloading software components -from one of Mandrake Linux sites which are prohibited or restricted in some countries by local laws. -This limited liability applies to, but is not restricted to, the strong cryptography components -included in the Software Products. - - -3. The GPL License and Related Licenses - -The Software Products consist of components created by different persons or entities. Most -of these components are governed under the terms and conditions of the GNU General Public -Licence, hereafter called \"GPL\", or of similar licenses. Most of these licenses allow you to use, -duplicate, adapt or redistribute the components which they cover. Please read carefully the terms -and conditions of the license agreement for each component before using any component. Any question -on a component license should be addressed to the component author and not to MandrakeSoft. -The programs developed by MandrakeSoft S.A. are governed by the GPL License. Documentation written -by MandrakeSoft S.A. is governed by a specific license. Please refer to the documentation for -further details. - - -4. Intellectual Property Rights - -All rights to the components of the Software Products belong to their respective authors and are -protected by intellectual property and copyright laws applicable to software programs. -MandrakeSoft S.A. reserves its rights to modify or adapt the Software Products, as a whole or in -parts, by all means and for all purposes. -\"Mandrake\", \"Mandrake Linux\" and associated logos are trademarks of MandrakeSoft S.A. - - -5. Governing Laws - -If any portion of this agreement is held void, illegal or inapplicable by a court judgment, this -portion is excluded from this contract. You remain bound by the other applicable sections of the -agreement. -The terms and conditions of this License are governed by the Laws of France. -All disputes on the terms of this license will preferably be settled out of court. As a last -resort, the dispute will be referred to the appropriate Courts of Law of Paris - France. -For any question on this document, please contact MandrakeSoft S.A. -")), [ __("Accept"), __("Refuse") ], "Refuse") eq "Accept" and return; - - $o->ask_yesorno('', _("Are you sure you refuse the licence?"), 1) and $o->exit; - - &acceptLicence; -} - -#------------------------------------------------------------------------------ -sub selectKeyboard { - my ($o, $clicked) = @_; - - my $from_usb = keyboard::from_usb(); - my $l = keyboard::lang2keyboards(lang::langs($o->{langs})); - - #- good guess, don't ask ($o->{keyboard} already set) - return install_steps::selectKeyboard($o) - if !$::expert && !$clicked && ($from_usb || $l->[0][1] >= 90) && listlength(lang::langs($o->{langs})) == 1; - - my @best = uniq(if_($from_usb, $from_usb), (map { $_->[0] } @$l), 'us_intl'); - - my $format = sub { translate(keyboard::keyboard2text($_[0])) }; - my $other; - my $ext_keyboard = $o->{keyboard}; - $o->ask_from_( - { title => _("Keyboard"), - messages => _("Please choose your keyboard layout."), - advanced_messages => _("Here is the full list of keyboards available"), - advanced_label => _("More"), - callbacks => { changed => sub { $other = $_[0]==1 } }, - }, - [ if_(@best > 1, { val => \$o->{keyboard}, type => 'list', format => $format, sort => 1, - list => [ @best ] }), - { val => \$ext_keyboard, type => 'list', format => $format, - list => [ difference2([ keyboard::keyboards ], \@best) ], advanced => @best > 1 } - ]); - delete $o->{keyboard_unsafe}; - - $o->{keyboard} = $ext_keyboard if $other; - install_steps::selectKeyboard($o); -} -#------------------------------------------------------------------------------ -sub selectInstallClass1 { - my ($o, $verif, $l, $def, $l2, $def2) = @_; - $verif->($o->ask_from_list(_("Install Class"), _("Which installation class do you want?"), $l, $def) || die 'already displayed'); - - return if !@$l2; - - $::live ? 'Update' : $o->ask_from_list_(_("Install/Update"), _("Is this an install or an update?"), $l2, $def2); -} - -#------------------------------------------------------------------------------ -sub selectInstallClass { - my ($o, $clicked) = @_; - - my %c = my @c = ( - if_(!$::corporate, - _("Recommended") => "beginner", - ), - if_($o->{meta_class} ne 'desktop', - _("Expert") => "expert", - ), - ); - %c = @c = (_("Expert") => "expert") if $::expert && !$clicked; - - $o->set_help('selectInstallClassCorpo') if $::corporate; - - my $verifInstallClass = sub { $::expert = $c{$_[0]} eq "expert" }; - my $installMode = $o->{isUpgrade} ? $o->{keepConfiguration} ? __("Upgrade packages only") : __("Upgrade") : __("Install"); - - if ($installMode = $o->selectInstallClass1($verifInstallClass, - first(list2kv(@c)), ${{reverse %c}}{$::expert ? "expert" : "beginner"}, - exists $o->{isUpgrade} ? [] : [ __("Install"), __("Upgrade"), __("Upgrade packages only") ], $installMode)) { - $o->{isUpgrade} = $installMode =~ /Upgrade/; - $o->{keepConfiguration} = $installMode =~ /packages only/; - } - - install_steps::selectInstallClass($o); -} - -#------------------------------------------------------------------------------ -sub selectMouse { - my ($o, $force) = @_; - - $force ||= $o->{mouse}{unsafe} || $::expert; - - my $prev = $o->{mouse}{type} . '|' . $o->{mouse}{name}; - $o->{mouse} = mouse::fullname2mouse( - $o->ask_from_treelist_('', _("Please choose the type of your mouse."), - '|', [ mouse::fullnames ], $prev) || return) if $force; - - if ($force && $o->{mouse}{type} eq 'serial') { - $o->set_help('selectSerialPort'); - $o->{mouse}{device} = - $o->ask_from_listf(_("Mouse Port"), - _("Please choose on which serial port your mouse is connected to."), - \&mouse::serial_port2text, - [ mouse::serial_ports ]) or return; - } - if (arch() =~ /ppc/ && $o->{mouse}{nbuttons} == 1) { - #- set a sane default F11/F12 - $o->{mouse}{button2_key} = 87; - $o->{mouse}{button3_key} = 88; - $o->ask_from('', _("Buttons emulation"), - [ - { label => _("Button 2 Emulation"), val => \$o->{mouse}{button2_key}, list => [ mouse::ppc_one_button_keys() ], format => \&mouse::ppc_one_button_key2text }, - { label => _("Button 3 Emulation"), val => \$o->{mouse}{button3_key}, list => [ mouse::ppc_one_button_keys() ], format => \&mouse::ppc_one_button_key2text }, - ]) or return; - } - - if ($o->{mouse}{device} eq "usbmouse") { - any::load_category($o, 'bus/usb', !$::expert, 1, $o->{pcmcia}); - eval { - devices::make("usbmouse"); - modules::load(qw(hid mousedev usbmouse)); - }; - } - - $o->SUPER::selectMouse; - 1; -} -#------------------------------------------------------------------------------ -sub setupSCSI { - my ($o, $clicked) = @_; - - if (!$::noauto && arch() =~ /i.86/) { - if ($o->{pcmcia} ||= !$::testing && c::pcmcia_probe()) { - my $w = $o->wait_message(_("PCMCIA"), _("Configuring PCMCIA cards...")); - my $results = modules::configure_pcmcia($o->{pcmcia}); - $w = undef; - $results and $o->ask_warn('', $results); - } - } - { - my $w = $o->wait_message(_("IDE"), _("Configuring IDE")); - modules::load(modules::category2modules('disk/cdrom')); - } - any::load_category($o, 'disk/scsi|hardware_raid', !$::expert && !$clicked, 0, $o->{pcmcia}); - - install_interactive::tellAboutProprietaryModules($o) if !$clicked; -} - -sub ask_mntpoint_s { - my ($o, $fstab) = @_; - $o->set_help('ask_mntpoint_s'); - - my @fstab = grep { isTrueFS($_) } @$fstab; - @fstab = grep { isSwap($_) } @$fstab if @fstab == 0; - @fstab = @$fstab if @fstab == 0; - die _("No partition available") if @fstab == 0; - - { - my $w = $o->wait_message('', _("Scanning partitions to find mount points")); - install_any::suggest_mount_points($fstab, $o->{prefix}, 'uniq'); - log::l("default mntpoint $_->{mntpoint} $_->{device}") foreach @fstab; - } - if (@fstab == 1) { - $fstab[0]{mntpoint} = '/'; - } else { - $o->ask_from('', - _("Choose the mount points"), - [ map { { label => partition_table::description($_), - val => \$_->{mntpoint}, - not_edit => 0, - list => [ '', fsedit::suggestions_mntpoint(fsedit::empty_all_hds()) ] } - } grep { !$_->{real_mntpoint} || common::usingRamdisk() } @fstab ]) or return; - } - $o->SUPER::ask_mntpoint_s($fstab); -} - -#------------------------------------------------------------------------------ -sub doPartitionDisks { - my ($o) = @_; - - my $warned; - install_any::getHds($o, sub { - my ($err) = @_; - $warned = 1; - if ($o->ask_yesorno(_("Error"), -_("I can't read your partition table, it's too corrupted for me :( -I can try to go on, erasing over bad partitions (ALL DATA will be lost!). -The other solution is to not allow DrakX to modify the partition table. -(the error is %s) - -Do you agree to loose all the partitions? -", $err))) { - 0; - } else { - $o->{partitioning}{readonly} = 1; - 1; - } - }) or $warned or $o->ask_warn('', -_("DiskDrake failed to read correctly the partition table. -Continue at your own risk!")); - - if (arch() =~ /ppc/ && detect_devices::get_mac_generation =~ /NewWorld/) { #- need to make bootstrap part if NewWorld machine - thx Pixel ;^) - if (defined $partition_table::mac::bootstrap_part) { - #- don't do anything if we've got the bootstrap setup - #- otherwise, go ahead and create one somewhere in the drive free space - } else { - undef = $partition_table::mac::freepart; #- please "perl -w" - my $freepart = $partition_table::mac::freepart; - if ($freepart && $freepart->{size} >= 1) { - log::l("creating bootstrap partition on drive /dev/$freepart->{hd}{device}, block $freepart->{start}"); - $partition_table::mac::bootstrap_part = $freepart->{part}; - log::l("bootstrap now at $partition_table::mac::bootstrap_part"); - fsedit::add($freepart->{hd}, { start => $freepart->{start}, size => 1 << 11, type => 0x401, mntpoint => '' }, $o->{all_hds}, { force => 1, primaryOrExtended => 'Primary' }); - $new_bootstrap = 1; - } else { - $o->ask_warn('',_("No free space for 1MB bootstrap! Install will continue, but to boot your system, you'll need to create the bootstrap partition in DiskDrake")); - } - } - } - - if ($o->{isUpgrade}) { - # either one root is defined (and all is ok), or we take the first one we find - my $p = fsedit::get_root_($o->{fstab}); - if (!$p) { - my @l = install_any::find_root_parts($o->{fstab}, $o->{prefix}) or die _("No root partition found to perform an upgrade"); - $p = $o->ask_from_listf(_("Root Partition"), - _("What is the root partition (/) of your system?"), - \&partition_table::description, \@l) or die "setstep exitInstall\n"; - } - install_any::use_root_part($o->{all_hds}, $p, $o->{prefix}); - } elsif ($::expert && $o->isa('interactive::gtk')) { - install_interactive::partition_with_diskdrake($o, $o->{all_hds}); - } else { - install_interactive::partitionWizard($o); - } -} - -#------------------------------------------------------------------------------ -sub rebootNeeded { - my ($o) = @_; - $o->ask_warn('', _("You need to reboot for the partition table modifications to take place")); - - install_steps::rebootNeeded($o); -} - -#------------------------------------------------------------------------------ -sub choosePartitionsToFormat { - my ($o, $fstab) = @_; - - $o->SUPER::choosePartitionsToFormat($fstab); - - my @l = grep { !$_->{isMounted} && $_->{mntpoint} && - (!isSwap($_) || $::expert) && - (!isFat($_) || $_->{notFormatted} || $::expert) && - (!isOtherAvailableFS($_) || $::expert || $_->{toFormat}) - } @$fstab; - $_->{toFormat} = 1 foreach grep { isSwap($_) && !$::expert } @$fstab; - - return if @l == 0 || !$::expert && 0 == grep { ! $_->{toFormat} } @l; - - #- keep it temporary until the guy has accepted - $_->{toFormatTmp} = $_->{toFormat} || $_->{toFormatUnsure} foreach @l; - - $o->ask_from_( - { messages => _("Choose the partitions you want to format"), - advanced_messages => _("Check bad blocks?"), - }, - [ map { - my $e = $_; - ({ - text => partition_table::description($e), type => 'bool', - val => \$e->{toFormatTmp} - }, if_(!isLoopback($_) && !isThisFs("reiserfs", $_) && !isThisFs("xfs", $_) && !isThisFs("jfs", $_), { - text => partition_table::description($e), type => 'bool', advanced => 1, - disabled => sub { !$e->{toFormatTmp} }, - val => \$e->{toFormatCheck} - })) } @l ] - ) or die 'already displayed'; - #- ok now we can really set toFormat - foreach (@l) { - $_->{toFormat} = delete $_->{toFormatTmp}; - $_->{isFormatted} = 0; - } -} - - -sub formatMountPartitions { - my ($o, $fstab) = @_; - my $w; - catch_cdie { - fs::formatMount_all($o->{all_hds}{raids}, $o->{fstab}, $o->{prefix}, sub { - my ($part) = @_; - $w ||= $o->wait_message('', _("Formatting partitions")); - $w->set(isLoopback($part) ? - _("Creating and formatting file %s", $part->{loopback_file}) : - _("Formatting partition %s", $part->{device})); - }); - } sub { - $@ =~ /fsck failed on (\S+)/ or return; - $o->ask_yesorno('', _("Failed to check filesystem %s. Do you want to repair the errors? (beware, you can loose data)", $1), 1); - }; - die _("Not enough swap space to fulfill installation, please add some") if availableMemory < 40 * 1024; -} - -#------------------------------------------------------------------------------ -sub setPackages { - my ($o, $rebuild_needed) = @_; - - my $w = $o->wait_message('', $rebuild_needed ? _("Looking for available packages and rebuilding rpm database...") : - _("Looking for available packages...")); - install_any::setPackages($o, $rebuild_needed); - - if ($rebuild_needed) { - $w->set(_("Finding packages to upgrade...")); - pkgs::selectPackagesToUpgrade($o->{packages}, $o->{prefix}, $o->{base}, $o->{toRemove}, $o->{toSave}); - } else { - $w->set(_("Looking at packages already installed...")); - pkgs::selectPackagesAlreadyInstalled($o->{packages}, $o->{prefix}); - } -} -#------------------------------------------------------------------------------ -sub choosePackages { - my ($o, $packages, $compssUsers, $first_time) = @_; - - #- this is done at the very beginning to take into account - #- selection of CD by user if using a cdrom. - $o->chooseCD($packages) if $o->{method} eq 'cdrom' && !$::oem; - - my $availableC = install_steps::choosePackages(@_); - my $individual = $::expert; - - require pkgs; - - my $min_size = pkgs::selectedSize($packages); - $min_size < $availableC or die _("Your system does not have enough space left for installation or upgrade (%d > %d)", $min_size, $availableC); - - my $min_mark = $::expert ? 3 : 4; - - my $b = pkgs::saveSelected($packages); - my $level = pkgs::setSelectedFromCompssList($packages, { map { $_ => 1 } map { @{$compssUsers->{$_}{flags}} } @{$o->{compssUsersSorted}} }, $min_mark, 0); - my $max_size = pkgs::selectedSize($packages) + 1; #- avoid division by zero. - log::l("max size (level $min_mark) is : " . formatXiB($max_size)); - pkgs::restoreSelected($b); - - $o->chooseGroups($packages, $compssUsers, $min_mark, \$individual, $max_size) if !$::corporate; - - ($o->{packages_}{ind}) = - pkgs::setSelectedFromCompssList($packages, $o->{compssUsersChoice}, $min_mark, $availableC); - - $o->choosePackagesTree($packages) if $individual; - - install_any::warnAboutNaughtyServers($o); -} - -sub choosePackagesTree { - my ($o, $packages, $limit_to_medium) = @_; - - $o->ask_many_from_list('', _("Choose the packages you want to install"), - { - list => [ grep { !$limit_to_medium || pkgs::packageMedium($packages, $_) == $limit_to_medium } - @{$packages->{depslist}} ], - value => \&URPM::Package::flag_selected, - label => \&URPM::Package::name, - sort => 1, - }); -} -sub loadSavePackagesOnFloppy { - my ($o, $packages) = @_; - my $choice = $o->ask_from_listf('', -_("Please choose load or save package selection on floppy. -The format is the same as auto_install generated floppies."), - sub { $_[0]{text} }, - [ { text => _("Load from floppy"), code => sub { - while (1) { - my $w = $o->wait_message(_("Package selection"), _("Loading from floppy")); - log::l("load package selection from floppy"); - my $O = eval { install_any::loadO({}, 'floppy') }; - if ($@) { - $w = undef; #- close wait message. - $o->ask_okcancel('', _("Insert a floppy containing package selection")) - or return; - } else { - install_any::unselectMostPackages($o); - foreach (@{$O->{default_packages} || []}) { - my $pkg = pkgs::packageByName($packages, $_); - pkgs::selectPackage($packages, $pkg) if $pkg; - } - return 1; - } - } - } }, - { text => _("Save on floppy"), code => sub { - log::l("save package selection to floppy"); - install_any::g_default_packages($o, 'quiet'); - } }, - { text => _("Cancel") }, - ]); - $choice->{code} and $choice->{code}(); -} -sub chooseGroups { - my ($o, $packages, $compssUsers, $min_level, $individual, $max_size) = @_; - - #- for all groups available, determine package which belongs to each one. - #- this will enable getting the size of each groups more quickly due to - #- limitation of current implementation. - #- use an empty state for each one (no flag update should be propagated). - -#- OLD VERSION - my $b = pkgs::saveSelected($packages); - install_any::unselectMostPackages($o); - pkgs::setSelectedFromCompssList($packages, {}, $min_level, $max_size); - my $system_size = pkgs::selectedSize($packages); - my ($sizes, $pkgs) = pkgs::computeGroupSize($packages, $min_level); - pkgs::restoreSelected($b); - log::l("system_size: $system_size"); - - my @groups = @{$o->{compssUsersSorted}}; - my %stable_flags = grep_each { $::b } %{$o->{compssUsersChoice}}; - delete $stable_flags{$_} foreach map { @{$compssUsers->{$_}{flags}} } @groups; - - my $compute_size = sub { - my %pkgs; - my %flags = %stable_flags; @flags{@_} = (); - my $total_size; - A: while (my ($k, $size) = each %$sizes) { - Or: foreach (split "\t", $k) { - foreach (split "&&") { - exists $flags{$_} or next Or; - } - $total_size += $size; - $pkgs{$_} = 1 foreach @{$pkgs->{$k}}; - next A; - } - } - log::l("computed size $total_size"); - log::l("chooseGroups: ", join(" ", sort keys %pkgs)); - - int $total_size; - }; - my %val = map { - $_ => ! grep { ! $o->{compssUsersChoice}{$_} } @{$compssUsers->{$_}{flags}} - } @groups; - -# @groups = grep { $size{$_} = round_down($size{$_} / sqr(1024), 10) } @groups; #- don't display the empty or small one (eg: because all packages are below $min_level) - my ($all, $size, $unselect_all); - my $available_size = install_any::getAvailableSpace($o) / sqr(1024); - my $size_to_display = sub { - my $lsize = $system_size + $compute_size->(map { @{$compssUsers->{$_}{flags}} } grep { $val{$_} } @groups); - - #- if a profile is deselected, deselect everything (easier than deselecting the profile packages) - $unselect_all ||= $size > $lsize; - $size = $lsize; - _("Total size: %d / %d MB", pkgs::correctSize($size / sqr(1024)), $available_size); - }; - - while (1) { - if ($available_size < 140) { - # too small to choose anything. Defaulting to no group chosen - $val{$_} = 0 foreach %val; - last; - } - - $o->reallyChooseGroups($size_to_display, $individual, \%val) or return; - last if pkgs::correctSize($size / sqr(1024)) < $available_size; - - $o->ask_warn('', _("Selected size is larger than available space")); - } - - $o->{compssUsersChoice}{$_} = 0 foreach map { @{$compssUsers->{$_}{flags}} } grep { !$val{$_} } keys %val; - $o->{compssUsersChoice}{$_} = 1 foreach map { @{$compssUsers->{$_}{flags}} } grep { $val{$_} } keys %val; - - log::l("compssUsersChoice: " . (!$val{$_} && "not ") . "selected [$_] as [$o->{compssUsers}{$_}{label}]") foreach keys %val; - - $unselect_all and install_any::unselectMostPackages($o); - #- if no group have been chosen, ask for using base system only, or no X, or normal. - unless ($o->{isUpgrade} || grep { $val{$_} } keys %val) { - my $docs = !$o->{excludedocs}; - my $minimal = !grep { $_ } values %{$o->{compssUsersChoice}}; - - $o->ask_from(_("Type of install"), - _("You haven't selected any group of packages. -Please choose the minimal installation you want:"), - [ - { val => \$o->{compssUsersChoice}{X}, type => 'bool', text => _("With X"), disabled => sub { $minimal } }, - if_($::expert || $minimal, - { val => \$docs, type => 'bool', text => _("With basic documentation (recommended!)"), disabled => sub { $minimal } }, - { val => \$minimal, type => 'bool', text => _("Truly minimal install (especially no urpmi)") }, - ), - ], - changed => sub { $o->{compssUsersChoice}{X} = $docs = 0 if $minimal }, - ) or return &chooseGroups; - - $o->{excludedocs} = !$docs || $minimal; - - #- reselect according to user selection. - if ($minimal) { - $o->{compssUsersChoice}{$_} = 0 foreach keys %{$o->{compssUsersChoice}}; - } else { - my $X = $o->{compssUsersChoice}{X}; #- don't let setDefaultPackages modify this one - install_any::setDefaultPackages($o, 'clean'); - $o->{compssUsersChoice}{X} = $X; - } - install_any::unselectMostPackages($o); - } - 1; -} - -sub reallyChooseGroups { - my ($o, $size_to_display, $individual, $val) = @_; - - my $size_text = &$size_to_display; - - my ($path, $all); - $o->ask_from('', _("Package Group Selection"), [ - { val => \$size_text, type => 'label' }, {}, - (map { - my $old = $path; - $path = $o->{compssUsers}{$_}{path}; - if_($old ne $path, { val => translate($path) }), - { - val => \$val->{$_}, - type => 'bool', - disabled => sub { $all }, - text => translate($o->{compssUsers}{$_}{label}), - help => translate($o->{compssUsers}{$_}{descr}), - } - } @{$o->{compssUsersSorted}}), - if_($o->{meta_class} eq 'desktop', { text => _("All"), val => \$all, type => 'bool' }), - if_($individual, { text => _("Individual package selection"), val => $individual, advanced => 1, type => 'bool' }), - ], changed => sub { $size_text = &$size_to_display }) or return; - - if ($all) { - $val->{$_} = 1 foreach keys %$val; - } - 1; -} - -sub chooseCD { - my ($o, $packages) = @_; - my @mediums = grep { $_ != $install_any::boot_medium } pkgs::allMediums($packages); - my @mediumsDescr; - my %mediumsDescr; - - if (!common::usingRamdisk()) { - #- mono-cd in case of no ramdisk - foreach (@mediums) { - pkgs::mediumDescr($packages, $install_any::boot_medium) eq pkgs::mediumDescr($packages, $_) and next; - undef $packages->{mediums}{$_}{selected}; - } - log::l("low memory install, using single CD installation (as it is not ejectable)"); - return; - } - - #- the boot medium is already selected. - $mediumsDescr{pkgs::mediumDescr($packages, $install_any::boot_medium)} = 1; - - #- build mediumDescr according to mediums, this avoid asking multiple times - #- all the medium grouped together on only one CD. - foreach (@mediums) { - my $descr = pkgs::mediumDescr($packages, $_); - exists $mediumsDescr{$descr} or push @mediumsDescr, $descr; - $mediumsDescr{$descr} ||= $packages->{mediums}{$_}{selected}; - } - - #- if no other medium available or a poor beginner, we are choosing for him! - #- note first CD is always selected and should not be unselected! - return if @mediumsDescr == () || !$::expert; - - $o->set_help('chooseCD'); - $o->ask_many_from_list('', -_("If you have all the CDs in the list below, click Ok. -If you have none of those CDs, click Cancel. -If only some CDs are missing, unselect them, then click Ok."), - { - list => \@mediumsDescr, - label => sub { _("Cd-Rom labeled \"%s\"", $_[0]) }, - val => sub { \$mediumsDescr{$_[0]} }, - }) or do { - $mediumsDescr{$_} = 0 foreach @mediumsDescr; #- force unselection of other CDs. - }; - $o->set_help('choosePackages'); - - #- restore true selection of medium (which may have been grouped together) - foreach (@mediums) { - my $descr = pkgs::mediumDescr($packages, $_); - $packages->{mediums}{$_}{selected} = $mediumsDescr{$descr}; - log::l("select status of medium $_ is $packages->{mediums}{$_}{selected}"); - } -} - -#------------------------------------------------------------------------------ -sub installPackages { - my ($o, $packages) = @_; - my ($current, $total) = 0; - - my $w = $o->wait_message(_("Installing"), _("Preparing installation")); - - my $old = \&pkgs::installCallback; - local *pkgs::installCallback = sub { - my ($data, $type, $id, $subtype, $_amount, $_total) = @_; - if ($type eq 'user' && $subtype eq 'install') { - $total = $_amount; - } elsif ($type eq 'inst' && $subtype eq 'start') { - my $p = $data->{depslist}[$id]; - $w->set(_("Installing package %s\n%d%%", $p->name, $total && 100 * $current / $total)); - $current += $p->size; - } else { goto $old } - }; - - #- the modification is not local as the box should be living for other package installation. - #- BEWARE this is somewhat duplicated (but not exactly from gtk code). - undef *install_any::changeMedium; - *install_any::changeMedium = sub { - my ($method, $medium) = @_; - - #- if not using a cdrom medium, always abort. - $method eq 'cdrom' && !$::oem and do { - my $name = pkgs::mediumDescr($o->{packages}, $medium); - local $| = 1; print "\a"; - my $r = $name !~ /commercial/i || ($o->{useless_thing_accepted2} ||= $o->ask_from_list_('', formatAlaTeX($com_license), [ __("Accept"), __("Refuse") ], "Accept") eq "Accept"); - $r &&= $o->ask_okcancel('', _("Change your Cd-Rom! - -Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when done. -If you don't have it, press Cancel to avoid installation from this Cd-Rom.", $name), 1); - return $r; - }; - }; - my $install_result; - catch_cdie { $install_result = $o->install_steps::installPackages($packages) } - sub { - if ($@ =~ /^error ordering package list: (.*)/) { - $o->ask_yesorno('', [ -_("There was an error ordering packages:"), $1, _("Go on anyway?") ], 1) and return 1; - ${$_[0]} = "already displayed"; - } elsif ($@ =~ /^error installing package list: (.*)/) { - $o->ask_yesorno('', [ -_("There was an error installing packages:"), $1, _("Go on anyway?") ], 1) and return 1; - ${$_[0]} = "already displayed"; - } - 0; - }; - if ($pkgs::cancel_install) { - $pkgs::cancel_install = 0; - die "setstep choosePackages\n"; - } - $install_result; -} - -sub afterInstallPackages($) { - my ($o) = @_; - my $w = $o->wait_message('', _("Post-install configuration")); - $o->SUPER::afterInstallPackages($o); -} - -sub copyKernelFromFloppy { - my ($o) = @_; - $o->ask_okcancel('', _("Please insert the Boot floppy used in drive %s", $o->{blank}), 1) or return; - $o->SUPER::copyKernelFromFloppy(); -} - -sub updateModulesFromFloppy { - my ($o) = @_; - $o->ask_okcancel('', _("Please insert the Update Modules floppy in drive %s", $o->{updatemodules}), 1) or return; - $o->SUPER::updateModulesFromFloppy(); -} - -#------------------------------------------------------------------------------ -sub configureNetwork { - my ($o, $first_time, $noauto) = @_; - require network::netconnect; - network::netconnect::main($o->{prefix}, $o->{netcnx} ||= {}, $o->{netc}, $o->{mouse}, $o, $o->{intf}, - $first_time, $o->{lang} eq "fr_FR" && $o->{keyboard} eq "fr", $noauto); -} - -#-configureNetworkIntf moved to network - -#-configureNetworkNet moved to network -#------------------------------------------------------------------------------ -#-pppConfig moved to any.pm -#------------------------------------------------------------------------------ -sub installCrypto { - my $license = -_("You now have the opportunity to download encryption software. - -WARNING: - -Due to different general requirements applicable to these software and imposed -by various jurisdictions, customer and/or end user of theses software should -ensure that the laws of his/their jurisdiction allow him/them to download, stock -and/or use these software. - -In addition customer and/or end user shall particularly be aware to not infringe -the laws of his/their jurisdiction. Should customer and/or end user not -respect the provision of these applicable laws, he/they will incure serious -sanctions. - -In no event shall Mandrakesoft nor its manufacturers and/or suppliers be liable -for special, indirect or incidental damages whatsoever (including, but not -limited to loss of profits, business interruption, loss of commercial data and -other pecuniary losses, and eventual liabilities and indemnification to be paid -pursuant to a court decision) arising out of use, possession, or the sole -downloading of these software, to which customer and/or end user could -eventually have access after having sign up the present agreement. - - -For any queries relating to these agreement, please contact -Mandrakesoft, Inc. -2400 N. Lincoln Avenue Suite 243 -Altadena California 91001 -USA"); - goto &installUpdates; #- remove old code, keep this one ok though by transfering to installUpdates. -} - -sub installUpdates { - my ($o) = @_; - my $u = $o->{updates} ||= {}; - - $o->hasNetwork or return; - - is_empty_hash_ref($u) and $o->ask_yesorno('', -formatAlaTeX( -_("You now have the opportunity to download updated packages. These packages -have been released after the distribution was released. They may -contain security or bug fixes. - -To download these packages, you will need to have a working Internet -connection. - -Do you want to install the updates ?"))) || return; - - #- bring all interface up for installing crypto packages. - install_interactive::upNetwork($o); - - require crypto; - eval { - my @mirrors = do { my $w = $o->wait_message('', - _("Contacting Mandrake Linux web site to get the list of available mirrors...")); - crypto::mirrors() }; - #- if no mirror have been found, use current time zone and propose among available. - $u->{mirror} ||= crypto::bestMirror($o->{timezone}{timezone}); - $u->{mirror} = $o->ask_from_treelistf('', - _("Choose a mirror from which to get the packages"), - '|', - \&crypto::mirror2text, - \@mirrors, - $u->{mirror}); - }; - return if $@ || !$u->{mirror}; - - my $update_medium = do { - my $w = $o->wait_message('', _("Contacting the mirror to get the list of available packages...")); - crypto::getPackages($o->{prefix}, $o->{packages}, $u->{mirror}); - }; - - if ($update_medium) { - if ($o->choosePackagesTree($o->{packages}, $update_medium)) { - $o->pkg_install; - } else { - #- make sure to not try to install the packages (which are automatically selected by getPackage above). - #- this is possible by deselecting the medium (which can be re-selected above). - delete $update_medium->{selected}; - } - #- update urpmi even, because there is an hdlist available and everything is good, - #- this will allow user to update the medium but update his machine later. - $o->install_urpmi; - } - - #- stop interface using ppp only. FIXME REALLY TOCHECK isdn (costly network) ? - # FIXME damien install_interactive::downNetwork($o, 'pppOnly'); -} - - -#------------------------------------------------------------------------------ -sub configureTimezone { - my ($o, $clicked) = @_; - - require timezone; - $o->{timezone}{timezone} = $o->ask_from_treelist('', _("Which is your timezone?"), '/', [ timezone::getTimeZones($::g_auto_install ? '' : $o->{prefix}) ], $o->{timezone}{timezone}) || return; - $o->set_help('configureTimezoneGMT'); - - my $ntp = to_bool($o->{timezone}{ntp}); - $o->ask_from('', '', [ - { text => _("Hardware clock set to GMT"), val => \$o->{timezone}{UTC}, type => 'bool' }, - { text => _("Automatic time synchronization (using NTP)"), val => \$ntp, type => 'bool' }, - ]) or goto &configureTimezone - if $::expert || $clicked; - if ($ntp) { - my @servers = split("\n", timezone::ntp_servers()); - - $o->ask_from('', '', - [ { label => _("NTP Server"), val => \$o->{timezone}{ntp}, list => \@servers, not_edit => 0 } ] - ) or goto &configureTimezone; - $o->{timezone}{ntp} =~ s/.*\((.+)\)/$1/; - } else { - $o->{timezone}{ntp} = ''; - } - install_steps::configureTimezone($o); -} - -#------------------------------------------------------------------------------ -sub configureServices { - my ($o, $clicked) = @_; - require services; - $o->{services} = services::ask($o, $o->{prefix}) if $::expert || $clicked; - install_steps::configureServices($o); -} - -sub summary { - my ($o, $first_time) = @_; - require pkgs; - - if ($first_time) { - #- auto-detection - $o->configurePrinter(0) if !$::expert; - install_any::preConfigureTimezone($o); - } - my $mouse_name; - my $format_mouse = sub { $mouse_name = translate($o->{mouse}{type}) . ' ' . translate($o->{mouse}{name}) }; - &$format_mouse; - - #- format printer description in a better way - my $format_printers = sub { - my $printer = $o->{printer}; - if (is_empty_hash_ref($printer->{configured})) { - pkgs::packageByName($o->{packages}, 'cups')->flag_installed and return _("Remote CUPS server"); - return _("No printer"); - } - my $entry; - foreach ($printer->{currentqueue}, - map { $_->{queuedata} } ($printer->{configured}{$printer->{DEFAULT}}, values %{$printer->{configured}})) { - $_ && ($_->{make} || $_->{model}) and return "$_->{make} $_->{model}"; - } - return _("Remote CUPS server"); #- fall back in case of something wrong. - }; - - my @sound_cards = (arch() =~ /ppc/ ? \&modules::load_category : \&modules::probe_category)->('multimedia/sound'); - - #- if no sound card are detected AND the user selected things needing a sound card, - #- propose a special case for ISA cards - my $isa_sound_card = - !@sound_cards && ($o->{compssUsersChoice}{GAMES} || $o->{compssUsersChoice}{AUDIO}) && - sub { - if ($o->ask_yesorno('', _("Do you have an ISA sound card?"))) { - $o->do_pkgs->install('sndconfig'); - $o->ask_warn('', _("Run \"sndconfig\" after installation to configure your sound card")); - } else { - $o->ask_warn('', _("No sound card detected. Try \"harddrake\" after installation")); - } - }; - - $o->ask_from_({ - messages => _("Summary"), - cancel => '', - }, [ -{ label => _("Mouse"), val => \$mouse_name, clicked => sub { $o->selectMouse(1); mouse::write($o->{prefix}, $o->{mouse}); &$format_mouse } }, -{ label => _("Keyboard"), val => \$o->{keyboard}, clicked => sub { $o->selectKeyboard(1) }, format => sub { translate(keyboard::keyboard2text($_[0])) } }, -{ label => _("Timezone"), val => \$o->{timezone}{timezone}, clicked => sub { $o->configureTimezone(1) } }, -{ label => _("Printer"), val => \$o->{printer}, clicked => sub { $o->configurePrinter(1) }, format => $format_printers }, - (map { -{ label => _("ISDN card"), val => $_->{description}, clicked => sub { $o->configureNetwork } } - } grep { $_->{driver} eq 'hisax' } detect_devices::probeall()), - (map { -{ label => _("Sound card"), val => $_->{description} } - } @sound_cards), - if_($isa_sound_card, { label => _("Sound card"), clicked => $isa_sound_card }), - (map { -{ label => _("TV card"), val => $_->{description}, clicked => sub { - require harddrake::bttv; - harddrake::bttv::config($o); -} } } grep { $_->{driver} eq 'bttv' } detect_devices::probeall()), -]); - install_steps::configureTimezone($o); #- do not forget it. -} - -#------------------------------------------------------------------------------ -sub configurePrinter { - my ($o, $clicked) = @_; - $::corporate && !$clicked and return; - - require printer; - require printerdrake; - - #- try to determine if a question should be asked to the user or - #- if he is autorized to configure multiple queues. - my $ask_multiple_printer = ($::expert || $clicked) && 2 || scalar(printerdrake::auto_detect($o)); - $ask_multiple_printer-- or return; - - #- install packages needed for printer::getinfo() - $::testing or $o->do_pkgs->install('foomatic'); - - #- take default configuration, this include choosing the right system - #- currently used by the system. - my $printer = $o->{printer} ||= {}; - eval { add2hash($printer, printer::getinfo($o->{prefix})) }; - - $printer->{PAPERSIZE} = (($o->{lang} =~ /^en_US/) || - ($o->{lang} =~ /^en_CA/) || - ($o->{lang} =~ /^fr_CA/)) ? 'Letter' : 'A4'; - printerdrake::main($printer, $o, $ask_multiple_printer, sub { install_interactive::upNetwork($o, 'pppAvoided') }); - -} - -#------------------------------------------------------------------------------ -sub setRootPassword { - my ($o, $clicked) = @_; - my $sup = $o->{superuser} ||= {}; - my $auth = ($o->{authentication}{LDAP} && __("LDAP") || - $o->{authentication}{NIS} && __("NIS") || - $o->{authentication}{winbind} && __("Windows PDC") || - __("Local files")); - $sup->{password2} ||= $sup->{password} ||= ""; - - return if $o->{security} < 1 && !$clicked; - - $::isInstall and $o->set_help("setRootPassword", if_($::expert, "setRootPasswordAuth")); - - $o->ask_from_( - { - title => _("Set root password"), - messages => _("Set root password"), - cancel => ($o->{security} <= 2 && !$::corporate ? _("No password") : ''), - callbacks => { - complete => sub { - $sup->{password} eq $sup->{password2} or $o->ask_warn('', [ _("The passwords do not match"), _("Please try again") ]), return (1,0); - length $sup->{password} < 2 * $o->{security} - and $o->ask_warn('', _("This password is too short (it must be at least %d characters long)", 2 * $o->{security})), return (1,0); - return 0 - } } }, [ -{ label => _("Password"), val => \$sup->{password}, hidden => 1 }, -{ label => _("Password (again)"), val => \$sup->{password2}, hidden => 1 }, - if_($::expert, -{ label => _("Authentication"), val => \$auth, list => [ __("Local files"), __("LDAP"), __("NIS"), __("Windows PDC") ], format => \&translate }, - ), - ]) or return; - - if ($auth eq __("LDAP")) { - $o->{authentication}{LDAP} ||= "localhost"; #- any better solution ? - $o->{netc}{LDAPDOMAIN} ||= join (',', map { "dc=$_" } split /\./, $o->{netc}{DOMAINNAME}); - $o->ask_from('', - _("Authentication LDAP"), - [ { label => _("LDAP Base dn"), val => \$o->{netc}{LDAPDOMAIN} }, - { label => _("LDAP Server"), val => \$o->{authentication}{LDAP} }, - ]) or goto &setRootPassword; - } else { $o->{authentication}{LDAP} = '' } - if ($auth eq __("NIS")) { - $o->{authentication}{NIS} ||= 'broadcast'; - $o->ask_from('', - _("Authentication NIS"), - [ { label => _("NIS Domain"), val => \ ($o->{netc}{NISDOMAIN} ||= $o->{netc}{DOMAINNAME}) }, - { label => _("NIS Server"), val => \$o->{authentication}{NIS}, list => ["broadcast"], not_edit => 0 }, - ]) or goto &setRootPassword; - } else { $o->{authentication}{NIS} = '' } - if ($auth eq __("Windows PDC")) { - #- maybe we should browse the network like diskdrake --smb and get the 'doze server names in a list - #- but networking isn't setup yet necessarily - $o->ask_from('', - _("Authentication Windows PDC"), - [ { label => _("Windows Domain"), val => \ ($o->{netc}{WINDOMAIN} ||= $o->{netc}{DOMAINNAME}) }, - { label => _("PDC Server Name"), val => \$o->{authentication}{winbind} }, - ]) or goto &setRootPassword; - $o->ask_warn('', _("For this to work for a W2K PDC, you will probably need to have the admin run: C:\>net localgroup \"Pre-Windows 2000 Compatible Access\" everyone /add and reboot the server")); - } else { $o->{authentication}{winbind} = '' } - install_steps::setRootPassword($o); -} - -#------------------------------------------------------------------------------ -#-addUser -#------------------------------------------------------------------------------ -sub addUser { - my ($o, $clicked) = @_; - $o->{users} ||= []; - - if ($o->{security} < 1) { - push @{$o->{users}}, { password => 'mandrake', realname => 'default', icon => 'automagic' } - if !member('mandrake', map { $_->{name} } @{$o->{users}}); - } - if (($o->{security} >= 1 || $clicked)) { - any::ask_users($o->{prefix}, $o, $o->{users}, $o->{security}); - } - any::get_autologin($o->{prefix}, $o); - any::autologin($o->{prefix}, $o, $o); - - install_steps::addUser($o); -} - -#------------------------------------------------------------------------------ -sub createBootdisk { - my ($o, $first_time, $noauto) = @_; - - return if !$noauto && $first_time && !$::expert; - - if (arch() =~ /sparc/) { - #- as probing floppies is a bit more different on sparc, assume always /dev/fd0. - $o->ask_okcancel('', - _("A custom bootdisk provides a way of booting into your Linux system without -depending on the normal bootloader. This is useful if you don't want to install -SILO on your system, or another operating system removes SILO, or SILO doesn't -work with your hardware configuration. A custom bootdisk can also be used with -the Mandrake rescue image, making it much easier to recover from severe system -failures. - -If you want to create a bootdisk for your system, insert a floppy in the first -drive and press \"Ok\"."), - $o->{mkbootdisk}) or return $o->{mkbootdisk} = ''; - my @l = detect_devices::floppies_dev(); - $o->{mkbootdisk} = $l[0] if !$o->{mkbootdisk} || $o->{mkbootdisk} eq "1"; - $o->{mkbootdisk} or return; - } else { - my @l = detect_devices::floppies_dev(); - my %l = ( - 'fd0' => _("First floppy drive"), - 'fd1' => _("Second floppy drive"), - 'Skip' => _("Skip"), - ); - - if ($first_time || @l == 1) { - $o->ask_yesorno('', formatAlaTeX( - _("A custom bootdisk provides a way of booting into your Linux system without -depending on the normal bootloader. This is useful if you don't want to install -LILO (or grub) on your system, or another operating system removes LILO, or LILO doesn't -work with your hardware configuration. A custom bootdisk can also be used with -the Mandrake rescue image, making it much easier to recover from severe system -failures. Would you like to create a bootdisk for your system? -%s", isThisFs('xfs', fsedit::get_root($o->{fstab})) ? _(" - -(WARNING! You're using XFS for your root partition, -creating a bootdisk on a 1.44 Mb floppy will probably fail, -because XFS needs a very large driver).") : '')), - $o->{mkbootdisk}) or return $o->{mkbootdisk} = ''; - $o->{mkbootdisk} = $l[0] if !$o->{mkbootdisk} || $o->{mkbootdisk} eq "1"; - } else { - @l or die _("Sorry, no floppy drive available"); - - $o->ask_from_( - { - messages => _("Choose the floppy drive you want to use to make the bootdisk"), - }, [ { val => \$o->{mkbootdisk}, list => \@l, format => sub { $l{$_[0]} || $_[0] } } ] - ) or return; - } - $o->ask_warn('', _("Insert a floppy in %s", $l{$o->{mkbootdisk}} || $o->{mkbootdisk})); - } - - my $w = $o->wait_message('', _("Creating bootdisk...")); - install_steps::createBootdisk($o); -} - -#------------------------------------------------------------------------------ -sub setupBootloaderBefore { - my ($o) = @_; - my $w = $o->wait_message('', _("Preparing bootloader...")); - $o->set_help('empty'); - $o->SUPER::setupBootloaderBefore($o); -} - -#------------------------------------------------------------------------------ -sub setupBootloader { - my ($o, $more) = @_; - if (arch() =~ /ppc/) { - my $machtype = detect_devices::get_mac_generation(); - if ($machtype !~ /NewWorld/) { - $o->ask_warn('', _("You appear to have an OldWorld or Unknown\n machine, the yaboot bootloader will not work for you.\nThe install will continue, but you'll\n need to use BootX to boot your machine")); - log::l("OldWorld or Unknown Machine - no yaboot setup"); - return; - } - } - if (arch() =~ /^alpha/) { - $o->ask_yesorno('', _("Do you want to use aboot?"), 1) or return; - catch_cdie { $o->SUPER::setupBootloader } sub { - $o->ask_yesorno('', -_("Error installing aboot, -try to force installation even if that destroys the first partition?")); - }; - } else { - any::setupBootloader($o, $o->{bootloader}, $o->{all_hds}, $o->{fstab}, $o->{security}, $o->{prefix}, $more) or return; - - { - my $w = $o->wait_message('', _("Installing bootloader")); - eval { $o->SUPER::setupBootloader }; - } - if (my $err = $@) { - $err =~ /failed$/ or die; - $o->ask_warn('', - [ _("Installation of bootloader failed. The following error occured:"), - grep { !/^Warning:/ } cat_("$o->{prefix}/tmp/.error") ]); - unlink "$o->{prefix}/tmp/.error"; - die "already displayed"; - } elsif (arch() =~ /ppc/) { - my $of_boot = cat_("$o->{prefix}/tmp/of_boot_dev") || die "Can't open $o->{prefix}/tmp/of_boot_dev"; - chop($of_boot); - unlink "$o->{prefix}/tmp/.error"; - $o->ask_warn('', _("You may need to change your Open Firmware boot-device to\n enable the bootloader. If you don't see the bootloader prompt at\n reboot, hold down Command-Option-O-F at reboot and enter:\n setenv boot-device %s,\\\\:tbxi\n Then type: shut-down\nAt your next boot you should see the bootloader prompt.", $of_boot)); - } - } -} - -sub miscellaneous { - my ($o, $clicked) = @_; - - if ($::expert) { - any::choose_security_level($o, \$o->{security}, \$o->{libsafe}) or return; - } - install_steps::miscellaneous($o); -} - -#------------------------------------------------------------------------------ -sub configureX { - my ($o, $clicked) = @_; - $o->configureXBefore; - - symlink "$o->{prefix}/etc/gtk", "/etc/gtk"; - require Xconfig::main; - Xconfig::main::configure_everything($o, $o->{raw_X}, $o->do_pkgs, !$::expert && !$clicked, - { allowFB => $o->{allowFB}, - allowNVIDIA_rpms => install_any::allowNVIDIA_rpms($o->{packages}), - }); - $o->configureXAfter; -} - -#------------------------------------------------------------------------------ -sub generateAutoInstFloppy { - my ($o, $replay) = @_; - - my $floppy = detect_devices::floppy(); - - $o->ask_okcancel('', _("Insert a blank floppy in drive %s", $floppy), 1) or return; - - my $dev = devices::make($floppy); - { - my $w = $o->wait_message('', _("Creating auto install floppy...")); - install_any::getAndSaveAutoInstallFloppy($o, $replay, $dev) or return; - } - common::sync(); #- if you shall remove the floppy right after the LED switches off -} - -#------------------------------------------------------------------------------ -sub exitInstall { - my ($o, $alldone) = @_; - - return $o->{step} = '' unless $alldone || $o->ask_yesorno('', -_("Some steps are not completed. - -Do you really want to quit now?"), 0); - - install_steps::exitInstall($o); - - $o->exit unless $alldone; - - $o->ask_from_no_check( - { - messages => formatAlaTeX( -_("Congratulations, installation is complete. -Remove the boot media and press return to reboot. - - -For information on fixes which are available for this release of Mandrake Linux, -consult the Errata available from: - - -%s - - -Information on configuring your system is available in the post -install chapter of the Official Mandrake Linux User's Guide.", -_("http://www.mandrakelinux.com/en/90errata.php3"))), - cancel => '', - }, - [ - if_($::expert, - { val => \ (my $t1 = _("Generate auto install floppy")), clicked => sub { - my $t = $o->ask_from_list_('', -_("The auto install can be fully automated if wanted, -in that case it will take over the hard drive!! -(this is meant for installing on another box). - -You may prefer to replay the installation. -"), [ __("Replay"), __("Automated") ]); - $t and $o->generateAutoInstFloppy($t eq 'Replay'); - }, advanced => 1 }, - { val => \ (my $t2 = _("Save packages selection")), clicked => sub { install_any::g_default_packages($o) }, advanced => 1 }, - ), - ] - ) if $alldone && !$::g_auto_install; -} - - -#-###################################################################################### -#- Misc Steps Functions -#-###################################################################################### - -#-###################################################################################### -#- Wonderful perl :( -#-###################################################################################### -1; |