summaryrefslogtreecommitdiffstats
path: root/perl-install/share/po
diff options
context:
space:
mode:
authorPablo Saratxaga <pablo@mandriva.com>2001-05-02 11:19:30 +0000
committerPablo Saratxaga <pablo@mandriva.com>2001-05-02 11:19:30 +0000
commit8ce7bc7b4bbb8e7722f97969a336a66ba9cab58a (patch)
tree6561b54ed05d4bc5046a543d00644c9583d2961a /perl-install/share/po
parent8f38b988f56124fe98d55e7c453fd62b4e79d5ab (diff)
downloaddrakx-8ce7bc7b4bbb8e7722f97969a336a66ba9cab58a.tar
drakx-8ce7bc7b4bbb8e7722f97969a336a66ba9cab58a.tar.gz
drakx-8ce7bc7b4bbb8e7722f97969a336a66ba9cab58a.tar.bz2
drakx-8ce7bc7b4bbb8e7722f97969a336a66ba9cab58a.tar.xz
drakx-8ce7bc7b4bbb8e7722f97969a336a66ba9cab58a.zip
Updated Croatian and Norwegian files
Diffstat (limited to 'perl-install/share/po')
-rw-r--r--perl-install/share/po/no.po48
1 files changed, 30 insertions, 18 deletions
diff --git a/perl-install/share/po/no.po b/perl-install/share/po/no.po
index db043dc39..6f03685ac 100644
--- a/perl-install/share/po/no.po
+++ b/perl-install/share/po/no.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: DrakX VERSION\n"
-"POT-Creation-Date: 2001-04-17 16:58+0200\n"
+"POT-Creation-Date: 2001-04-20 11:01+0200\n"
"PO-Revision-Date: 2001-03-13 13:19CET\n"
"Last-Translator: Terje Bjerkelia <terje@bjerkelia.com>\n"
"Language-Team: Norsk\n"
@@ -935,7 +935,8 @@ msgstr ""
# and only one line per string for the GRUB messages
#
#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
-#: ../../bootloader.pm_.c:795
+#. -PO: and keep them smaller than 79 chars long
+#: ../../bootloader.pm_.c:796
msgid "Welcome to GRUB the operating system chooser!"
msgstr "Velkommen til GRUB, operativsystem-velgeren!"
@@ -947,7 +948,9 @@ msgstr "Velkommen til GRUB, operativsystem-velgeren!"
# The lines must fit on screen, aka length < 80
# and only one line per string for the GRUB messages
#
-#: ../../bootloader.pm_.c:796
+#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
+#. -PO: and keep them smaller than 79 chars long
+#: ../../bootloader.pm_.c:799
#, c-format
msgid "Use the %c and %c keys for selecting which entry is highlighted."
msgstr "Bruk %c og %c tastene for å velge hvilken inngang som er markert."
@@ -960,7 +963,9 @@ msgstr "Bruk %c og %c tastene for å velge hvilken inngang som er markert."
# The lines must fit on screen, aka length < 80
# and only one line per string for the GRUB messages
#
-#: ../../bootloader.pm_.c:797
+#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
+#. -PO: and keep them smaller than 79 chars long
+#: ../../bootloader.pm_.c:802
msgid "Press enter to boot the selected OS, 'e' to edit the"
msgstr "Trykk enter for † starte opp valgt OS, 'e' for † redigere"
@@ -972,7 +977,9 @@ msgstr "Trykk enter for † starte opp valgt OS, 'e' for † redigere"
# The lines must fit on screen, aka length < 80
# and only one line per string for the GRUB messages
#
-#: ../../bootloader.pm_.c:798
+#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
+#. -PO: and keep them smaller than 79 chars long
+#: ../../bootloader.pm_.c:805
msgid "commands before booting, or 'c' for a command-line."
msgstr "kommandoer for oppstart, eller 'c' for en kommandolinje."
@@ -984,21 +991,25 @@ msgstr "kommandoer for oppstart, eller 'c' for en kommandolinje."
# The lines must fit on screen, aka length < 80
# and only one line per string for the GRUB messages
#
-#: ../../bootloader.pm_.c:799
+#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
+#. -PO: and keep them smaller than 79 chars long
+#: ../../bootloader.pm_.c:808
#, c-format
msgid "The highlighted entry will be booted automatically in %d seconds."
msgstr "Den markerte inngangen vil bli startet automatisk om %d sekunder."
-#: ../../bootloader.pm_.c:803
+#: ../../bootloader.pm_.c:812
msgid "not enough room in /boot"
msgstr "ikke nok plass i /boot"
#. -PO: "Desktop" and "Start Menu" are the name of the directories found in c:\windows
-#: ../../bootloader.pm_.c:895
+#. -PO: so you may need to put them in English or in a different language if MS-windows doesn't exist in your language
+#: ../../bootloader.pm_.c:905
msgid "Desktop"
msgstr "Skrivebord"
-#: ../../bootloader.pm_.c:895
+#. -PO: "Desktop" and "Start Menu" are the name of the directories found in c:\windows
+#: ../../bootloader.pm_.c:907
msgid "Start Menu"
msgstr "Startmeny"
@@ -1077,15 +1088,12 @@ msgid "Configure"
msgstr "Konfigurer"
#: ../../bootlook.pm_.c:114
-#, fuzzy, c-format
+#, c-format
msgid ""
"You are currently using %s as Boot Manager.\n"
"Click on Configure to launch the setup wizard."
msgstr ""
-"Velkommen til verktøyet for deling av Internett tilkobling!\n"
-"\n"
-"%s\n"
-"\n"
+"Du bruker for øyeblikket % som oppstartshåndterer.\n"
"Klikk på Konfigurer for å starte oppsett-hjelperen."
#: ../../bootlook.pm_.c:121
@@ -2816,7 +2824,7 @@ msgid ""
"them,\n"
"then click Ok."
msgstr ""
-"Hvis du har alle CDene i listen ovenfor, klikk Ok. Hvis du ikke har\n"
+"Hvis du har alle CDene i listen nedenfor, klikk Ok. Hvis du ikke har\n"
"noen av disse CDene, klikk Avbryt. Hvis bare noen av CDene mangler, fjern "
"disse,\n"
"klikk så Ok."
@@ -4012,7 +4020,7 @@ msgstr ""
#: ../../install_any.pm_.c:404
msgid "Can't use broadcast with no NIS domain"
-msgstr ""
+msgstr "Kan ikke bruke broadcast med intet NIS domene"
#: ../../install_any.pm_.c:647
#, c-format
@@ -5058,7 +5066,7 @@ msgstr "Skreddersydd"
#: ../../install_steps_interactive.pm_.c:585
msgid "Selected size is larger than available space"
-msgstr ""
+msgstr "Valgt størrelse er større enn tilgjengelig plass"
#: ../../install_steps_interactive.pm_.c:650
msgid ""
@@ -5066,7 +5074,7 @@ msgid ""
"If you have none of those CDs, click Cancel.\n"
"If only some CDs are missing, unselect them, then click Ok."
msgstr ""
-"Hvis du har alle CDene i listen ovenfor, klikk Ok.\n"
+"Hvis du har alle CDene i listen nedenfor, klikk Ok.\n"
"Hvis du ikke har noen av disse CDene, klikk Avbryt.\n"
"Hvis bare noen av CDene mangler, fjern disse, klikk så Ok."
@@ -7676,6 +7684,8 @@ msgid ""
"You don't have any configured interface.\n"
"Configure them first by clicking on 'Configure'"
msgstr ""
+"Du har ingen konfigurerte grensesnitt.\n"
+"Konfigurer disse først ved å klikke på 'Konfigurer'"
#: ../../standalone/draknet_.c:413
msgid "LAN Configuration"
@@ -7711,6 +7721,8 @@ msgid ""
"You don't have any internet connection.\n"
"Create one first by clicking on 'Configure'"
msgstr ""
+"Du har ingen internett-tilkobling.\n"
+"Opprett en først ved å klikke på 'Konfigurer'"
#: ../../standalone/draknet_.c:526
msgid "Internet connection configuration"
427' href='#n427'>427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677
package install2; # $Id$

use diagnostics;
use strict;
use vars qw($o);

#-######################################################################################
#- misc imports
#-######################################################################################
use steps;
use common;
use install_any qw(:all);
use install_steps;
use install_any;
use lang;
use keyboard;
use mouse;
use devices;
use partition_table;
use modules;
use detect_devices;
use run_program;
use any;
use log;
use fs;


#-#######################################################################################
#-$O
#-the big struct which contain, well everything (globals + the interactive methods ...)
#-if you want to do a kickstart file, you just have to add all the required fields (see for example
#-the variable $default)
#-#######################################################################################
$o = $::o = {
#    bootloader => { linear => 0, message => 1, timeout => 5, restricted => 0 },
#-    packages   => [ qw() ],
    partitioning => { clearall => 0, eraseBadPartitions => 0, auto_allocate => 0 }, #-, readonly => 0 },
    authentication => { md5 => 1, shadow => 1 },
    locale         => { lang => 'en_US' },
#-    isUpgrade    => 0,
    toRemove     => [],
    toSave       => [],
#-    simple_themes => 1,

    timezone => {
#-                   timezone => "Europe/Paris",
#-                   UTC      => 1,
                },
#-    superuser => { password => 'a', shell => '/bin/bash', realname => 'God' },
#-    user => { name => 'foo', password => 'bar', home => '/home/foo', shell => '/bin/bash', realname => 'really, it is foo' },

#-    keyboard => 'de',
#-    display => "192.168.1.19:1",
    steps        => \%steps::installSteps,
    orderedSteps => \@steps::orderedInstallSteps,

    #- for the list of fields available, see network/network.pm
    net => {
	    #- network => { HOSTNAME => 'abcd' },
	    #- resolv => { DOMAINNAME => 'foo.xyz' },
	    #- ifcfg => {
	    #-   eth0 => { DEVICE => "eth0", IPADDR => '1.2.3.4', NETMASK => '255.255.255.128' }
	    #- },
	    },

#-step : the current one
#-prefix
#-mouse
#-keyboard
#-netc
#-methods
#-packages compss
#-printer haveone entry(cf printer.pm)

};


sub installStepsCall {
    my ($o, $auto, $fun, @args) = @_;
    $fun = "install_steps::$fun" if $auto;
    $o->$fun(@args);
}

#-######################################################################################
#- Steps Functions
#- each step function are called with two arguments : clicked(because if you are a
#- beginner you can force the the step) and the entered number
#-######################################################################################

#------------------------------------------------------------------------------
sub selectLanguage {
    my ($auto) = @_;
    installStepsCall($o, $auto, 'selectLanguage');
}

sub acceptLicense {
    my ($auto) = @_;
    installStepsCall($o, $auto, 'acceptLicense');
}

#------------------------------------------------------------------------------
sub selectMouse {
    my ($auto) = @_;
    installStepsCall($o, $auto, 'selectMouse');

    addToBeDone { mouse::write($o->do_pkgs, $o->{mouse}) if !$o->{isUpgrade} } 'installPackages';
}

#------------------------------------------------------------------------------
sub setupSCSI {
    my ($auto) = @_;

    if (!$::testing && !$::local_install) {
	-d '/lib/modules/' . c::kernel_version() ||
	  -s modules::cz_file() or die N("Can not access kernel modules corresponding to your kernel (file %s is missing), this generally means your boot floppy in not in sync with the Installation medium (please create a newer boot floppy)", modules::cz_file());
    }

    installStepsCall($o, $auto, 'setupSCSI');
}

#------------------------------------------------------------------------------
sub selectKeyboard {
    my ($auto) = @_;

    my $force;
    if (my $keyboard = keyboard::read()) {
	$o->{keyboard} = $keyboard; #- for uprade
    } elsif ($o->{isUpgrade}) {
	#- oops, the keyboard config is wrong, forcing prompt and writing
	$force = 1;
    }

    installStepsCall($o, $auto, 'selectKeyboard', $force);
}

#------------------------------------------------------------------------------
sub selectInstallClass {
    my ($auto) = @_;

    installStepsCall($o, $auto, 'selectInstallClass');

    if ($o->{isUpgrade}) {
	@{$o->{orderedSteps}} = uniq(map {
	    $_ eq 'selectInstallClass' ? ($_, 'doPartitionDisks', 'formatPartitions') : $_;
	} @{$o->{orderedSteps}});

	$o->{modules_conf}->merge_into(modules::any_conf->read);
    }
}

#------------------------------------------------------------------------------
sub doPartitionDisks {
    my ($auto) = @_;
    $o->{steps}{formatPartitions}{done} = 0;
    installStepsCall($o, $auto, 'doPartitionDisksBefore');
    installStepsCall($o, $auto, 'doPartitionDisks');
    installStepsCall($o, $auto, 'doPartitionDisksAfter');
}

sub formatPartitions {
    my ($auto) = @_;

    $o->{steps}{choosePackages}{done} = 0;
    installStepsCall($o, $auto, 'choosePartitionsToFormat', $o->{fstab}) if !$o->{isUpgrade};
    my $want_root_formated = fs::get::root($o->{fstab})->{toFormat};
    if ($want_root_formated) {
	foreach ('/usr') {
	    my $part = fs::get::mntpoint2part($_, $o->{fstab}) or next;
	    $part->{toFormat} or die N("You must also format %s", $_);
	}
    }
    installStepsCall($o, $auto, 'formatMountPartitions', $o->{fstab}) if !$::testing;

    if ($want_root_formated) {
	#- we formatted /, ensure /var/lib/rpm is cleaned otherwise bad things can happen
	#- (especially when /var is *not* formatted)
	eval { rm_rf("$o->{prefix}/var/lib/rpm") };
    }

    install_any::create_minimal_files();

    eval { fs::mount::mount('none', "$::prefix/proc", 'proc') };
    eval { fs::mount::mount('none', "$::prefix/sys", 'sysfs') };
    eval { fs::mount::usbfs($::prefix) };

    install_any::screenshot_dir__and_move();
    install_any::move_clp_to_disk($o);

    any::rotate_logs($o->{prefix});

    if (any { $_->{usb_media_type} && any { $_->{mntpoint} } partition_table::get_normal_parts($_) } @{$o->{all_hds}{hds}}) {
	log::l("we use a usb-storage based drive, so keep it as a normal scsi_hostadapter");
    } else {
	log::l("we do not need usb-storage for booting system, rely on hotplug");
	#- when usb-storage is in scsi_hostadapter, 
	#- hotplug + scsimon do not load sd_mod/sr_mod when needed
	#- (eg: when plugging a usb key)
	$o->{modules_conf}->remove_probeall('scsi_hostadapter', 'usb-storage');
    }

    require raid;
    raid::write_conf($o->{all_hds}{raids});

    #- needed by lilo
    if (-d '/dev/mapper') {
	my @vgs = map { $_->{VG_name} } @{$o->{all_hds}{lvms}};
	cp_af("/dev/$_", "$::prefix/dev") foreach 'mapper', @vgs;
    }
}

#------------------------------------------------------------------------------
sub choosePackages {
    my ($auto) = @_;
    require pkgs;

    #- always setPackages as it may have to copy hdlist and synthesis files.
    installStepsCall($o, $auto, 'setPackages');
    installStepsCall($o, $auto, 'choosePackages');
    my @flags = map_each { if_($::b, $::a) } %{$o->{rpmsrate_flags_chosen}};
    log::l("rpmsrate_flags_chosen's: ", join(' ', sort @flags));

    #- check pre-condition that basesystem package must be selected.
    pkgs::packageByName($o->{packages}, 'basesystem')->flag_available or die "basesystem package not selected";

    #- check if there are packages that need installation.
    $o->{steps}{installPackages}{done} = 0 if $o->{steps}{installPackages}{done} && pkgs::packagesToInstall($o->{packages}) > 0;
}

#------------------------------------------------------------------------------
sub installPackages {
    my ($auto) = @_;

    installStepsCall($o, $auto, 'beforeInstallPackages');
    installStepsCall($o, $auto, 'installPackages');
    installStepsCall($o, $auto, 'afterInstallPackages');
}
#------------------------------------------------------------------------------
sub miscellaneous {
    my ($auto) = @_;

    installStepsCall($o, $auto, 'miscellaneousBefore');
    installStepsCall($o, $auto, 'miscellaneous');
    installStepsCall($o, $auto, 'miscellaneousAfter');
}

#------------------------------------------------------------------------------
sub summary {
    my ($auto) = @_;
    installStepsCall($o, $auto, 'summaryBefore') if $o->{steps}{summary}{entered} == 1;
    installStepsCall($o, $auto, 'summary');
    installStepsCall($o, $auto, 'summaryAfter');
}
#------------------------------------------------------------------------------
sub configureNetwork {
    my ($auto) = @_;
    #- get current configuration of network device.
    require network::network;
    eval { network::network::read_net_conf($o->{net}) };
    if (!$o->{isUpgrade}) {
        installStepsCall($o, $auto, 'configureNetwork');
    } else {
        require network::ethernet;
        network::ethernet::configure_eth_aliases($o->{modules_conf});
    }
}
#------------------------------------------------------------------------------
sub installUpdates {
    my ($auto) = @_;
    installStepsCall($o, $auto, 'installUpdates') if $o->{meta_class} ne 'firewall';
}
#------------------------------------------------------------------------------
sub configureServices {
    my ($auto) = @_;
    installStepsCall($o, $auto, 'configureServices');
}
#------------------------------------------------------------------------------
sub setRootPassword {
    my ($auto) = @_;
    return if $o->{isUpgrade};

    installStepsCall($o, $auto, 'setRootPassword');
}
#------------------------------------------------------------------------------
sub addUser {
    my ($auto) = @_;

    installStepsCall($o, $auto, 'addUser') if !$o->{isUpgrade};
}

#------------------------------------------------------------------------------
sub setupBootloader {
    my ($auto) = @_;
    return if $::local_install;

    $o->{modules_conf}->write;

    installStepsCall($o, $auto, 'setupBootloaderBefore');
    installStepsCall($o, $auto, 'setupBootloader');
}
#------------------------------------------------------------------------------
sub configureX {
    my ($auto) = @_;

    #- done here and also at the end of install2.pm, just in case...
    install_any::write_fstab($o);
    $o->{modules_conf}->write;

    require pkgs;
    installStepsCall($o, $auto, 'configureX') if !$::testing && eval { pkgs::packageByName($o->{packages}, 'xorg-x11')->flag_installed } && !$o->{X}{disabled};
}
#------------------------------------------------------------------------------
sub exitInstall {
    my ($auto) = @_;
    installStepsCall($o, $auto, 'exitInstall', getNextStep($::o) eq 'exitInstall');
}


#-######################################################################################
#- MAIN
#-######################################################################################
sub main {
#-    $SIG{__DIE__} = sub { warn "DIE " . backtrace() . "\n" };
    $SIG{SEGV} = sub { 
	my $msg = "segmentation fault: seems like memory is missing as the install crashes"; log::l($msg);
	$o->ask_warn('', $msg);
	setVirtual(1);
	require install_steps_auto_install;
	install_steps_auto_install_non_interactive::errorInStep($o, $msg);
    };
    $ENV{PERL_BADLANG} = 1;
    delete $ENV{TERMINFO};
    umask 022;

    $::isInstall = 1;
    $::isWizard = 1;
    $::no_ugtk_init = 1;
    $::expert = 0;

#-    c::unlimit_core() unless $::testing;

    my ($cfg, $patch, @auto);
    my %cmdline = map { 
	my ($n, $v) = split /=/;
	$n => $v || 1;
    } split ' ', cat_("/proc/cmdline");

    my $opt; foreach (@_) {
	if (/^--?(.*)/) {
	    $cmdline{$opt} = 1 if $opt;
	    $opt = $1;
	} else {
	    $cmdline{$opt} = $_ if $opt;
	    $opt = '';
	}
    } $cmdline{$opt} = 1 if $opt;

    #- from stage1
    put_in_hash(\%ENV, { getVarsFromSh('/tmp/env') });
    exists $ENV{$_} and $cmdline{lc($_)} = $ENV{$_} foreach qw(METHOD PCMCIA KICKSTART);

    map_each {
	my ($n, $v) = @_;
	my $f = ${{
	    lang      => sub { $o->{locale}{lang} = $v },
	    flang     => sub { $o->{locale}{lang} = $v; push @auto, 'selectLanguage' },
	    method    => sub { $o->{method} = $v },
	    pcmcia    => sub { $o->{pcmcia} = $v },
	    vga16     => sub { $o->{vga16} = $v },
	    vga       => sub { $o->{vga} = $v },
	    step      => sub { $o->{steps}{first} = $v },
	    meta_class => sub { $o->{meta_class} = $v },
	    freedriver => sub { $o->{freedriver} = $v },
	    no_bad_drives => sub { $o->{partitioning}{no_bad_drives} = 1 },
	    nodmraid  => sub { $o->{partitioning}{nodmraid} = 1 },
	    readonly  => sub { $o->{partitioning}{readonly} = $v ne "0" },
	    display   => sub { $o->{display} = $v },
	    askdisplay => sub { print "Please enter the X11 display to perform the install on ? "; $o->{display} = chomp_(scalar(<STDIN>)) },
	    security  => sub { $o->{security} = $v },
	    noauto    => sub { $::noauto = 1 },
	    testing   => sub { $::testing = 1 },
	    patch     => sub { $patch = 1 },
	    defcfg    => sub { $cfg = $v },
	    newt      => sub { $o->{interactive} = "newt" },
	    text      => sub { $o->{interactive} = "newt" },
	    stdio     => sub { $o->{interactive} = "stdio" },
	    kickstart => sub { $::auto_install = $v },
	    local_install => sub { $::local_install = 1 },
	    uml_install => sub { $::uml_install = $::local_install = 1 },
	    auto_install => sub { $::auto_install = $v },
	    simple_themes => sub { $o->{simple_themes} = 1 },
	    theme     => sub { $o->{theme} = $v },
	    doc       => sub { $o->{doc} = 1 },  #- will be used to know that we're running for the doc team,
	                                         #- e.g. we want screenshots with a good B&W contrast
	    useless_thing_accepted => sub { $o->{useless_thing_accepted} = 1 },
	    alawindows => sub { $o->{security} = 0; $o->{partitioning}{clearall} = 1; $o->{bootloader}{crushMbr} = 1 },
	    fdisk => sub { $o->{partitioning}{fdisk} = 1 },
	    nomouseprobe => sub { $o->{nomouseprobe} = $v },
	    updatemodules => sub { $o->{updatemodules} = 1 },
	    move  => sub { $::move = 1 },
	    globetrotter  => sub { $::move = 1; $::globetrotter = 1 },
	    suppl => sub { $o->{supplmedia} = 1 },
	    askmedia => sub { $o->{askmedia} = 1 },
	}}{lc $n}; &$f if $f;
    } %cmdline;

    if ($::testing) {
	$ENV{SHARE_PATH} ||= "/export/install/stage2/live/usr/share";
	$ENV{SHARE_PATH} = "/usr/share" if !-e $ENV{SHARE_PATH};
    } else {
	$ENV{SHARE_PATH} ||= "/usr/share";
    }

    undef $::auto_install if $cfg;
    if (!$::testing) {
	unlink $_ foreach "/modules/modules.mar", "/sbin/stage1";
    }

    log::openLog($::testing && 'debug.log');
    log::l("second stage install running (", install_any::drakx_version(), ")");

    eval { output('/proc/sys/kernel/modprobe', "\n") } if !$::local_install && !$::testing; #- disable kmod, otherwise we get a different behaviour in kernel vs kernel-BOOT
    eval { fs::mount::mount('none', '/sys', 'sysfs', 1) };

    if ($::move) {
        require move;
        move::init($o);
    }
    if ($::local_install) {
	push @auto, 
#	  'selectLanguage', 'selectKeyboard', 'miscellaneous', 'selectInstallClass',
	  'doPartitionDisks', 'formatPartitions';
	fs::mount::usbfs(''); #- do it now so that when_load doesn't do it
    }

    cp_f(glob('/stage1/tmp/*'), '/tmp');

    #- free up stage1 memory
    eval { fs::mount::umount($_) } foreach qw(/stage1/proc/bus/usb /stage1/proc /stage1);

    $o->{prefix} = $::prefix = $::testing ? "/tmp/test-perl-install" : $::move ? "" : "/mnt";
    mkdir $o->{prefix}, 0755;

    #-  make sure we do not pick up any gunk from the outside world
    my $remote_path = "$o->{prefix}/sbin:$o->{prefix}/bin:$o->{prefix}/usr/sbin:$o->{prefix}/usr/bin:$o->{prefix}/usr/X11R6/bin";
    $ENV{PATH} = "/usr/bin:/bin:/sbin:/usr/sbin:/usr/X11R6/bin:$remote_path";

    eval { spawnShell() };

    modules::load_dependencies(($::testing ? ".." : "") . "/modules/modules.dep");
    require modules::any_conf;
    require modules::modules_conf;
    $o->{modules_conf} = modules::modules_conf::read(modules::any_conf::vnew(), '/tmp/modules.conf');
    modules::read_already_loaded($o->{modules_conf});

    #- done before auto_install is called to allow the -IP feature on auto_install file name
    if (-e '/tmp/network') {
	require network::network;
	#- get stage1 network configuration if any.
	log::l('found /tmp/network');
	add2hash($o->{net}{network} ||= {}, network::network::read_conf('/tmp/network'));
	if (my ($file) = glob_('/tmp/ifcfg-*')) {
	    log::l("found network config file $file");
	    my $l = network::network::read_interface_conf($file);
	    $o->{net}{ifcfg}{$l->{DEVICE}} ||= $l;
	}
	if (-e '/etc/resolv.conf') {
	    my $file = '/etc/resolv.conf';
	    log::l("found network config file $file");
	    add2hash($o->{net}{resolv} ||= {}, network::network::read_resolv_conf($file));
	}
	my $dsl_device = find { $_->{BOOTPROTO} eq 'adsl_pppoe' } values %{$o->{net}{ifcfg}};
	if ($dsl_device) {
	    $o->{net}{type} = 'adsl';
	    $o->{net}{net_interface} = $dsl_device->{DEVICE};
	    $o->{net}{adsl} = {
		method => 'pppoe',
		device => $dsl_device->{DEVICE},
		ethernet_device => $dsl_device->{DEVICE},
		login => $dsl_device->{USER},
		password => $dsl_device->{PASS},
	    };
	    %$dsl_device = ();
	} else {
	    $o->{net}{type} = 'lan';
	    $o->{net}{net_interface} = first(values %{$o->{net}{ifcfg}});
	}
    }

    #- done after module dependencies are loaded for "vfat depends on fat"
    if ($::auto_install) {
	if ($::auto_install =~ /-IP(\.pl)?$/) {
	    my ($ip) = cat_('/tmp/stage1.log') =~ /configuring device (?!lo)\S+ ip: (\S+)/;
	    my $normalized_ip = join('', map { sprintf "%02X", $_ } split('\.', $ip)); 
	    $::auto_install =~ s/-IP(\.pl)?$/-$normalized_ip$1/;
	}
	require install_steps_auto_install;
	eval { $o = $::o = install_any::loadO($o, $::auto_install) };
	if ($@) {
	    if ($o->{useless_thing_accepted}) { #- Pixel's hack to be able to fail through
		log::l("error using auto_install, continuing");
		undef $::auto_install;
	    } else {
		install_steps_auto_install_non_interactive::errorInStep($o, "Error using auto_install\n" . formatError($@));
	    }
	} else {
	    log::l("auto install config file loaded successfully");

	    #- normalize for people not using our special scheme
	    foreach (@{$o->{manualFstab} || []}) {
		$_->{device} =~ s!^/dev/!!;
	    }
	}
    }
    $o->{interactive} ||= 'gtk' if !$::auto_install;
 
    if ($o->{interactive} eq "gtk" && availableMemory() < 22 * 1024) {
 	log::l("switching to newt install cuz not enough memory");
 	$o->{interactive} = "newt";
    }

    if (my ($s) = cat_("/proc/cmdline") =~ /brltty=(\S*)/) {
	my ($driver, $device, $table) = split(',', $s);
	$table = "text.$table.tbl" if $table !~ /\.tbl$/;
	log::l("brltty option $driver $device $table");
	$o->{brltty} = { driver => $driver, device => $device, table => $table };
	$o->{interactive} = 'newt';
	$o->{nomouseprobe} = 1;
    }

    # perl_checker: require install_steps_gtk
    # perl_checker: require install_steps_newt
    # perl_checker: require install_steps_stdio
    require "install_steps_$o->{interactive}.pm" if $o->{interactive};

    #- needed before accessing floppy (in case of usb floppy)
    modules::load_category($o->{modules_conf}, 'bus/usb'); 

    #- oem patch should be read before to still allow patch or defcfg.
    eval { $o = $::o = install_any::loadO($o, "install/patch-oem.pl"); log::l("successfully read oem patch") };
    #- patch should be read after defcfg in order to take precedance.
    eval { $o = $::o = install_any::loadO($o, $cfg); log::l("successfully read default configuration: $cfg") } if $cfg;
    eval { $o = $::o = install_any::loadO($o, "patch"); log::l("successfully read patch") } if $patch;

    eval { modules::load("af_packet") };

    require harddrake::sound;
    harddrake::sound::configure_sound_slots($o->{modules_conf});

    #- need to be after oo-izing $o
    if ($o->{brltty}) {
	symlink "/tmp/stage2/$_", $_ foreach "/etc/brltty";
	eval { modules::load("serial") };
	devices::make($_) foreach $o->{brltty}{device} ? $o->{brltty}{device} : qw(ttyS0 ttyS1);
	devices::make("vcsa");
	run_program::run("brltty");
    }

    #- needed very early for install_steps_gtk
    if (!$::testing) {
	eval { $o->{mouse} = mouse::detect($o->{modules_conf}) } if !$o->{mouse} && !$o->{nomouseprobe};
	mouse::load_modules($o->{mouse});
    }

    $o->{locale}{lang} = lang::set($o->{locale}) if $o->{locale}{lang} ne 'en_US' && !$::move; #- mainly for defcfg

    # keep the result otherwise monitor-edid does not return good results afterwards
    eval { any::monitor_full_edid() };

    install_any::start_i810fb();

    $o->{allowFB} = listlength(cat_("/proc/fb"));

    if (!$::move && !$::testing && !$o->{meta_class}) {
	my $VERSION = cat__(install_any::getFile("VERSION")) or do { print "VERSION file missing\n"; sleep 5 };
	my @classes = qw(powerpackplus powerpack desktop download server firewall);
	if (my $meta_class = find { $VERSION =~ /$_/i } @classes) {
	    $o->{meta_class} = $meta_class;
	}
	$o->{distro_type} = 'community' if $VERSION =~ /community/i;
	$o->{distro_type} = 'cooker' if $VERSION =~ /cooker/i;
    }
    $o->{meta_class} eq 'discovery' and $o->{meta_class} = 'desktop';
    $o->{meta_class} eq 'powerpackplus' and $o->{meta_class} = 'server';

    log::l("meta_class $o->{meta_class}");

    foreach (@auto) {
	my $s = $o->{steps}{/::(.*)/ ? $1 : $_} or next;
	$s->{auto} = $s->{hidden} = 1;
    }

    my $o_;
    while (1) {
    	$o_ = $::auto_install ?
    	  install_steps_auto_install->new($o) :
    	    $o->{interactive} eq "stdio" ?
    	  install_steps_stdio->new($o) :
    	    $o->{interactive} eq "newt" ?
    	  install_steps_newt->new($o) :
    	    $o->{interactive} eq "gtk" ?
    	  install_steps_gtk->new($o) :
    	    die "unknown install type";
	$o_ and last;

	$o->{interactive} = "newt";
	require install_steps_newt;
    }
    $::o = $o = $o_;

    eval { output('/proc/splash', "verbose\n") } if !$::globetrotter;
  
    #-the main cycle
    MAIN: for ($o->{step} = $o->{steps}{first};; $o->{step} = getNextStep($o)) {
	$o->{steps}{$o->{step}}{entered}++;
	$o->enteringStep($o->{step});
	eval {
	    &{$install2::{$o->{step}}}($o->{steps}{$o->{step}}{auto});
	};
	my $err = $@;
	$o->kill_action;
	if ($err) {
	    local $_ = $err;
	    $o->kill_action;
	    if (!/^already displayed/) {
		eval { $o->errorInStep($_) };
		$o->{steps}{$o->{step}}{auto} = 0;
		$err = $@;
		$err and next;
	    }
	    $o->{step} = $o->{steps}{$o->{step}}{onError};
	    next MAIN unless $o->{steps}{$o->{step}}{reachable}; #- sanity check: avoid a step not reachable on error.
	    redo MAIN;
	}
	$o->{steps}{$o->{step}}{done} = 1;
	$o->leavingStep($o->{step});

	last if $o->{step} eq 'exitInstall';
    }
    unlink $install_any::clp_on_disk;
    install_any::clean_postinstall_rpms();
    install_any::log_sizes($o);
    install_any::remove_advertising($o);
    install_any::write_fstab($o);
    $o->{modules_conf}->write;
    detect_devices::install_addons($o->{prefix});

    #- mainly for auto_install's
    #- do not use run_program::xxx because it does not leave stdin/stdout unchanged
    system("bash", "-c", $o->{postInstallNonRooted}) if $o->{postInstallNonRooted};
    system("chroot", $o->{prefix}, "bash", "-c", $o->{postInstall}) if $o->{postInstall};

    install_any::ejectCdrom();

    #- to ensure linuxconf does not cry against those files being in the future
    foreach ('/etc/modules.conf', '/etc/crontab', '/etc/sysconfig/mouse', '/etc/sysconfig/network', '/etc/X11/fs/config') {
	my $now = time() - 24 * 60 * 60;
	utime $now, $now, "$o->{prefix}/$_";
    }
    install_any::killCardServices();

    #- make sure failed upgrade will not hurt too much.
    install_steps::cleanIfFailedUpgrade($o);

    -e "$o->{prefix}/usr/sbin/urpmi.update" or eval { rm_rf("$o->{prefix}/var/lib/urpmi") };

    #- copy latest log files
    eval { cp_af("/tmp/$_", "$o->{prefix}/root/drakx") foreach qw(ddebug.log stage1.log) };

    #- ala pixel? :-) [fpons]
    common::sync(); common::sync();

    log::l("installation complete, leaving");
    log::l("files still open by install2: ", readlink($_)) foreach glob_("/proc/self/fd/*");
    print "\n" x 80;
}

1;