summaryrefslogtreecommitdiffstats
path: root/kernel
Commit message (Expand)AuthorAgeFilesLines
* add unionfs module (for rescue images)Olivier Blin2007-07-201-1/+1
* add ide-disk module in disk/rawOlivier Blin2007-07-161-1/+1
* sort ide categoryThierry Vignaud2007-06-281-5/+4
* merge "ide" and "all_ide" categories since we now use fully modularezed ide d...Thierry Vignaud2007-06-281-2/+0
* add support for snd-cmi8788 driverThierry Vignaud2007-06-151-1/+1
* reformat somewhat the listThierry Vignaud2007-05-281-5/+10
* handle snd-cs5530 driverThierry Vignaud2007-05-281-1/+1
* re-sync after the big svn lossPascal Rigaux2007-04-256-450/+77
* handle cpia2 camera driverThierry Vignaud2006-03-011-1/+1
* try ide-generic at endThierry Vignaud2006-02-271-2/+2
* handle new ipw3945 intel wireless driverThierry Vignaud2006-02-241-1/+1
* handle new et61x251 webcam driverThierry Vignaud2006-02-161-1/+1
* move new PATA drivers into the disk/sata category since they behaveThierry Vignaud2006-02-151-1/+2
* handle rt2570 (new wireless driver)Thierry Vignaud2006-02-081-1/+1
* add support for jsm serial driverThierry Vignaud2006-01-301-1/+1
* add support for new snd-als300 sound driverThierry Vignaud2006-01-271-1/+1
* add support for gigabit sky2 driver (appeared in 2.6.16-rc1)Thierry Vignaud2006-01-271-2/+2
* add ioc3_serial driverThierry Vignaud2006-01-051-1/+1
* handle new orinoco_nortel driverThierry Vignaud2006-01-021-1/+1
* typo fixThierry Vignaud2005-12-221-1/+1
* (load_dependencies) handle Mandriva kernel packages' modules.dep (theseThierry Vignaud2005-12-221-0/+1
* handle more PATA driversThierry Vignaud2005-12-191-2/+3
* (load_dependencies) handle kernel packages' modules.dep, not only DrakX' onesThierry Vignaud2005-12-191-0/+2
* move jfs and xfs in fs/local, so that they get included in stage1Olivier Blin2005-12-141-2/+2
* qlogicisp is deadThierry Vignaud2005-11-281-1/+1
* qlogicisp was removed from the kernelThierry Vignaud2005-11-221-1/+1
* all_ide category: only list IDE drivers *not* compiled as modulesThierry Vignaud2005-11-161-3/+3
* add new drivers:Thierry Vignaud2005-11-161-2/+4
* add aic94xx, mptfc, mptsas, snd-asihpi & snd-cs5535audio driversThierry Vignaud2005-11-081-4/+4
* (check) pcitable is compressed nowThierry Vignaud2005-11-081-1/+1
* add ueagle-atm USB ADSL driverThierry Vignaud2005-11-071-1/+1
* add cassini (ethernet) & pdc_adma (SATA) driversThierry Vignaud2005-10-181-2/+2
* don't print empty rejected listOlivier Blin2005-09-291-1/+1
* keep 2.4 compatibility aliases in modules list for stage1Olivier Blin2005-09-291-0/+2
* simplify (Pixel, me sux)Olivier Blin2005-09-291-1/+1
* the perl_checker compliant wayPascal Rigaux2005-09-291-1/+1
* factorize chompsOlivier Blin2005-09-281-4/+3
* fix typoOlivier Blin2005-09-281-1/+1
* restore disambiguating {; (even if perl_checker doesn't support it)Olivier Blin2005-09-281-1/+1
* perl_checker fixesOlivier Blin2005-09-281-2/+2
* reject unavailable modules in stage1 list (#18803)Olivier Blin2005-09-281-1/+6
* use correct directory to list modules when called from another directoryOlivier Blin2005-09-281-2/+3
* split all_modules.tar listing in get_main_modules()Olivier Blin2005-09-281-1/+6
* use all_modules.tar to get modules listOlivier Blin2005-09-281-1/+2
* handle kernel naming such as kernel-i586-up-1GB-2.6*Olivier Blin2005-09-281-1/+1
* use local RPMS directory (/RPMS isn't used anywhere now)Olivier Blin2005-09-281-1/+1
* handle sata_mvThierry Vignaud2005-09-081-1/+1
* add sm56 in network/modemOlivier Blin2005-09-061-1/+1
* ka support (initially from Antoine Ginies and Erwan Velu)Olivier Blin2005-08-281-0/+1
* revert changesFlorent Villard2005-08-032-6/+6
hose CDs, click Cancel. If only some CDs are missing, unselect them, then click Ok."), { list => \@mediumsDescr, label => sub { N("Cd-Rom labeled \"%s\"", $_[0]) }, val => sub { \$mediumsDescr{$_[0]} }, }) or do { $mediumsDescr{$_} = 0 foreach @mediumsDescr; #- force unselection of other CDs. }; } #- restore true selection of medium (which may have been grouped together) foreach (@mediums) { my $descr = pkgs::mediumDescr($packages, $_); $packages->{mediums}{$_}{ignored} and next; $packages->{mediums}{$_}{selected} = $mediumsDescr{$descr}; log::l("select status of medium $_ is $packages->{mediums}{$_}{selected}"); } } #------------------------------------------------------------------------------ sub installPackages { my ($o, $packages) = @_; my ($current, $total) = (0, 0); my $w = $o->wait_message(N("Installing"), N("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 = $total_; } elsif ($type eq 'inst' && $subtype eq 'start') { my $p = $data->{depslist}[$id]; $w->set(N("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 or an iso image, always abort. return if !install_any::method_allows_medium_change($method) || $::oem; 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(install_messages::com_license()), [ N_("Accept"), N_("Refuse") ], "Accept") eq "Accept"); if ($method =~ /-iso$/) { $r = install_any::changeIso($name); } else { $r &&= $o->ask_okcancel('', N("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('', [ N("There was an error ordering packages:"), $1, N("Go on anyway?") ], 1) and return 1; ${$_[0]} = "already displayed"; } elsif ($@ =~ /^error installing package list: (.*)/) { $o->ask_yesorno('', [ N("There was an error installing packages:"), $1, N("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('', N("Post-install configuration")); $o->SUPER::afterInstallPackages; } sub updateModulesFromFloppy { my ($o) = @_; $o->ask_okcancel('', N("Please insert the Update Modules floppy in drive %s", $o->{updatemodules}), 1) or return; $o->SUPER::updateModulesFromFloppy; } #------------------------------------------------------------------------------ sub configureNetwork { my ($o) = @_; require network::network; network::network::easy_dhcp($o->{modules_conf}, $o->{netc}, $o->{intf}) and $o->{netcnx}{type} = 'lan'; $o->SUPER::configureNetwork; } #------------------------------------------------------------------------------ sub installUpdates { my ($o) = @_; my $u = $o->{updates} ||= {}; $o->hasNetwork or return; if (is_empty_hash_ref($u)) { $o->ask_yesorno_({ messages => formatAlaTeX( N("You now have the opportunity to download updated packages. These packages have been updated 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?")), interactive_help_id => 'installUpdates', }) or return; } #- bring all interface up for installing crypto packages. install_interactive::upNetwork($o); #- update medium available and working. my $update_medium; do { require crypto; eval { my @mirrors = do { my $_w = $o->wait_message('', N("Contacting Mandrakelinux web site to get the list of available mirrors...")); crypto::mirrors($o->{distro_type}); }; #- if no mirror have been found, use current time zone and propose among available. $u->{mirror} ||= crypto::bestMirror($o->{timezone}{timezone}, $o->{distro_type}); $o->ask_from_({ messages => N("Choose a mirror from which to get the packages"), cancel => N("Cancel"), }, [ { separator => '|', format => \&crypto::mirror2text, list => \@mirrors, val => \$u->{mirror}, }, ], ) or $u->{mirror} = ''; }; return if $@ || !$u->{mirror}; eval { if ($u->{mirror}) { my $_w = $o->wait_message('', N("Contacting the mirror to get the list of available packages...")); $update_medium = crypto::getPackages($o->{prefix}, $o->{packages}, $u->{mirror}); } }; } while $@ || !$update_medium && $o->ask_yesorno('', N("Unable to contact mirror %s", $u->{mirror}) . ($@ ? " :\n$@" : "") . "\n\n" . N("Would you like to try again?")); if ($update_medium) { if ($o->choosePackagesTree($o->{packages}, $update_medium)) { $o->{isUpgrade} = 1; #- now force upgrade mode, else update will be installed instead of upgraded. $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('', N("Which is your timezone?"), '/', [ timezone::getTimeZones() ], $o->{timezone}{timezone}) || return; my $ntp = to_bool($o->{timezone}{ntp}); $o->ask_from_({ interactive_help_id => 'configureTimezoneGMT' }, [ { text => N("Hardware clock set to GMT"), val => \$o->{timezone}{UTC}, type => 'bool' }, { text => N("Automatic time synchronization (using NTP)"), val => \$ntp, type => 'bool' }, ]) or goto &configureTimezone if $::expert || $clicked; if ($ntp) { my $servers = timezone::ntp_servers(); $o->{timezone}{ntp} ||= 'pool.ntp.org'; $o->ask_from_({}, [ { label => N("NTP Server"), val => \$o->{timezone}{ntp}, list => [ keys %$servers ], not_edit => 0, format => sub { $servers->{$_[0]} ? "$servers->{$_[0]} ($_[0])" : $_[0] } } ] ) or goto &configureTimezone; } else { $o->{timezone}{ntp} = ''; } install_steps::configureTimezone($o); 1; } #------------------------------------------------------------------------------ sub configureServices { my ($o, $clicked) = @_; require services; $o->{services} = services::ask($o) if $::expert || $clicked; install_steps::configureServices($o); } sub summaryBefore { my ($o) = @_; #- auto-detection $o->configurePrinter(0); install_any::preConfigureTimezone($o); #- get back network configuration. require network::network; eval { network::network::read_all_conf($o->{prefix}, $o->{netc} ||= {}, $o->{intf} ||= {}, $o->{netcnx} ||= {}); }; log::l("summaryBefore: network configuration: ", formatError($@)) if $@; } sub summary_prompt { my ($o, $l, $check_complete) = @_; foreach (@$l) { my $val = $_->{val}; ($_->{format}, $_->{val}) = (sub { $val->() || N("not configured") }, ''); } $o->ask_from_({ messages => N("Summary"), interactive_help_id => 'summary', cancel => '', callbacks => { complete => sub { !$check_complete->() } }, }, $l); } sub summary { my ($o) = @_; my @l; push @l, { group => N("System"), label => N("Keyboard"), val => sub { $o->{keyboard} && translate(keyboard::keyboard2text($o->{keyboard})) }, clicked => sub { $o->selectKeyboard(1) }, }; my $timezone_manually_set; push @l, { group => N("System"), label => N("Country / Region"), val => sub { lang::c2name($o->{locale}{country}) }, clicked => sub { any::selectCountry($o, $o->{locale}) or return; my $pkg_locale = lang::locale_to_main_locale(lang::getlocale_for_country($o->{locale}{lang}, $o->{locale}{country})); my @pkgs = pkgs::packagesProviding($o->{packages}, "locales-$pkg_locale"); $o->pkg_install(map { $_->name } @pkgs) if @pkgs; lang::write($o->{locale}); if (!$timezone_manually_set) { delete $o->{timezone}; install_any::preConfigureTimezone($o); #- now we can precise the timezone thanks to the country } }, }; push @l, { group => N("System"), label => N("Timezone"), val => sub { $o->{timezone}{timezone} }, clicked => sub { $timezone_manually_set = $o->configureTimezone(1) || $timezone_manually_set }, }; push @l, { group => N("System"), label => N("Mouse"), val => sub { translate($o->{mouse}{type}) . ' ' . translate($o->{mouse}{name}) }, clicked => sub { $o->selectMouse(1); mouse::write($o->do_pkgs, $o->{mouse}) }, }; push @l, { group => N("Hardware"), label => N("Printer"), val => sub { if (is_empty_hash_ref($o->{printer}{configured})) { require pkgs; my $p = pkgs::packageByName($o->{packages}, 'cups'); $p && $p->flag_installed ? N("Remote CUPS server") : N("No printer"); } elsif (defined($o->{printer}{configured}{$o->{printer}{DEFAULT}}) && (my $p = find { $_ && ($_->{make} || $_->{model}) } $o->{printer}{configured}{$o->{printer}{DEFAULT}}{queuedata})) { "$p->{make} $p->{model}"; } elsif ($p = find { $_ && ($_->{make} || $_->{model}) } map { $_->{queuedata} } (values %{$o->{printer}{configured}})) { "$p->{make} $p->{model}"; } else { N("Remote CUPS server"); #- fall back in case of something wrong. } }, clicked => sub { $o->configurePrinter(1) }, }; my @sound_cards = detect_devices::getSoundDevices(); my $sound_index = 0; foreach my $device (@sound_cards) { $device->{sound_slot_index} = $sound_index; push @l, { group => N("Hardware"), label => N("Sound card"), val => sub { $device->{driver} && modules::module2description($device->{driver}) || $device->{description}; }, clicked => sub { require harddrake::sound; harddrake::sound::config($o, $o->{modules_conf}, $device); }, }; $sound_index++; } if (!@sound_cards && ($o->{rpmsrate_flags_chosen}{GAMES} || $o->{rpmsrate_flags_chosen}{AUDIO})) { #- if no sound card are detected AND the user selected things needing a sound card, #- propose a special case for ISA cards push @l, { group => N("Hardware"), label => N("Sound card"), val => sub {}, clicked => sub { if ($o->ask_yesorno('', N("Do you have an ISA sound card?"))) { $o->do_pkgs->install(qw(alsa-utils sndconfig)); $o->ask_warn('', N("Run \"alsaconf\" or \"sndconfig\" after installation to configure your sound card")); } else { $o->ask_warn('', N("No sound card detected. Try \"harddrake\" after installation")); } }, }; } foreach my $tv (detect_devices::getTVcards()) { push @l, { group => N("Hardware"), label => N("TV card"), val => sub { $tv->{description} }, clicked => sub { require harddrake::v4l; harddrake::v4l::config($o, $o->{modules_conf}, $tv->{driver}); } }; } push @l, { group => N("Hardware"), label => N("Graphical interface"), val => sub { $o->{raw_X} ? Xconfig::various::to_string($o->{raw_X}) : '' }, clicked => sub { configureX($o, 'expert') }, }; push @l, { group => N("Network & Internet"), label => N("Network"), val => sub { $o->{netcnx}{type} }, clicked => sub { local $::expert = $::expert; require network::netconnect; network::netconnect::main($o->{prefix}, $o->{netcnx} ||= {}, $o, $o->{modules_conf}, $o->{netc}, $o->{mouse}, $o->{intf}, 0, 1); #- in case netcnx type is not updated. require network::network; network::network::probe_netcnx_type($o->{prefix}, $o->{netc}, $o->{intf}, $o->{netcnx}); }, }; $::o->{miscellaneous} ||= {}; push @l, { group => N("Network & Internet"), label => N("Proxies"), val => sub { $::o->{miscellaneous}{http_proxy} || $::o->{miscellaneous}{ftp_proxy} ? N("configured") : N("not configured") }, clicked => sub { require network::network; network::network::miscellaneous_choose($o, $::o->{miscellaneous}); network::network::proxy_configure($::o->{miscellaneous}) if !$::testing; }, }; push @l, { group => N("Security"), label => N("Security Level"), val => sub { require security::level; security::level::to_string($o->{security}); }, clicked => sub { require security::level; security::level::level_choose($o, \$o->{security}, \$o->{libsafe}, \$o->{security_user}) and install_any::set_security($o); }, }; push @l, { group => N("Security"), label => N("Firewall"), val => sub { require network::shorewall; my $shorewall = network::shorewall::read($o, 'silent'); $shorewall && !$shorewall->{disabled} ? N("activated") : N("disabled"); }, clicked => sub { require network::drakfirewall; network::drakfirewall::main($o, $o->{security} <= 3); }, } if detect_devices::getNet(); push @l, { group => N("Boot"), label => N("Bootloader"), val => sub { #-PO: example: lilo-graphic on /dev/hda1 N("%s on %s", $o->{bootloader}{method}, $o->{bootloader}{boot}) }, clicked => sub { any::setupBootloader($o, $o->{bootloader}, $o->{all_hds}, $o->{fstab}, $o->{security}); any::installBootloader($o, $o->{bootloader}, $o->{all_hds}); }, }; push @l, { group => N("System"), label => N("Services"), val => sub { require services; my ($l, $activated) = services::services(); N("Services: %d activated for %d registered", int(@$activated), int(@$l)); }, clicked => sub { require services; $o->{services} = services::ask($o) and services::doit($o, $o->{services}); }, }; my $check_complete = sub { $o->{raw_X} || !$::testing && !pkgs::packageByName($o->{packages}, 'xorg-x11')->flag_installed || $o->ask_yesorno('', N("You have not configured X. Are you sure you really want this?")); }; $o->summary_prompt(\@l, $check_complete); $o->cleanupPrinter; install_steps::configureTimezone($o) if !$timezone_manually_set; #- do not forget it. } #------------------------------------------------------------------------------ sub configurePrinter { my ($o, $clicked) = @_; require printer::main; require printer::printerdrake; require printer::detect; #- $clicked = 0: Preparation of "Summary" step, check whether there are #- are local printers. Continue for automatically setting up print #- queues if so, return otherwise #- $clicked = 1: User clicked "Configure" button in "Summary", enter #- Printerdrake for manual configuration my $go_on = $clicked ? 2 : $o && printer::detect::local_detect(); $go_on-- or return; #- install packages needed for printer::getinfo() $::testing or $o->do_pkgs->install('foomatic-db-engine'); #- take default configuration, this include choosing the right spooler #- currently used by the system. my $printer = $o->{printer} ||= {}; eval { add2hash($printer, printer::main::getinfo($o->{prefix})) }; $printer->{PAPERSIZE} = $o->{locale}{lang} eq 'en_US' || $o->{locale}{country} eq 'CA' ? 'Letter' : 'A4'; printer::printerdrake::main($printer, $o, $clicked, sub { install_interactive::upNetwork($o, 'pppAvoided') }); } sub cleanupPrinter { my ($o) = @_; #- Clean up $o->{printer} so that the records for an auto-installation #- contain only the important stuff return if !defined($o->{printer}); require printer::printerdrake; printer::printerdrake::final_cleanup($o->{printer}); } #------------------------------------------------------------------------------ sub setRootPassword { my ($o, $clicked) = @_; my $sup = $o->{superuser} ||= {}; $sup->{password2} ||= $sup->{password} ||= ""; if ($o->{security} >= 1 || $clicked) { require authentication; my $authentication_kind = authentication::to_kind($o->{authentication} ||= {}); $o->ask_from_({ title => N("Set root password and network authentication methods"), messages => N("Set root password"), advanced_messages => authentication::kind2description(), interactive_help_id => "setRootPassword", cancel => ($o->{security} <= 2 ? #-PO: keep this short or else the buttons will not fit in the window N("No password") : ''), focus_first => 1, callbacks => { complete => sub { $sup->{password} eq $sup->{password2} or $o->ask_warn('', [ N("The passwords do not match"), N("Please try again") ]), return 1,0; length $sup->{password} < 2 * $o->{security} and $o->ask_warn('', N("This password is too short (it must be at least %d characters long)", 2 * $o->{security})), return 1,0; return 0 } } }, [ { label => N("Password"), val => \$sup->{password}, hidden => 1 }, { label => N("Password (again)"), val => \$sup->{password2}, hidden => 1 }, { label => N("Authentication"), val => \$authentication_kind, type => 'list', list => [ authentication::kinds() ], format => \&authentication::kind2name, advanced => 1 }, ]) or delete $sup->{password}; authentication::ask_parameters($o, $o->{netc}, $o->{authentication}, $authentication_kind) or goto &setRootPassword; } 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) { my @suggested_names = @{$o->{users}} ? () : all("$::prefix/home"); any::ask_users($o, $o->{users}, $o->{security}, \@suggested_names); } add2hash($o, any::get_autologin()); any::autologin($o, $o); install_steps::addUser($o); } #------------------------------------------------------------------------------ sub setupBootloaderBefore { my ($o) = @_; my $_w = $o->wait_message('', N("Preparing bootloader...")); $o->SUPER::setupBootloaderBefore; } #------------------------------------------------------------------------------ sub setupBootloader { my ($o, $ent_number) = @_; if (arch() =~ /ppc/) { my $machtype = detect_devices::get_mac_generation(); if ($machtype !~ /NewWorld/) { $o->ask_warn('', N("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 or some other means to boot your machine")); log::l("OldWorld or Unknown Machine - no yaboot setup"); return; } } if (arch() =~ /^alpha/) { $o->ask_yesorno('', N("Do you want to use aboot?"), 1) or return; catch_cdie { $o->SUPER::setupBootloader } sub { $o->ask_yesorno('', N("Error installing aboot, try to force installation even if that destroys the first partition?")); }; } else { if ($ent_number == 1) { any::setupBootloader_simple($o, $o->{bootloader}, $o->{all_hds}, $o->{fstab}, $o->{security}) or return; } else { any::setupBootloader($o, $o->{bootloader}, $o->{all_hds}, $o->{fstab}, $o->{security}) or return; } any::installBootloader($o, $o->{bootloader}, $o->{all_hds}) or die "already displayed"; } } sub miscellaneous { my ($o, $_clicked) = @_; if ($o->{meta_class} ne 'desktop' && !$o->{isUpgrade}) { require security::level; security::level::level_choose($o, \$o->{security}, \$o->{libsafe}, \$o->{security_user}); if ($o->{security} > 2 && find { $_->{fs_type} eq 'vfat' } @{$o->{fstab}}) { $o->ask_okcancel('', N("In this security level, access to the files in the Windows partition is restricted to the administrator.")) or goto &miscellaneous; } } install_steps::miscellaneous($o); } #------------------------------------------------------------------------------ sub configureX { my ($o, $expert) = @_; install_steps::configureXBefore($o); symlink "$o->{prefix}/etc/gtk", "/etc/gtk"; require Xconfig::main; if (my $raw_X = Xconfig::main::configure_everything_or_configure_chooser($o, install_any::X_options_from_o($o), !$expert, $o->{keyboard}, $o->{mouse})) { $o->{raw_X} = $raw_X; install_steps::configureXAfter($o); } } #------------------------------------------------------------------------------ sub generateAutoInstFloppy { my ($o, $replay) = @_; my @imgs = install_any::getAndSaveAutoInstallFloppies($o, $replay) or return; my $floppy = detect_devices::floppy(); $o->ask_okcancel('', N("Insert a blank floppy in drive %s", $floppy), 1) or return; my $i; foreach (@imgs) { if ($i++) { $o->ask_okcancel('', N("Please insert another floppy for drivers disk"), 1) or return; } my $_w = $o->wait_message('', N("Creating auto install floppy...")); require commands; commands::dd("if=$_", 'of=' . devices::make($floppy)); common::sync(); } } #------------------------------------------------------------------------------ sub exitInstall { my ($o, $alldone) = @_; return $o->{step} = '' if !$alldone && !$o->ask_yesorno('', N("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(install_messages::install_completed()), interactive_help_id => 'exitInstall', ok => N("Reboot"), }, [ { val => \ (my $_t1 = N("Generate auto install floppy")), clicked => sub { my $t = $o->ask_from_list_('', N("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. "), [ N_("Replay"), N_("Automated") ]); $t and $o->generateAutoInstFloppy($t eq 'Replay'); }, advanced => 1 }, { val => \ (my $_t2 = N("Save packages selection")), clicked => sub { install_any::g_default_packages($o) }, advanced => 1 }, ] ) if $alldone; } #-###################################################################################### #- Misc Steps Functions #-###################################################################################### 1;