summaryrefslogtreecommitdiffstats
path: root/perl-install/install_steps_interactive.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/install_steps_interactive.pm')
-rw-r--r--perl-install/install_steps_interactive.pm1131
1 files changed, 0 insertions, 1131 deletions
diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm
deleted file mode 100644
index e74789c8c..000000000
--- a/perl-install/install_steps_interactive.pm
+++ /dev/null
@@ -1,1131 +0,0 @@
-package install_steps_interactive; # $Id$
-
-
-use diagnostics;
-use strict;
-use vars qw(@ISA);
-
-@ISA = qw(install_steps);
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:common :file :functional :system);
-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) = @_;
- $err =~ s/ at .*?$/\./ unless $::testing; #- avoid error message.
- $o->ask_warn(_("Error"), [ _("An error occurred"), $err ]);
-}
-
-sub kill_action {
- my ($o) = @_;
- $o->kill;
-}
-
-#-######################################################################################
-#- Steps Functions
-#-######################################################################################
-#------------------------------------------------------------------------------
-sub selectLanguage($) {
- my ($o) = @_;
-
- $o->{lang} = $o->ask_from_listf("Language",
- _("Please, choose a language to use."),
- \&lang::lang2text,
- [ lang::list() ],
- $o->{lang});
- install_steps::selectLanguage($o);
-
- $o->ask_warn('',
-"If you see this message it is because you choose 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/ && translate("_I18N_");
-
- unless ($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 Linux-Mandrake 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 Linux-Mandrake distribution.
-
-
-1. License Agreement
-
-Please read carefully this document. 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 Linux-Mandrake 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\", \"Linux-Mandrake\" 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") ], "Accept") eq "Accept" or $o->exit;
- }
-}
-#------------------------------------------------------------------------------
-sub selectKeyboard($) {
- my ($o, $clicked) = @_;
-
- $o->{keyboard} = $o->ask_from_listf_(_("Keyboard"),
- _("Please, choose your keyboard layout."),
- \&keyboard::keyboard2text,
- [ keyboard::xmodmaps() ],
- $o->{keyboard});
- delete $o->{keyboard_unsafe};
-
- if ($::expert && ref($o) !~ /newt/) { #- newt is buggy with big windows :-(
- $o->set_help('selectLangs');
- $o->{langs} ||= [ $o->{lang} ];
- my $all = $o->{langs}[0] eq 'all';
- $o->{langs} = $o->ask_many_from_list('',
- _("You can choose other languages that will be available after install"),
- {
- list => [ lang::list() ],
- label => sub { lang::lang2text($_) },
- values => $o->{langs},
- sort => 1,
- },
- { list => ['all'], label => sub { _("All") }, ref => sub { \$all }, shadow => 0 }) or goto &selectKeyboard;
- $o->{langs} = [ 'all' ] if $all;
- }
- 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));
-
- $::live ? 'Update' : $o->ask_from_list_(_("Install/Update"), _("Is this an install or an update?"), $l2, $def2);
-}
-
-#------------------------------------------------------------------------------
-sub selectInstallClass($@) {
- my ($o, @classes) = @_;
-
- my %c = my @c = (
- $::corporate ? () : (
- _("Recommended") => "beginner",
- ),
- $o->{meta_class} eq 'desktop' ? () : (
- _("Customized") => "specific",
- _("Expert") => "expert",
- ),
- );
-
- $o->set_help('selectInstallClassCorpo') if $::corporate;
-
- my $verifInstallClass = sub {
- $::beginner = $c{$_[0]} eq "beginner";
- $::expert = $c{$_[0]} eq "expert" &&
- $o->ask_from_list_('',
-_("Are you sure you are an expert?
-You will be allowed to make powerful but dangerous things here.
-
-You will be asked questions such as: ``Use shadow file for passwords?'',
-are you ready to answer that kind of questions?"),
- [ _("Customized"), _("Expert") ]) ne "Customized";
- };
-
- $o->{isUpgrade} = $o->selectInstallClass1($verifInstallClass,
- first(list2kv(@c)), ${{reverse %c}}{$::beginner ? "beginner" : $::expert ? "expert" : "specific"},
- [ __("Install"), __("Update") ], $o->{isUpgrade} ? "Update" : "Install") eq "Update";
-
- if ($::corporate || $::beginner) {
- delete $o->{installClass};
- } else {
- my %c = (
- normal => _("Workstation"),
- developer => _("Development"),
- server => _("Server"),
- );
- $o->set_help('selectInstallClass2');
- $o->{installClass} = $o->ask_from_listf(_("Install Class"),
- _("What is your system used for?"),
- sub { $c{$_[0]} },
- [ keys %c ],
- $o->{installClass});
- }
- 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_treelistf('', _("Please, choose the type of your mouse."), '|',
- sub { join '|', map { translate($_) } split '\|', $_[0] },
- [ mouse::fullnames ], $prev)) 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 ]);
- }
-
- any::setup_thiskind($o, 'usb', !$::expert, 0, $o->{pcmcia}) if $o->{mouse}{device} eq "usbmouse";
- eval {
- devices::make("usbmouse");
- modules::load("usbmouse");
- modules::load("mousedev");
- } if $o->{mouse}{device} eq "usbmouse";
-
- $o->SUPER::selectMouse;
-}
-#------------------------------------------------------------------------------
-sub setupSCSI {
- my ($o) = @_;
-
- if ($o->{pcmcia} && !$::noauto) {
- my $w = $o->wait_message(_("PCMCIA"), _("Configuring PCMCIA cards..."));
- modules::configure_pcmcia($o->{pcmcia});
- }
- {
- my $w = $o->wait_message(_("IDE"), _("Configuring IDE"));
- modules::load_ide();
- }
- any::setup_thiskind($o, 'scsi|disk', $_[1], $_[2], $o->{pcmcia});
-}
-
-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 available partitions") if @fstab == 0;
-
- {
- my $w = $o->wait_message('', _("Scanning partitions to find mount points"));
- install_any::suggest_mount_points($o->{hds}, $o->{prefix}, 'uniq');
- log::l("default mntpoint $_->{mntpoint} $_->{device}") foreach @fstab;
- }
- if (@fstab == 1) {
- $fstab[0]{mntpoint} = '/';
- } else {
- $o->ask_from_entries_refH('',
- _("Choose the mount points"),
- [ map { partition_table_raw::description($_) =>
- { val => \$_->{mntpoint}, not_edit => 0, list => [ '', fsedit::suggestions_mntpoint([]) ] }
- } @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 blanking bad partitions (ALL DATA will be lost!).
-The other solution is to disallow 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 ($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}) ||
- $o->ask_from_listf(_("Root Partition"),
- _("What is the root partition (/) of your system?"),
- \&partition_table_raw::description,
- [ install_any::find_root_parts($o->{hds}, $o->{prefix}) ]) or die "setstep exitInstall\n";
- install_any::use_root_part($o->{fstab}, $p, $o->{prefix});
- } elsif ($::expert && ref($o) =~ /gtk/) {
- install_interactive::partition_with_diskdrake($o, $o->{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} && !$_->{isFormatted} && $_->{mntpoint} && !($::beginner && isSwap($_)) &&
- (!isOtherAvailableFS($_) || $::expert || $_->{toFormat})
- } @$fstab;
- $_->{toFormat} = 1 foreach grep { $::beginner && isSwap($_) } @$fstab;
-
- return if @l == 0 || $::beginner && 0 == grep { ! $_->{toFormat} } @l;
-
- my $name2label = sub {
- sprintf("%s %s", isSwap($_) ? type2name($_->{type}) : $_->{mntpoint},
- isLoopback($_) ? $::expert && loopback::file($_) : partition_table_raw::description($_));
- };
-
- #- keep it temporary until the guy has accepted
- my $toFormat = $o->ask_many_from_list('', _("Choose the partitions you want to format"),
- {
- list => \@l,
- label => $name2label,
- value => sub { $_->{toFormat} || $_->{toFormatUnsure} },
- }) or die "already displayed";
- #- ok now we can really set toFormat
- $_->{toFormat} = 1 foreach @$toFormat;
-
- my @m = grep { $_->{toFormat} && !isLoopback($_) && !isReiserfs($_) } @l;
- !@m || $o->ask_many_from_list('', _("Check bad blocks?"),
- {
- list => \@m,
- label => $name2label,
- ref => sub { \$_->{toFormatCheck} },
- }) or goto &choosePartitionsToFormat if $::expert;
-}
-
-
-sub formatMountPartitions {
- my ($o, $fstab) = @_;
- my $w = $o->wait_message('', _("Formatting partitions"));
- fs::formatMount_all($o->{raid}, $o->{fstab}, $o->{prefix}, sub {
- my ($part) = @_;
- $w->set(isLoopback($part) ?
- _("Creating and formatting file %s", loopback::file($part)) :
- _("Formatting partition %s", $part->{device}));
- });
- die _("Not enough swap to fulfill installation, please add some") if availableMemory < 40 * 1024;
-}
-
-#------------------------------------------------------------------------------
-sub setPackages {
- my ($o) = @_;
- my $w = $o->wait_message('', _("Looking for available packages"));
- $o->SUPER::setPackages;
-}
-#------------------------------------------------------------------------------
-sub selectPackagesToUpgrade {
- my ($o) = @_;
- my $w = $o->wait_message('', _("Finding packages to upgrade"));
- $o->SUPER::selectPackagesToUpgrade();
-}
-#------------------------------------------------------------------------------
-sub choosePackages {
- my ($o, $packages, $compss, $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';
-
- my $availableC = install_steps::choosePackages(@_);
- my $individual = $::expert;
-
- require pkgs;
-
- my $min_size = pkgs::selectedSize($packages);
- $min_size < $availableC or die _("Your system has not enough space left for installation or upgrade (%d > %d)", $min_size, $availableC);
-
- my $min_mark = $::beginner ? 25 : $::expert ? 0 : 1;
-
- my $b = pkgs::saveSelected($packages);
- my ($ind, $level) = pkgs::setSelectedFromCompssList($o->{compssListLevels}, $packages, $min_mark, 0, $o->{installClass});
- my $max_size = pkgs::selectedSize($packages) + 1; #- avoid division by zero.
- pkgs::restoreSelected($b);
-
- $o->chooseGroups($packages, $compssUsers, $min_mark, $ind, \$individual, $max_size) unless $::beginner || $::corporate;
-
- my $size2install = min($availableC, do {
- my $max = round_up(min($max_size, $availableC) / sqr(1024), 100);
-
- if ($::beginner) {
- my (@l);
- my @text = (__("Minimum (%dMB)"), __("Recommended (%dMB)"), __("Complete (%dMB)"));
- if ($o->{meta_class} eq 'desktop') {
- @l = (300, 500, 800, 0);
- $max > $l[2] or splice(@l, 2, 1);
- $max > $l[1] or splice(@l, 1, 1);
- $max > $l[0] or @l = $max;
- $text[$#l] = __("Custom");
- } else {
- @l = (300, 700, $max);
- $l[2] > $l[1] + 200 or splice(@l, 1, 1); #- not worth proposing too alike stuff
- $l[1] > $l[0] + 100 or splice(@l, 0, 1);
- }
- $o->set_help('empty');
- $o->ask_from_listf('', _("Select the size you want to install"), sub { _ ($text[$_[1]], $_[0]) }, \@l, $l[1]) * sqr(1024);
- } else {
- $o->chooseSizeToInstall($packages, $min_size, $max_size, $availableC, $individual) || goto &choosePackages;
- }
- });
- if (!$size2install) { #- special case for desktop
- $o->chooseGroups($packages, $compssUsers, $min_mark, $ind) or goto &choosePackages;
- $size2install = $availableC;
- }
- ($o->{packages_}{ind}) =
- pkgs::setSelectedFromCompssList($o->{compssListLevels}, $packages, $min_mark, $size2install, $o->{installClass});
-
- $o->choosePackagesTree($packages, $compss) if $individual;
-}
-
-sub chooseSizeToInstall {
- my ($o, $packages, $min, $max, $availableC) = @_;
- $availableC * 0.7;
-}
-sub choosePackagesTree {}
-
-sub chooseGroups {
- my ($o, $packages, $compssUsers, $min_level, $ind, $individual, $max_size) = @_;
-
- my %size;
- my $base = pkgs::selectedSize($packages);
- foreach (@{$o->{compssUsersSorted}}) {
- my $b = pkgs::saveSelected($packages);
- $_->{values}[$ind] < $min_level or pkgs::selectPackage($packages, $_) foreach @{$compssUsers->{$_}};
- $size{$_} = pkgs::selectedSize($packages) - $base;
- pkgs::restoreSelected($b);
- }
-
- my @groups = @{$o->{compssUsersSorted}};
- if ($o->{meta_class} ne 'desktop') {
- push @groups, __("Miscellaneous");
-
- my $b = pkgs::saveSelected($packages);
- foreach (@{$o->{compssUsersSorted}}) {
- $_->{values}[$ind] < $min_level or pkgs::selectPackage($packages, $_) foreach @{$compssUsers->{$_}};
- }
- $size{Miscellaneous} = $max_size - pkgs::selectedSize($packages);
- pkgs::restoreSelected($b);
- }
- @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;
- $o->ask_many_from_list('', _("Package Group Selection"),
- { list => \@groups,
- help => sub { translate($o->{compssUsersDescr}{$_}) },
- ref => sub { \$o->{compssUsersChoice}{$_} },
- icon2f => sub {
- my $f = "/usr/share/icons/" . ($o->{compssUsersIcons}{$_} || 'default');
- -e "$f.xpm" or $f .= "_section";
- -e "$f.xpm" or $f = '/usr/share/icons/default_section';
- "$f.xpm";
- },
- label => sub { translate($_) . ($size{$_} ? sprintf " (%d%s)", $size{$_}, _("MB") : '') },
- },
- $o->{meta_class} eq 'desktop' ? { list => [ _("All") ], ref => sub { \$all }, shadow => 0 } : (),
- $individual ? { list => [ _("Individual package selection") ], ref => sub { $individual } } : (),
- ) or return;
- if ($all) {
- $o->{compssUsersChoice}{$_} = 1 foreach @{$o->{compssUsersSorted}}, "Miscellaneous";
- }
- unless ($o->{compssUsersChoice}{Miscellaneous}) {
- my %l;
- $l{@{$compssUsers->{$_}}} = () foreach @{$o->{compssUsersSorted}};
- exists $l{$_} or pkgs::packageSetFlagSkip($_, 1) foreach values %{$packages->[0]};
- }
- foreach (@{$o->{compssUsersSorted}}) {
- $o->{compssUsersChoice}{$_} or pkgs::skipSetWithProvides($packages, @{$compssUsers->{$_}});
- }
- foreach (@{$o->{compssUsersSorted}}) {
- $o->{compssUsersChoice}{$_} or next;
- foreach (@{$compssUsers->{$_}}) {
- pkgs::packageSetFlagSkip($_, 0);
- }
- }
- 1;
-}
-
-sub chooseCD {
- my ($o, $packages) = @_;
- my @mediums = grep { $_ != $install_any::boot_medium } pkgs::allMediums($packages);
- my @mediumsDescr = ();
- my %mediumsDescr = ();
-
- unless (grep { /ram3/ } cat_("/proc/mounts")) {
- #- mono-cd in case of no ramdisk
- undef $packages->[2]{$_}{selected} foreach @mediums;
- log::l("low memory install, using single CD installation (as it is not ejectable)");
- return;
- }
-
- #- 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 scalar(@mediums) == 0 || $::beginner;
-
- #- 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->[2]{$_}{selected};
- }
-
- $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\"", $_) },
- ref => sub { \$mediumsDescr{$_} },
- }) or do {
- map { $mediumsDescr{$_} = 0 } @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->[2]{$_}{selected} = $mediumsDescr{$descr};
- }
-}
-
-#------------------------------------------------------------------------------
-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 $m = shift;
- if ($m =~ /^Starting installation/) {
- $total = $_[1];
- } elsif ($m =~ /^Starting installing package/) {
- my $name = $_[0];
- $w->set(_("Installing package %s\n%d%%", $name, $total && 100 * $current / $total));
- $current += pkgs::packageSize(pkgs::packageByName($o->{packages}, $name));
- } else { unshift @_, $m; goto $old }
- };
- $o->SUPER::installPackages($packages);
-}
-
-sub afterInstallPackages($) {
- my ($o) = @_;
- my $w = $o->wait_message('', _("Post-install configuration"));
- $o->SUPER::afterInstallPackages($o);
-}
-
-#------------------------------------------------------------------------------
-sub configureNetwork {
- my ($o, $first_time) = @_;
- require netconnect;
- netconnect::main($o->{prefix}, $o->{netcnx} ||= {}, $o->{netc}, $o->{mouse}, $o, $o->{pcmcia}, $o->{intf},
- sub { $o->pkg_install(@_) }, $first_time, $o->{lang} eq "fr_FR" && $o->{keyboard} eq "fr");
-}
-
-#-configureNetworkIntf moved to network
-
-#-configureNetworkNet moved to network
-#------------------------------------------------------------------------------
-#-pppConfig moved to any.pm
-#------------------------------------------------------------------------------
-sub installCrypto {
- my ($o) = @_;
- my $u = $o->{crypto} ||= {};
-
- $::expert and $o->hasNetwork or return;
-
- is_empty_hash_ref($u) and $o->ask_yesorno('',
-_("You have now the possibility to download software aimed for encryption.
-
-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")) || return;
-
- require crypto;
- eval {
- $u->{mirror} = $o->ask_from_listf('',
- _("Choose a mirror from which to get the packages"),
- \&crypto::mirror2text,
- [ crypto::mirrors() ],
- $u->{mirror});
- };
- return if $@;
-
- #- bring all interface up for installing crypto packages.
- install_interactive::upNetwork($o);
-
- my @packages = do {
- my $w = $o->wait_message('', _("Contacting the mirror to get the list of available packages"));
- crypto::getPackages($o->{prefix}, $o->{packages}, $u->{mirror}); #- make sure $o->{packages} is defined when testing
- };
- $u->{packages} = $o->ask_many_from_list('', _("Please choose the packages you want to install."), { list => \@packages, values => $u->{packages} }) or return;
- $o->pkg_install(@{$u->{packages}});
-
- #- stop interface using ppp only.
- install_interactive::downNetwork($o, 'pppOnly');
-}
-
-#------------------------------------------------------------------------------
-sub configureTimezone {
- my ($o, $f, $clicked) = @_;
-
- require timezone;
- $o->{timezone}{timezone} = $o->ask_from_treelist('', _("Which is your timezone?"), '/', [ timezone::getTimeZones($::g_auto_install ? '' : $o->{prefix}) ], $o->{timezone}{timezone});
- $o->set_help('configureTimezoneGMT');
- $o->{timezone}{UTC} = $o->ask_yesorno('', _("Is your hardware clock set to GMT?"), $o->{timezone}{UTC}) if $::expert || $clicked;
- install_steps::configureTimezone($o, $f);
-}
-
-#------------------------------------------------------------------------------
-sub configureServices {
- my ($o) = @_;
- require services;
- $o->{services} = services::ask($o, $o->{prefix});
- install_steps::configureServices($o);
-}
-
-#------------------------------------------------------------------------------
-sub configurePrinter {
- my ($o, $clicked) = @_;
-
- $::corporate and return;
-
- require printer;
- require printerdrake;
-
- if ($::beginner && !$clicked) {
- printerdrake::auto_detect($o) or return;
- }
-
- #- bring interface up for installing ethernet packages but avoid ppp by default,
- #- else the guy know what he is doing...
- #install_interactive::upNetwork($o, 'pppAvoided');
-
- #- take default configuration, this include choosing the right system
- #- currently used by the system.
- eval { add2hash($o->{printer} ||= {}, printer::getinfo($o->{prefix})) };
-
- #- figure out what printing system to use, currently are suported cups and lpr,
- #- in case this has not be detected above.
- $::expert or $o->{printer}{mode} ||= 'CUPS';
- if ($::expert || !$o->{printer}{mode}) {
- $o->set_help('configurePrinterSystem');
- $o->{printer}{mode} = $o->ask_from_list_([''], _("Which printing system do you want to use?"),
- [ 'CUPS', 'lpr', __("None") ],
- );
- $o->{printer}{want} = $o->{printer}{mode} ne 'None';
- $o->{printer}{want} or $o->{printer}{mode} = undef, return;
- $o->set_help('configurePrinter');
- }
-
- $o->{printer}{PAPERSIZE} = $o->{lang} eq 'en' ? 'letter' : 'a4';
- printerdrake::main($o->{printer}, $o, sub { $o->pkg_install(@_) }, sub { install_interactive::upNetwork($o, 'pppAvoided') });
-
- $o->pkg_install_if_requires_satisfied('xpp', 'kups');
-}
-
-#------------------------------------------------------------------------------
-sub setRootPassword {
- my ($o, $clicked) = @_;
- my $sup = $o->{superuser} ||= {};
- my $nis = $o->{authentication}{NIS};
- $sup->{password2} ||= $sup->{password} ||= "";
-
- return if $o->{security} < 1 && !$clicked;
-
- $o->set_help("setRootPassword",
- $o->{installClass} =~ "server" || $::expert ? "setRootPasswordMd5" : (),
- $::beginner ? () : "setRootPasswordNIS");
-
- $o->ask_from_entries_refH([_("Set root password"), _("Ok"), $o->{security} > 2 || $::corporate ? () : _("No password")],
- [ _("Set root password"), "\n" ], [
-_("Password") => { val => \$sup->{password}, hidden => 1 },
-_("Password (again)") => { val => \$sup->{password2}, hidden => 1 },
- $o->{installClass} eq "server" || $::expert ? (
-_("Use shadow file") => { val => \$o->{authentication}{shadow}, type => 'bool', text => _("shadow") },
-_("Use MD5 passwords") => { val => \$o->{authentication}{md5}, type => 'bool', text => _("MD5") },
- ) : (), $::beginner ? () : (
-_("Use NIS") => { val => \$nis, type => 'bool', text => _("yellow pages") },
- )
- ],
- complete => sub {
- $sup->{password} eq $sup->{password2} or $o->ask_warn('', [ _("The passwords do not match"), _("Please try again") ]), return (1,1);
- length $sup->{password} < 2 * $o->{security}
- and $o->ask_warn('', _("This password is too simple (must be at least %d characters long)", 2 * $o->{security})), return (1,0);
- return 0
- }
- ) or return;
-
- $o->{authentication}{NIS} &&= $nis;
- $o->ask_from_entries_ref('',
- _("Authentification NIS"),
- [ _("NIS Domain"), _("NIS Server") ],
- [ \ ($o->{netc}{NISDOMAIN} ||= $o->{netc}{DOMAINNAME}),
- { val => \$o->{authentication}{NIS}, list => ["broadcast"] },
- ]) if $nis;
- install_steps::setRootPassword($o);
-}
-
-#------------------------------------------------------------------------------
-#-addUser
-#------------------------------------------------------------------------------
-sub addUser {
- my ($o, $clicked) = @_;
- my $u = $o->{user} ||= {};
- if ($o->{security} < 1) {
- add2hash_($u, { name => "mandrake", password => "mandrake", realname => "default", icon => 'automagic' });
- $o->{users} ||= [ $u ];
- }
- $u->{password2} ||= $u->{password} ||= "";
- $u->{shell} ||= "/bin/bash";
- my @fields = qw(realname name password password2);
- my @shells = map { chomp; $_ } cat_("$o->{prefix}/etc/shells");
-
- if (($o->{security} >= 1 || $clicked)) {
- $u->{icon} = translate($u->{icon});
- if ($o->ask_from_entries_refH(
- [ _("Add user"), _("Accept user"), $o->{security} >= 4 && !@{$o->{users}} ? () : _("Done") ],
- _("Enter a user\n%s", $o->{users} ? _("(already added %s)", join(", ", map { $_->{realname} || $_->{name} } @{$o->{users}})) : ''),
- [
- _("Real name") => \$u->{realname},
- _("User name") => \$u->{name},
- $o->{security} < 2 ? () : (
- _("Password") => {val => \$u->{password}, hidden => 1},
- _("Password (again)") => {val => \$u->{password2}, hidden => 1},
- ), $::beginner ? () : (
- _("Shell") => {val => \$u->{shell}, list => [ any::shells($o->{prefix}) ], not_edit => !$::expert}
- ), $o->{security} > 3 ? () : (
- _("Icon") => {val => \$u->{icon}, list => [ any::facesnames($o->{prefix}) ], icon2f => sub { any::face2xpm($_[0], $o->{prefix}) } },
- ),
- ],
- focus_out => sub {
- if ($_[0] eq 0) {
- $u->{name} ||= lc first($u->{realname} =~ /((\w|-)+)/);
- }
- },
- complete => sub {
- $u->{password} eq $u->{password2} or $o->ask_warn('', [ _("The passwords do not match"), _("Please try again") ]), return (1,3);
- $o->{security} > 3 && length($u->{password}) < 6 and $o->ask_warn('', _("This password is too simple")), return (1,2);
- $u->{name} or $o->ask_warn('', _("Please give a user name")), return (1,0);
- $u->{name} =~ /^[a-z0-9_-]+$/ or $o->ask_warn('', _("The user name must contain only lower cased letters, numbers, `-' and `_'")), return (1,0);
- member($u->{name}, map { $_->{name} } @{$o->{users}}) and $o->ask_warn('', _("This user name is already added")), return (1,0);
- return 0;
- },
- )) {
- push @{$o->{users}}, $o->{user};
- $o->{user} = {};
- goto &addUser;
- }
- }
- install_steps::addUser($o);
-}
-
-
-
-
-#------------------------------------------------------------------------------
-sub createBootdisk {
- my ($o, $first_time) = @_;
-
- return if $first_time && $::beginner;
-
- 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();
- $o->{mkbootdisk} = $l[0] if !$o->{mkbootdisk} || $o->{mkbootdisk} eq "1";
- $o->{mkbootdisk} or return;
- } else {
- my @l = detect_devices::floppies();
- 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?")),
- $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->{mkbootdisk} = $o->ask_from_listf('',
- _("Choose the floppy drive you want to use to make the bootdisk"),
- sub { $l{$_[0]} || $_[0] },
- [ @l, "Skip" ],
- $o->{mkbootdisk});
- return $o->{mkbootdisk} = '' if $o->{mkbootdisk} eq 'Skip';
- }
- $o->ask_warn('', _("Insert a floppy in drive %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() =~ /^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->{hds}, $o->{fstab}, $o->{security}, $o->{prefix}, $more) or return;
-
- eval { $o->SUPER::setupBootloader };
- if ($@) {
- $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";
- }
- }
-}
-
-#------------------------------------------------------------------------------
-#- miscellaneousNetwork moved to network.pm
-#------------------------------------------------------------------------------
-sub miscellaneous {
- my ($o, $clicked) = @_;
- my %l = (
- 0 => _("Welcome To Crackers"),
- 1 => _("Poor"),
- 2 => _("Low"),
- 3 => _("Medium"),
- 4 => _("High"),
- 5 => _("Paranoid"),
- );
- delete @l{0,1,5} unless $::expert;
-
- my $u = $o->{miscellaneous} ||= {};
- exists $u->{LAPTOP} or $u->{LAPTOP} = 1;
- my $s = $o->{security};
-
- install_interactive::tellAboutProprietaryModules($o) unless $clicked;
-
- add2hash_ $o, { useSupermount => $s < 4 && arch() !~ /^sparc/ };
- $s = $l{$s} || $s;
-
- !$::beginner || $clicked and $o->ask_from_entries_refH('',
- _("Miscellaneous questions"), [
-_("Use hard drive optimisations?") => { val => \$u->{HDPARM}, type => 'bool', text => _("(may cause data corruption)") },
-_("Choose security level") => { val => \$s, list => [ map { $l{$_} } ikeys %l ] },
-_("Precise RAM size if needed (found %d MB)", availableRamMB()) => \$u->{memsize},
-arch() !~ /^sparc/ ? (
-_("Removable media automounting") => { val => \$o->{useSupermount}, type => 'bool', text => 'supermount' }, ) : (),
- $::expert ? (
-_("Clean /tmp at each boot") => { val => \$u->{CLEAN_TMP}, type => 'bool' },
- ) : (),
- $o->{pcmcia} && $::expert ? (
-_("Enable multi profiles") => { val => \$u->{profiles}, type => 'bool' },
- ) : (
-_("Enable num lock at startup") => { val => \$u->{numlock}, type => 'bool' },
- ),
- ], complete => sub {
- !$u->{memsize} || $u->{memsize} =~ s/^(\d+)M?$/$1M/i or $o->ask_warn('', _("Give the ram size in MB")), return 1;
- my %m = reverse %l; $ENV{SECURE_LEVEL} = $o->{security} = $m{$s};
- $o->{useSupermount} && $o->{security} > 3 and $o->ask_warn('', _("Can't use supermount in high security level")), return 1;
- $o->{security} == 5 and $o->ask_okcancel('',
-_("beware: IN THIS SECURITY LEVEL, ROOT LOGIN AT CONSOLE IS NOT ALLOWED!
-If you want to be root, you have to login as a user and then use \"su\".
-More generally, do not expect to use your machine for anything but as a server.
-You have been warned.")) || return;
- $u->{numlock} && $o->{pcmcia} and $o->ask_okcancel('',
-_("Be carefull, having numlock enabled causes a lot of keystrokes to
-give digits instead of normal letters (eg: pressing `p' gives `6')")) || return;
- 0; }
- ) || return;
-
- install_steps::miscellaneous($o);
-}
-
-#------------------------------------------------------------------------------
-sub configureX {
- my ($o, $clicked) = @_;
- $o->configureXBefore;
-
- require Xconfig;
- require Xconfigurator;
- #- by default do not use existing configuration, so new card will be detected.
- if ($o->{isUpgrade} && -r "$o->{prefix}/etc/X11/XF86Config") {
- if ($::beginner || $o->ask_yesorno('', _("Use existing configuration for X11?"), 1)) {
- Xconfig::getinfoFromXF86Config($o->{X}, $o->{prefix});
- }
- }
-
- #- strange, xfs must not be started twice...
- #- trying to stop and restart it does nothing good too...
- my $xfs_started if 0;
- run_program::rooted($o->{prefix}, "/etc/rc.d/init.d/xfs", "start") unless $::live || $xfs_started;
- $xfs_started = 1;
-
- { local $::testing = 0; #- unset testing
- local $::auto = $::beginner && !$clicked;
-
- Xconfigurator::main($o->{prefix}, $o->{X}, $o, $o->{allowFB}, bool($o->{pcmcia}), sub {
- my ($server, @l) = @_;
- $o->pkg_install("XFree86-$server", @l);
- });
- }
- $o->configureXAfter;
-}
-
-#------------------------------------------------------------------------------
-sub generateAutoInstFloppy($) {
- my ($o) = @_;
- $::expert || $::g_auto_install or return;
-
- my $floppy = detect_devices::floppy();
- $o->ask_yesorno('',
-_("Do you want to generate an auto install floppy for linux replication?"), $floppy) or return;
-
- $o->ask_warn('', _("Insert a blank floppy in drive %s", $floppy));
-
- require commands;
- my $dev = devices::make($floppy);
-
- my $image = $o->{pcmcia} ? "pcmcia" :
- ${{ hd => 'hd', cdrom => 'cdrom', ftp => 'network', nfs => 'network', http => 'network' }}{$o->{method}};
-
- if (arch() =~ /sparc/) {
- $image .= arch() =~ /sparc64/ && "64"; #- for sparc64 there are a specific set of image.
-
- my $imagefile = "$o->{prefix}/tmp/autoinst.img";
- my $mountdir = "$o->{prefix}/tmp/mount"; -d $mountdir or mkdir $mountdir, 0755;
- my $workdir = "$o->{prefix}/tmp/work"; -d $workdir or rmdir $workdir;
-
- my $w = $o->wait_message('', _("Creating auto install floppy"));
- install_any::getAndSaveFile("images/$image.img", $imagefile) or log::l("failed to write $dev"), return;
- devices::make($_) foreach qw(/dev/loop6 /dev/ram);
-
- run_program::run("losetup", "/dev/loop6", $imagefile);
- fs::mount("/dev/loop6", $mountdir, "romfs", 'readonly');
- commands::cp("-f", $mountdir, $workdir);
- fs::umount($mountdir);
- run_program::run("losetup", "-d", "/dev/loop6");
-
- substInFile { s/timeout.*//; s/^(\s*append\s*=\s*\".*)\"/$1 kickstart=floppy\"/ } "$workdir/silo.conf"; #" for po
- output "$workdir/ks.cfg", install_any::generate_ks_cfg($o);
- output "$workdir/boot.msg", "\n7m",
-"!! If you press enter, an auto-install is going to start.
- ALL data on this computer is going to be lost,
- including any Windows partitions !!
-", "7m\n";
-
- local $o->{partitioning}{clearall} = 1;
- install_any::g_auto_install("$workdir/auto_inst.cfg");
-
- run_program::run("genromfs", "-d", $workdir, "-f", "/dev/ram", "-A", "2048,/..", "-a", "512", "-V", "DrakX autoinst");
- fs::mount("/dev/ram", $mountdir, 'romfs', 0);
- run_program::run("silo", "-r", $mountdir, "-F", "-i", "/fd.b", "-b", "/second.b", "-C", "/silo.conf");
- fs::umount($mountdir);
- commands::dd("if=/dev/ram", "of=$dev", "bs=1440", "count=1024");
-
- commands::rm("-rf", $workdir, $mountdir, $imagefile);
- } else {
- {
- my $w = $o->wait_message('', _("Creating auto install floppy"));
- install_any::getAndSaveFile("images/$image.img", $dev) or log::l("failed to write $dev"), return;
- }
- fs::mount($dev, "/floppy", "vfat", 0);
- substInFile { s/timeout.*//; s/^(\s*append)/$1 kickstart=floppy/ } "/floppy/syslinux.cfg";
-
- unlink "/floppy/help.msg";
- output "/floppy/ks.cfg", install_any::generate_ks_cfg($o);
- output "/floppy/boot.msg", "\n0c",
-"!! If you press enter, an auto-install is going to start.
- All data on this computer is going to be lost !!
-", "07\n";
-
- local $o->{partitioning}{clearall} = 1;
- install_any::g_auto_install("/floppy/auto_inst.cfg");
-
- fs::umount("/floppy");
- }
-}
-
-#------------------------------------------------------------------------------
-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_warn('',
-_("Congratulations, installation is complete.
-Remove the boot media and press return to reboot.
-
-For information on fixes which are available for this release of Linux-Mandrake,
-consult the Errata available from http://www.linux-mandrake.com/.
-
-Information on configuring your system is available in the post
-install chapter of the Official Linux-Mandrake User's Guide.")) if $alldone && !$::g_auto_install;
-}
-
-
-#-######################################################################################
-#- Misc Steps Functions
-#-######################################################################################
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;