summaryrefslogtreecommitdiffstats
path: root/perl-install/install_steps.pm
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2007-04-25 12:26:16 +0000
committerPascal Rigaux <pixel@mandriva.com>2007-04-25 12:26:16 +0000
commit126777bc019a54afb4ec51299f2cf9d2841698aa (patch)
tree97f76e571902ead55ba138f1156a4b4f00b9b779 /perl-install/install_steps.pm
parentf1f67448efc714873378dfeb8279fae68054a90a (diff)
downloaddrakx-126777bc019a54afb4ec51299f2cf9d2841698aa.tar
drakx-126777bc019a54afb4ec51299f2cf9d2841698aa.tar.gz
drakx-126777bc019a54afb4ec51299f2cf9d2841698aa.tar.bz2
drakx-126777bc019a54afb4ec51299f2cf9d2841698aa.tar.xz
drakx-126777bc019a54afb4ec51299f2cf9d2841698aa.zip
re-sync after the big svn loss
Diffstat (limited to 'perl-install/install_steps.pm')
-rw-r--r--perl-install/install_steps.pm1067
1 files changed, 0 insertions, 1067 deletions
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm
deleted file mode 100644
index 13ae63365..000000000
--- a/perl-install/install_steps.pm
+++ /dev/null
@@ -1,1067 +0,0 @@
-package install_steps; # $Id$
-
-use diagnostics;
-use strict;
-use vars qw(@filesToSaveForUpgrade @filesNewerToUseAfterUpgrade);
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common;
-use install_any qw(:all);
-use partition_table;
-use detect_devices;
-use fs::type;
-use modules;
-use run_program;
-use lang;
-use keyboard;
-use fsedit;
-use do_pkgs;
-use pkgs;
-use any;
-use log;
-
-our @ISA = qw(do_pkgs);
-
-@filesToSaveForUpgrade = qw(
-/etc/ld.so.conf /etc/fstab /etc/hosts /etc/conf.modules /etc/modules.conf
-);
-
-@filesNewerToUseAfterUpgrade = qw(
-/etc/profile
-);
-
-#-######################################################################################
-#- OO Stuff
-#-######################################################################################
-sub new($$) {
- my ($type, $o) = @_;
-
- bless $o, ref($type) || $type;
- return $o;
-}
-
-sub charsetChanged {
- my ($_o) = @_;
-}
-
-#-######################################################################################
-#- In/Out Steps Functions
-#-######################################################################################
-sub enteringStep {
- my ($_o, $step) = @_;
- log::l("starting step `$step'");
-}
-sub leavingStep {
- my ($o, $step) = @_;
- log::l("step `$step' finished");
-
- if (-d "$o->{prefix}/root/drakx") {
- eval { cp_af("/tmp/ddebug.log", "$o->{prefix}/root/drakx") };
- output(install_any::auto_inst_file(), install_any::g_auto_install(1));
- }
-
- foreach my $s (@{$o->{orderedSteps}}) {
- #- the reachability property must be recomputed each time to take
- #- into account failed step.
- next if $o->{steps}{$s}{done} && !$o->{steps}{$s}{redoable};
-
- my $reachable = 1;
- if (my $needs = $o->{steps}{$s}{needs}) {
- my @l = ref($needs) ? @$needs : $needs;
- $reachable = min(map { $o->{steps}{$_}{done} || 0 } @l);
- }
- $o->{steps}{$s}{reachable} = 1 if $reachable;
- }
- $o->{steps}{$step}{reachable} = $o->{steps}{$step}{redoable};
-
- while (my $f = shift @{$o->{steps}{$step}{toBeDone} || []}) {
- eval { &$f() };
- $o->ask_warn(N("Error"), [
-N("An error occurred, but I do not know how to handle it nicely.
-Continue at your own risk."), formatError($@) || $@ ]) if $@;
- }
-}
-
-sub errorInStep {
- my ($_o, $err) = @_;
- print "error :(\n";
- print "$err\n\n";
- c::_exit(1);
-}
-sub kill_action {}
-
-#-######################################################################################
-#- Steps Functions
-#-######################################################################################
-#------------------------------------------------------------------------------
-sub selectLanguage {
- my ($o) = @_;
-
- #- for auto_install compatibility with old $o->{lang}
- $o->{locale} = lang::system_locales_to_ourlocale($o->{lang}, $o->{lang}) if $o->{lang};
- $o->{locale}{langs} ||= { $o->{locale}{lang} => 1 };
-
- if (!exists $o->{locale}{country}) {
- lang::lang_changed($o->{locale});
- }
-
- lang::set($o->{locale}, !$o->isa('interactive::gtk'));
- add2hash_($o->{locale}, { utf8 => lang::utf8_should_be_needed($o->{locale}) });
-
- log::l("selectLanguage: pack_langs: ", lang::pack_langs($o->{locale}{langs}), " utf8-flag: ", to_bool($o->{locale}{utf8}));
-
- #- for auto_install compatibility with old $o->{keyboard} containing directly $o->{keyboard}{KEYBOARD}
- $o->{keyboard} = { KEYBOARD => $o->{keyboard} } if $o->{keyboard} && !ref($o->{keyboard});
-
- if (!$o->{keyboard} || $o->{keyboard}{unsafe}) {
- $o->{keyboard} = keyboard::default($o->{locale});
- $o->{keyboard}{unsafe} = 1;
- keyboard::setup_install($o->{keyboard});
- }
-
- $o->charsetChanged;
-
- addToBeDone {
- lang::write_langs($o->{locale}{langs});
- } 'formatPartitions';
- addToBeDone {
- lang::write_and_install($o->{locale}, $o->do_pkgs);
- } 'installPackages';
-}
-#------------------------------------------------------------------------------
-sub selectKeyboard {
- my ($o) = @_;
- keyboard::setup_install($o->{keyboard});
-
- addToBeDone {
- keyboard::write($o->{keyboard});
- } 'installPackages' if !$o->{isUpgrade} || !$o->{keyboard}{unsafe};
-
- if ($o->{raw_X}) {
- require Xconfig::default;
- Xconfig::default::config_keyboard($o->{raw_X}, $o->{keyboard});
- $o->{raw_X}->write;
- }
-}
-#------------------------------------------------------------------------------
-sub acceptLicense {}
-
-#------------------------------------------------------------------------------
-sub setupSCSI {
- my ($o) = @_;
- install_any::configure_pcmcia($o->{modules_conf}, $o->{pcmcia}) if $o->{pcmcia};
- modules::load(modules::category2modules('disk/cdrom'));
- modules::load_category($o->{modules_conf}, 'bus/firewire');
- modules::load_category($o->{modules_conf}, 'disk/ide|scsi|hardware_raid|sata|firewire');
-
- install_any::getHds($o);
-}
-
-#------------------------------------------------------------------------------
-sub selectInstallClass {
- my ($o) = @_;
-
- if ($o->{partitioning}{use_existing_root} || $o->{isUpgrade}) {
- # either one root is defined (and all is ok), or we take the first one we find
- my $p = fs::get::root_($o->{fstab}) || (first(install_any::find_root_parts($o->{fstab}, $o->{prefix})) || die)->{part};
- $o->{migrate_device_names} = install_any::use_root_part($o->{all_hds}, $p);
- }
-}
-
-#------------------------------------------------------------------------------
-sub doPartitionDisksBefore {
- my ($o) = @_;
- eval {
- eval { fs::mount::umount("$::prefix/sys") };
- eval { fs::mount::umount("$::prefix/proc/bus/usb") };
- eval { fs::mount::umount("$::prefix/proc") };
- eval { fs::mount::umount_all($o->{fstab}) };
- eval { sleep 1; fs::mount::umount_all($o->{fstab}) } if $@; #- HACK
- } if $o->{fstab} && !$::testing;
-}
-
-#------------------------------------------------------------------------------
-sub doPartitionDisksAfter {
- my ($o) = @_;
-
- if (!$::testing) {
- my $hds = $o->{all_hds}{hds};
- partition_table::write($_) foreach @$hds;
- $_->{rebootNeeded} and $o->rebootNeeded foreach @$hds;
- }
-
- fs::set_removable_mntpoints($o->{all_hds});
- fs::mount_options::set_all_default($o->{all_hds}, %$o, lang::fs_options($o->{locale}))
- if !$o->{isUpgrade};
-
- $o->{fstab} = [ fs::get::fstab($o->{all_hds}) ];
-
- if ($::local_install) {
- my $p = fs::get::mntpoint2part($::prefix, [ fs::read_fstab('', '/proc/mounts') ]);
- my $part = fs::get::device2part($p->{device}, $o->{fstab}) || $o->{fstab}[0];
- $part->{mntpoint} = '/';
- $part->{isMounted} = 1;
- }
-
- fs::get::root_($o->{fstab}) or die "Oops, no root partition";
-
- if (arch() =~ /ppc/ && detect_devices::get_mac_generation() =~ /NewWorld/) {
- die "Need bootstrap partition to boot system!" if !(defined $partition_table::mac::bootstrap_part);
- }
-
- if (arch() =~ /ia64/ && !fs::get::has_mntpoint("/boot/efi", $o->{all_hds})) {
- die N("You must have a FAT partition mounted in /boot/efi");
- }
-
- if ($o->{partitioning}{use_existing_root}) {
- #- ensure those partitions are mounted so that they are not proposed in choosePartitionsToFormat
- fs::mount::part($_) foreach sort { $a->{mntpoint} cmp $b->{mntpoint} }
- grep { $_->{mntpoint} && maybeFormatted($_) } @{$o->{fstab}};
- }
-
- cat_("/proc/mounts") =~ m|(\S+)\s+/tmp/nfsimage| &&
- !any { $_->{mntpoint} eq "/mnt/nfs" } @{$o->{all_hds}{nfss}} and
- push @{$o->{all_hds}{nfss}}, { fs_type => 'nfs', mntpoint => "/mnt/nfs", device => $1, options => "noauto,ro,nosuid,soft,rsize=8192,wsize=8192" };
-}
-
-#------------------------------------------------------------------------------
-sub doPartitionDisks {
- my ($o) = @_;
-
- if ($o->{partitioning}{auto_allocate}) {
- catch_cdie { fsedit::auto_allocate($o->{all_hds}, $o->{partitions}) } sub { 1 };
- }
-}
-
-#------------------------------------------------------------------------------
-
-sub ask_mntpoint_s {#-}}}
- my ($_o, $fstab) = @_;
-
- #- TODO: set the mntpoints
-
- my %m; foreach (@$fstab) {
- my $m = $_->{mntpoint};
-
- $m && $m =~ m!^/! or next; #- there may be a lot of swaps or "none"
-
- $m{$m} and die N("Duplicate mount point %s", $m);
- $m{$m} = 1;
-
- #- in case the type does not correspond, force it to ext3
- fs::type::set_fs_type($_, 'ext3') if !isTrueFS($_) && !isOtherAvailableFS($_);
- }
- 1;
-}
-
-
-sub rebootNeeded($) {
- my ($_o) = @_;
- log::l("Rebooting...");
- c::_exit(0);
-}
-
-sub choosePartitionsToFormat($$) {
- my ($_o, $fstab) = @_;
-
- return if $::local_install;
-
- foreach (@$fstab) {
- $_->{mntpoint} = "swap" if isSwap($_);
- $_->{mntpoint} or next;
-
- add2hash_($_, { toFormat => $_->{notFormatted} }) if $_->{fs_type}; #- eg: do not set toFormat for isRawRAID (0xfd)
- $_->{toFormatUnsure} ||= member($_->{mntpoint}, '/', '/usr');
-
- if (!$_->{toFormat}) {
- my $fs_type = fs::type::fs_type_from_magic($_);
- if (!$fs_type || $fs_type ne $_->{fs_type}) {
- log::l("setting toFormatUnsure for $_->{device} because <$_->{fs_type}> ne <$fs_type>");
- $_->{toFormatUnsure} = 1;
- }
- }
- }
-}
-
-sub formatMountPartitions {
- my ($o) = @_;
- fs::format::formatMount_all($o->{all_hds}, $o->{fstab}, undef);
-}
-
-#------------------------------------------------------------------------------
-sub setPackages {
- my ($o) = @_;
-
- install_any::setPackages($o, sub {});
-}
-
-sub deselectFoundMedia {
- my (undef, $hdlists) = @_;
- return $hdlists, 0;
-}
-
-sub selectSupplMedia { '' }
-sub askSupplMirror { '' }
-
-sub choosePackages {
- my ($o) = @_;
-
- #- now for upgrade, package that must be upgraded are
- #- selected first, after is used the same scheme as install.
-
- #- make sure we kept some space left for available else the system may
- #- not be able to start (xfs at least).
- my $available = install_any::getAvailableSpace($o);
- my $availableCorrected = pkgs::invCorrectSize($available / sqr(1024)) * sqr(1024);
- log::l(sprintf "available size %s (corrected %s)", formatXiB($available), formatXiB($availableCorrected));
-
- add2hash_($o, { compssListLevel => 5 }) if !$::auto_install;
-
- #- !! destroying user selection of packages (they may have done individual selection before)
- exists $o->{compssListLevel}
- and pkgs::setSelectedFromCompssList($o->{packages}, $o->{rpmsrate_flags_chosen}, $o->{compssListLevel}, $availableCorrected);
-
- $availableCorrected;
-}
-
-sub upgrading_redhat() {
- #- remove weird config files that bother Xconfig::* too much
- unlink "$::prefix/etc/X11/XF86Config";
- unlink "$::prefix/etc/X11/XF86Config-4";
-
- sub prefering_mdk {
- my ($lpkg, $rpkg_ver, $c) = @_;
- my $lpkg_ver = $lpkg->version . '-' . $lpkg->release;
- log::l($lpkg->name . ' ' . ': prefering ' . ($c == 1 ? "$lpkg_ver over $rpkg_ver" : "$rpkg_ver over $lpkg_ver"));
- }
-
- my $old_compare_pkg = \&URPM::Package::compare_pkg;
- undef *URPM::Package::compare_pkg;
- *URPM::Package::compare_pkg = sub {
- my ($lpkg, $rpkg) = @_;
- my $c = ($lpkg->release =~ /mdk$/ ? 1 : 0) - ($rpkg->release =~ /mdk$/ ? 1 : 0);
- if ($c) {
- prefering_mdk($lpkg, $rpkg->version . '-' . $rpkg->release, $c);
- $c;
- } else {
- &$old_compare_pkg;
- }
- };
-
- my $old_compare = \&URPM::Package::compare;
- undef *URPM::Package::compare;
- *URPM::Package::compare = sub {
- my ($lpkg, $rpkg_ver) = @_;
- my $c = ($lpkg->release =~ /mdk$/ ? 1 : 0) - ($rpkg_ver =~ /mdk$/ ? 1 : 0);
- if ($c) {
- prefering_mdk($lpkg, $rpkg_ver, $c);
- return $c;
- }
- &$old_compare;
- };
-}
-
-sub beforeInstallPackages {
- my ($o) = @_;
-
- read_bootloader_config($o);
-
- if ($o->{isUpgrade}) {
- $o->{modules_conf}->merge_into(modules::any_conf->read);
- }
-
- #- save these files in case of upgrade failure.
- if ($o->{isUpgrade}) {
- foreach (@filesToSaveForUpgrade) {
- unlink "$o->{prefix}/$_.mdkgisave";
- if (-e "$o->{prefix}/$_") {
- eval { cp_af("$o->{prefix}/$_", "$o->{prefix}/$_.mdkgisave") };
- }
- }
- foreach (@filesNewerToUseAfterUpgrade) {
- unlink "$o->{prefix}/$_.rpmnew";
- }
- }
-
- #- mainly for upgrading redhat packages, but it can help other
- my @should_not_be_dirs = qw(/usr/X11R6/lib/X11/xkb /usr/share/locale/zh_TW/LC_TIME /usr/include/GL);
- my @should_be_dirs = qw(/etc/X11/xkb);
- my @to_remove = (
- (grep { !-l $_ && -d $_ } map { "$::prefix$_" } @should_not_be_dirs),
- (grep { -l $_ || !-d $_ && -e $_ } map { "$::prefix$_" } @should_be_dirs),
- );
- rm_rf(@to_remove);
-
- if ($o->{isUpgrade} eq 'redhat') {
- upgrading_redhat();
- }
-
- if ($o->{isUpgrade} =~ /redhat|conectiva/) {
- #- to ensure supermount is removed for cds
- fs::mount_options::set_all_default($o->{all_hds}, %$o, lang::fs_options($o->{locale}));
- }
-
-
- #- some packages need such files for proper installation.
- install_any::write_fstab($o);
-
- require network::network;
- network::network::add2hosts("localhost", "127.0.0.1");
-
- log::l("setting excludedocs to $o->{excludedocs}");
- substInFile { s/%_excludedocs.*//; $_ .= "%_excludedocs yes\n" if eof && $o->{excludedocs} } "$o->{prefix}/etc/rpm/macros";
-
- #- add oem theme if the files exists.
- mkdir_p("$o->{prefix}/usr/share");
- install_any::getAndSaveFile("install/oem-theme.rpm", "$o->{prefix}/usr/share/oem-theme.rpm");
-}
-
-#- returns number of packages installed, 0 if none were selected.
-sub pkg_install {
- my ($o, @l) = @_;
- log::l("selecting packages " . join(" ", @l));
- require pkgs;
- if ($::testing) {
- log::l(qq(selecting package "$_")) foreach @l;
- } else {
- pkgs::selectPackage($o->{packages}, pkgs::packageByName($o->{packages}, $_) || die "$_ rpm not found") foreach @l;
- }
- my @toInstall = pkgs::packagesToInstall($o->{packages});
- if (@toInstall) {
- log::l("installing packages");
- $o->installPackages;
- } else {
- log::l("all packages selected are already installed, nothing to do");
- 0;
- }
-}
-
-sub installCallback {
-# my (undef, $msg, @para) = @_;
-# log::l("$msg: " . join(',', @para));
-}
-
-sub installPackages { #- complete REWORK, TODO and TOCHECK!
- my ($o) = @_;
- my $packages = $o->{packages};
-
- pkgs::remove_marked_ask_remove($packages, \&installCallback);
-
- #- small transaction will be built based on this selection and depslist.
- my @toInstall = pkgs::packagesToInstall($packages);
-
- my $time = time();
- {
- local $ENV{DURING_INSTALL} = 1;
- local $ENV{TMPDIR} = '/tmp';
- local $ENV{TMP} = '/tmp';
- pkgs::install($o->{isUpgrade}, \@toInstall, $packages, \&installCallback);
- }
- any::writeandclean_ldsoconf($o->{prefix});
-
- run_program::rooted_or_die($o->{prefix}, 'ldconfig');
-
- eval {
- run_program::rooted($o->{prefix}, 'gdk-pixbuf-query-loaders', '>', '/etc/gtk-2.0/gdk-pixbuf.loaders.' . (arch() =~ /64/ ? 'lib64' : 'lib'));
- run_program::rooted($o->{prefix}, 'gtk-query-immodules-2.0', '>', '/etc/gtk-2.0/gtk.immodules.' . (arch() =~ /64/ ? 'lib64' : 'lib'));
- run_program::rooted($o->{prefix}, 'pango-querymodules-' . (arch() =~ /64/ ? '64' : '32'), '>', '/etc/pango/' . (arch() =~ /i.86/ ? 'i386' : arch()) . '/pango.modules');
- };
-
- log::l("Install took: ", formatTimeRaw(time() - $time));
- install_any::log_sizes($o);
- scalar(@toInstall); #- return number of packages installed.
-}
-
-sub afterInstallPackages($) {
- my ($o) = @_;
-
- read_bootloader_config($o) if $o->{isUpgrade} && is_empty_hash_ref($o->{bootloader});
-
- die N("Some important packages did not get installed properly.
-Either your cdrom drive or your cdrom is defective.
-Check the cdrom on an installed computer using \"rpm -qpl media/main/*.rpm\"
-") if any { m|read failed: Input/output error| } cat_("$o->{prefix}/root/drakx/install.log");
-
- if (arch() !~ /^sparc/) { #- TODO restore it as may be needed for sparc
- -x "$o->{prefix}/usr/bin/dumpkeys" or $::testing or die
-"Some important packages did not get installed properly.
-
-Please switch to console 2 (using ctrl-alt-f2)
-and look at the log file /tmp/ddebug.log
-
-Consoles 1,3,4,7 may also contain interesting information";
- }
-
- #- why not? cuz weather is nice today :-) [pixel]
- common::sync(); common::sync();
-
- #- generate /etc/lvmtab needed for rc.sysinit
- run_program::rooted($o->{prefix}, 'lvm2', 'vgscan') if -e '/etc/lvmtab';
-
- #- configure PCMCIA services if needed.
- require harddrake::autoconf;
- harddrake::autoconf::pcmcia($o->{pcmcia});
-
- #- for mandrake_firstime
- touch "$o->{prefix}/var/lock/TMP_1ST";
-
- any::config_dvd($o->{prefix}, 0);
- any::config_mtools($o->{prefix});
-
- #- make sure wins is disabled in /etc/nsswitch.conf
- #- else if eth0 is not existing, glibc segfaults.
- substInFile { s/\s*wins// if /^\s*hosts\s*:/ } "$o->{prefix}/etc/nsswitch.conf";
-
- #- make sure some services have been enabled (or a catastrophic restart will occur).
- #- these are normally base package post install scripts or important services to start.
- run_program::rooted($o->{prefix}, "chkconfig", "--add", $_) foreach
- qw(netfs network rawdevices sound kheader keytable syslog crond portmap);
-
- if ($o->{mouse}{device} =~ /ttyS/) {
- log::l("disabling gpm for serial mice (does not get along nicely with X)");
- run_program::rooted($o->{prefix}, "chkconfig", "--del", "gpm");
- }
-
- #- install urpmi before as rpmdb will be opened, this will cause problem with update-menus.
- $o->install_urpmi;
-
- #- update menu scheme before calling update menus if desktop mode.
- if ($o->{meta_class} eq 'desktop') {
- run_program::rooted($o->{prefix}, "touch", "/etc/menu/do-not-create-menu-link");
- run_program::rooted($o->{prefix}, "touch", "/etc/menu/enable_simplified");
- } elsif (!$o->{isUpgrade}) {
- run_program::rooted($o->{prefix}, "touch", "/etc/menu/do-not-create-menu-link");
- }
-
- if ($o->{pcmcia}) {
- substInFile { s/.*(TaskBarShowAPMStatus).*/$1=1/ } "$o->{prefix}/usr/lib/X11/icewm/preferences";
- eval { cp_af("$o->{prefix}/usr/share/applnk/System/kapm.kdelnk",
- "$o->{prefix}/etc/skel/Desktop/Autostart/kapm.kdelnk") };
- }
-
- if ($o->{brltty}) {
- output("$o->{prefix}/etc/brltty.conf", <<EOF);
-braille-driver $o->{brltty}{driver}
-braille-device $o->{brltty}{device}
-text-table $o->{brltty}{table}
-EOF
- }
-
-
- install_any::disable_user_view() if $o->{security} >= 3 || $o->{authentication}{NIS};
- run_program::rooted($o->{prefix}, "kdeDesktopCleanup");
-
- #- move some file after an upgrade that may be seriously annoying.
- #- and rename saved files to .mdkgiorig.
- if ($o->{isUpgrade}) {
- my $pkg = pkgs::packageByName($o->{packages}, 'rpm');
- $pkg && ($pkg->flag_selected || $pkg->flag_installed) && $pkg->compare(">= 4.0") and pkgs::cleanOldRpmDb();
-
- log::l("moving previous desktop files that have been updated to Trash of each user");
- install_any::kdemove_desktop_file($o->{prefix});
-
- foreach (@filesToSaveForUpgrade) {
- renamef("$o->{prefix}/$_.mdkgisave", "$o->{prefix}/$_.mdkgiorig")
- if -e "$o->{prefix}$_.mdkgisave";
- }
-
- foreach (@filesNewerToUseAfterUpgrade) {
- if (-e "$o->{prefix}/$_.rpmnew" && -e "$o->{prefix}/$_") {
- renamef("$o->{prefix}/$_", "$o->{prefix}/$_.mdkgiorig");
- renamef("$o->{prefix}/$_.rpmnew", "$o->{prefix}/$_");
- }
- }
- }
-
- renamef(pkgs::removed_pkgs_to_upgrade_file(), pkgs::removed_pkgs_to_upgrade_file() . '.done');
- unlink(glob("$::prefix/root/drakx/*.upgrading"));
-
- if ($o->{upgrade_by_removing_pkgs_matching}) {
- if (cat_("$::prefix/etc/inittab.rpmsave") =~ /^id:5:initdefault:\s*$/m) {
- $o->{X}{xdm} = 1;
- require Xconfig::various;
- Xconfig::various::runlevel(5);
- }
- }
-
- any::fix_broken_alternatives($o->{isUpgrade} eq 'redhat');
-
- #- update theme directly from a package (simplest).
- if (-s "$o->{prefix}/usr/share/oem-theme.rpm") {
- run_program::rooted($o->{prefix}, "rpm", "-U", "/usr/share/oem-theme.rpm");
- unlink "/usr/share/oem-theme.rpm";
- }
-
- #- call update-menus at the end of package installation
- push @{$o->{waitpids}}, run_program::raw({ root => $o->{prefix}, detach => 1 }, "update-menus", "-n");
-
- if ($o->{updatemodules}) {
- $o->updatemodules($ENV{THIRDPARTY_DEVICE}, $ENV{THIRDPARTY_DIR});
- }
-}
-
-sub install_urpmi {
- my ($o) = @_;
-
- my $pkg = pkgs::packageByName($o->{packages}, 'urpmi');
- if ($pkg && ($pkg->flag_selected || $pkg->flag_installed)
- #- this is a workaround. if many urpmi packages are found in the
- #- provides of all media, packagesProviding() might return the wrong
- #- one. This probably needs to be fixed in URPM
- || run_program::rooted_get_stdout($::prefix, '/usr/bin/rpm', '-q', 'urpmi') =~ /urpmi/
- ) {
- install_any::install_urpmi($o->{method}, $o->{packages});
- pkgs::saveCompssUsers($o->{packages}, $o->{compssUsers});
- } else {
- log::l("skipping install_urpmi, urpmi not installed");
- }
-}
-
-sub updatemodules {
- my ($_o, $dev, $rel_dir) = @_;
- return if $::testing;
-
- $dev = devices::make($dev) or log::l("updatemodules: bad device $dev"), return;
-
- my $mount_dir = '/updatemodules';
- find {
- eval { fs::mount::mount($dev, $mount_dir, $_, 0); 1 };
- } 'ext2', 'vfat' or log::l("updatemodules: can't mount $dev"), return;
-
- my $dir = "$mount_dir$rel_dir";
- foreach my $kernel_version (all("$::prefix/lib/modules")) {
- log::l("examining updated modules for kernel $kernel_version");
- -d "$dir/$kernel_version" or next;
- log::l("found updatable modules");
- run_program::run("cd $dir/$kernel_version ; find -type f | cpio -pdu $::prefix/lib/modules/$kernel_version");
- run_program::rooted($::prefix, 'depmod', '-a', '-F', "/boot/System.map-$kernel_version", $kernel_version);
- }
-
- my $category;
- foreach (cat_("$dir/to_load")) {
- chomp;
- if (/^#/) {
- ($category) = $1 if /\[list_modules: (.*?)\]/;
- } elsif ($category) {
- log::l("adding $_ to $category\n");
- my $r = \%list_modules::l;
- $r = $r->{$_} foreach split('/', $category);
- push @$r, $_;
-
- $category = '';
- }
- }
-
- fs::mount::umount($mount_dir);
-}
-
-#------------------------------------------------------------------------------
-sub selectMouse($) {
- my ($_o) = @_;
-}
-
-#------------------------------------------------------------------------------
-sub configureNetwork {
- my ($o) = @_;
- require network::network;
- network::network::configure_network($o->{net}, $o, $o->{modules_conf});
- configure_firewall($o) if !$o->{isUpgrade};
-
- #- only a http proxy can be used by stage1
- #- the method is http even for ftp connections through a http proxy
- #- use this http proxy for both http and ftp connections
- if ($o->{method} eq "http" && $ENV{PROXY}) {
- my $proxy = "http://$ENV{PROXY}" . ($ENV{PROXYPORT} && ":$ENV{PROXYPORT}");
- add2hash($o->{miscellaneous} ||= {}, {
- http_proxy => $proxy,
- ftp_proxy => $proxy,
- });
- network::network::proxy_configure($o->{miscellaneous});
- }
-}
-
-sub configure_firewall {
- my ($o) = @_;
-
- #- set up a firewall if ports have been specified or if the security level is high enough
- if (exists $o->{firewall_ports} || $o->{security} >= 3) {
- require network::drakfirewall;
- $o->{firewall_ports} ||= ''; #- don't open any port by default
- network::drakfirewall::set_ports($o->do_pkgs, 0, $o->{firewall_ports});
- network::drakfirewall::set_ifw($o->do_pkgs, 1, [ 'psd' ], '');
- }
-}
-
-#------------------------------------------------------------------------------
-sub installUpdates {
- my ($o) = @_;
- my $u = $o->{updates} or return; $u->{updates} or return;
-
- upNetwork($o);
- require crypto;
- crypto::getPackages($o->{packages}, $u->{mirror}) and
- $o->pkg_install(@{$u->{packages} || []});
-
- #- re-install urpmi with update security medium.
- $o->install_urpmi;
-}
-
-sub summaryBefore {}
-
-sub summary {
- my ($o) = @_;
- configureTimezone($o);
- configurePrinter($o) if $o->{printer} && $o->{printer}{SPOOLER};
-}
-
-sub summaryAfter {
- my ($_o) = @_;
-}
-
-#------------------------------------------------------------------------------
-sub configureTimezone {
- my ($o) = @_;
- install_any::preConfigureTimezone($o);
-
- $o->pkg_install('ntp') if $o->{timezone}{ntp};
-
- require timezone;
- timezone::write($o->{timezone});
-}
-
-#------------------------------------------------------------------------------
-sub configureServices {
- my ($o) = @_;
- if ($o->{services}) {
- require services;
- services::doit($o, $o->{services});
- }
-}
-#------------------------------------------------------------------------------
-sub configurePrinter {
- my ($o) = @_;
- eval {
- $o->do_pkgs->install('foomatic-filters', 'foomatic-db-engine', 'foomatic-db', 'foomatic-db-hpijs', 'gutenprint-foomatic', 'postscript-ppds', 'printer-utils', 'printer-filters', 'printer-testpages',
- if_($o->do_pkgs->is_installed('gimp'), 'gutenprint-gimp2'));
- };
- if ($@ =~ /rpm not found/) {
- log::l("ERROR: $@");
- if ($o->{printer}) {
- require printer::printerdrake;
- printer::printerdrake::final_cleanup($o->{printer});
- }
- return;
- }
-
- require printer::main;
- eval { add2hash($o->{printer} ||= {}, printer::main::getinfo($o->{prefix})) }; #- get existing configuration.
-
- require printer::printerdrake;
- printer::printerdrake::install_spooler($o->{printer}, $o->{security}, $o->do_pkgs);
-
- foreach (values %{$o->{printer}{configured} || {}}) {
- log::l("configuring printer queue " . $_->{queuedata}{queue} || $_->{QUEUE});
- #- when copy is so adulee (sorry french taste :-)
- #- and when there are some configuration in one place and in another place...
- $o->{printer}{currentqueue} = {};
- printer::main::copy_printer_params($_->{queuedata}, $o->{printer}{currentqueue});
- printer::main::copy_printer_params($_, $o->{printer});
- #- setup all configured queues, which is not the case interactively where
- #- only the working queue is setup on configuration.
- printer::main::configure_queue($o->{printer});
- }
-}
-
-#------------------------------------------------------------------------------
-sub setRootPassword {
- my ($o) = @_;
- $o->{superuser} ||= {};
- require authentication;
- authentication::set_root_passwd($o->{superuser}, $o->{authentication});
- install_any::set_authentication($o);
-}
-
-#------------------------------------------------------------------------------
-
-sub addUser {
- my ($o) = @_;
- my $users = $o->{users} ||= [];
-
- if ($::prefix) {
- #- getpwnam, getgrnam, getgrid works
- symlinkf("$::prefix/etc/passwd", '/etc/passwd');
- symlinkf("$::prefix/etc/group", '/etc/group');
- }
-
- any::add_users($users, $o->{authentication});
-
- if ($o->{autologin}) {
- $o->{desktop} ||= first(any::sessions());
- $o->pkg_install("autologin") if !member($o->{desktop}, 'KDE', 'GNOME');
- }
- any::set_autologin($o->{autologin}, $o->{desktop});
-
- install_any::disable_user_view() if @$users == ();
-}
-
-#------------------------------------------------------------------------------
-sub read_bootloader_config {
- my ($o) = @_;
-
- require bootloader;
- eval { add2hash($o->{bootloader} ||= {}, bootloader::read($o->{all_hds})) };
- $@ && $o->{isUpgrade} and log::l("read_bootloader_config failed: $@");
-
- $o->{bootloader}{bootUnsafe} = 0 if $o->{bootloader}{boot}; #- when upgrading, do not ask where to install the bootloader (mbr vs boot partition)
-}
-
-sub setupBootloaderBefore {
- my ($o) = @_;
-
- require bootloader;
-
- #- auto_install backward compatibility
- #- one should now use {message_text}
- if ($o->{bootloader}{message} =~ m!^[^/]!) {
- $o->{bootloader}{message_text} = delete $o->{bootloader}{message};
- }
-
- #- remove previous ide-scsi lines
- bootloader::modify_append($o->{bootloader}, sub {
- my ($_simple, $dict) = @_;
- @$dict = grep { $_->[1] ne 'ide-scsi' } @$dict;
- });
-
- if (cat_("/proc/cmdline") =~ /mem=nopentium/) {
- bootloader::set_append_with_key($o->{bootloader}, mem => 'nopentium');
- }
- if (cat_("/proc/cmdline") =~ /\b(pci)=(\S+)/) {
- bootloader::set_append_with_key($o->{bootloader}, $1, $2);
- }
- if (my ($acpi) = cat_("/proc/cmdline") =~ /\bacpi=(\w+)/) {
- if ($acpi eq 'ht') {
- #- the user is using the default, which may not be the best
- my $year = detect_devices::computer_info()->{BIOS_Year};
- if ($year >= 2002) {
- log::l("forcing ACPI on recent bios ($year)");
- $acpi = '';
- }
- }
- bootloader::set_append_with_key($o->{bootloader}, acpi => $acpi);
- }
- if (cat_("/proc/cmdline") =~ /\bnoapic/) {
- bootloader::set_append_simple($o->{bootloader}, 'noapic');
- }
- my ($MemTotal) = cat_("/proc/meminfo") =~ /^MemTotal:\s*(\d+)/m;
- if (my ($biggest_swap) = sort { $b->{size} <=> $a->{size} } grep { isSwap($_) } @{$o->{fstab}}) {
- log::l("MemTotal: $MemTotal < ", $biggest_swap->{size} / 2);
- if ($MemTotal < $biggest_swap->{size} / 2) {
- bootloader::set_append_with_key($o->{bootloader}, resume => devices::make($biggest_swap->{device}));
- }
- }
-
- #- check for valid fb mode to enable a default boot with frame buffer.
- my $vga = $o->{allowFB} && (!detect_devices::matching_desc__regexp('3D Rage LT') &&
- !detect_devices::matching_desc__regexp('Rage Mobility [PL]') &&
- !detect_devices::matching_desc__regexp('i740') &&
- !detect_devices::matching_desc__regexp('Matrox') &&
- !detect_devices::matching_desc__regexp('Tseng.*ET6\d00') &&
- !detect_devices::matching_desc__regexp('SiS.*SG86C2.5') &&
- !detect_devices::matching_desc__regexp('SiS.*559[78]') &&
- !detect_devices::matching_desc__regexp('SiS.*300') &&
- !detect_devices::matching_desc__regexp('SiS.*540') &&
- !detect_devices::matching_desc__regexp('SiS.*6C?326') &&
- !detect_devices::matching_desc__regexp('SiS.*6C?236') &&
- !detect_devices::matching_desc__regexp('Voodoo [35]|Voodoo Banshee') && #- 3d acceleration seems to bug in fb mode
- !detect_devices::matching_desc__regexp('828[14][05].* CGC') #- i810 & i845 now have FB support during install but we disable it afterwards
- );
- my $force_vga = $o->{allowFB} && (detect_devices::matching_desc__regexp('SiS.*630') || #- SiS 630 need frame buffer.
- detect_devices::matching_desc__regexp('GeForce.*Integrated') #- needed for fbdev driver (hack).
- );
-
- #- propose the default fb mode for kernel fb, if aurora or bootsplash is installed.
- my $need_fb = do {
- my $p = pkgs::packageByName($o->{packages}, 'bootsplash');
- $p && $p->flag_installed;
- };
- bootloader::suggest($o->{bootloader}, $o->{all_hds},
- vga_fb => ($force_vga || $vga && $need_fb) && $o->{vga},
- quiet => $o->{meta_class} ne 'server');
-
- $o->{bootloader}{keytable} ||= keyboard::keyboard2kmap($o->{keyboard});
-}
-
-sub setupBootloader {
- my ($o) = @_;
-
- any::install_acpi_pkgs($o->do_pkgs, $o->{bootloader});
-
- require bootloader;
- bootloader::install($o->{bootloader}, $o->{all_hds});
-}
-
-#------------------------------------------------------------------------------
-sub configureXBefore {
- my ($o) = @_;
-
- #- keep this here if the package has to be updated.
- $o->pkg_install("xorg-x11");
-}
-sub configureX {
- my ($o) = @_;
- configureXBefore($o);
-
- require Xconfig::default;
- $o->{raw_X} = Xconfig::default::configure($o->do_pkgs, $o->{keyboard}, $o->{mouse});
-
- require Xconfig::main;
- Xconfig::main::configure_everything_auto_install($o->{raw_X}, $o->do_pkgs, $o->{X}, install_any::X_options_from_o($o));
- configureXAfter($o);
-}
-sub configureXAfter {
- my ($_o) = @_;
-}
-
-#------------------------------------------------------------------------------
-sub miscellaneousBefore {
- my ($o) = @_;
-
- require security::level;
- require security::various;
- $o->{security} ||= security::level::get();
- $o->{security_user} ||= security::various::config_security_user($o->{prefix});
- $o->{libsafe} ||= security::various::config_libsafe($o->{prefix});
-
- log::l("security $o->{security}");
-
- add2hash_($o->{miscellaneous} ||= {}, { numlock => !detect_devices::isLaptop() });
-}
-sub miscellaneous {
- my ($_o) = @_;
- #- keep some given parameters
- #-TODO
-}
-sub miscellaneousAfter {
- my ($o) = @_;
- add2hash_ $o, { useSupermount => $o->{security} < 4 ? 'magicdev' : 0 };
-
- $ENV{SECURE_LEVEL} = $o->{security}; #- deprecated with chkconfig 1.3.4-2mdk, uses /etc/sysconfig/msec
-
- addToBeDone {
- addVarsInSh("$o->{prefix}/etc/sysconfig/system", {
- META_CLASS => $o->{meta_class} || 'PowerPack',
- });
- substInFile { s/KEYBOARD_AT_BOOT=.*/KEYBOARD_AT_BOOT=yes/ } "$o->{prefix}/etc/sysconfig/usb" if detect_devices::usbKeyboards();
-
- eval { install_any::set_security($o) };
-
- } 'installPackages';
-}
-
-#------------------------------------------------------------------------------
-sub exitInstall {
- my ($o) = @_;
- eval {
- my $report = '/root/drakx/report.bug';
- unlink "$::prefix$report", "$::prefix$report.gz";
- output "$::prefix$report", install_any::report_bug();
- run_program::rooted($::prefix, 'gzip', $report);
- };
- eval { install_any::getAndSaveAutoInstallFloppies($o, 1) } if arch() !~ /^ppc/;
- eval { output "$o->{prefix}/root/drakx/README", "This directory contains several installation-related files,
-mostly log files (very useful if you ever report a bug!).
-
-Beware that some Mandriva Linux tools rely on the contents of some
-of these files... so remove any file from here at your own
-risk!
-" };
- install_any::deploy_server_notify($o) if exists $o->{deploy_server};
- #- wait for remaining processes.
- foreach (@{$o->{waitpids}}) {
- waitpid $_, 0;
- log::l("pid $_ returned $?");
- }
- install_any::ejectCdrom();
- install_any::log_sizes($o);
-}
-
-#------------------------------------------------------------------------------
-sub hasNetwork {
- my ($o) = @_;
- $o->{net}{type} && $o->{net}{network}{NETWORKING} ne 'no' and return 1;
- log::l("no network seems to be configured for internet ($o->{net}{type},$o->{net}{network}{NETWORKING})");
- 0;
-}
-
-sub network_is_cheap {
- my ($o) = @_;
- member($o->{net}{type}, qw(adsl lan cable));
-}
-
-#------------------------------------------------------------------------------
-sub upNetwork {
- my ($o, $b_pppAvoided) = @_;
-
- install_any::is_network_install($o) and return 1;
- $o->{modules_conf}->write;
- if (hasNetwork($o)) {
- if (network_is_cheap($o)) {
- log::l("starting network ($o->{net}{type})");
- require network::netconnect;
- network::netconnect::start_internet($o);
- return 1;
- } elsif (!$b_pppAvoided) {
- log::l("starting network (ppp: $o->{net}{type})");
- eval { modules::load(qw(serial ppp bsd_comp ppp_deflate)) };
- run_program::rooted($o->{prefix}, "/etc/rc.d/init.d/syslog", "start");
- require network::netconnect;
- network::netconnect::start_internet($o);
- return 1;
- } else {
- log::l(qq(not starting network (b/c ppp avoided and type is "$o->{net}{type})"));
- }
- }
- $::testing;
-}
-
-#------------------------------------------------------------------------------
-sub downNetwork {
- my ($o, $costlyOnly) = @_;
-
- install_any::is_network_install($o) and return 1;
- $o->{modules_conf}->write;
- if (hasNetwork($o)) {
- if (!$costlyOnly) {
- require network::netconnect;
- network::netconnect::stop_internet($o);
- return 1;
- } elsif (!network_is_cheap($o)) {
- require network::netconnect;
- network::netconnect::stop_internet($o);
- run_program::rooted($o->{prefix}, "/etc/rc.d/init.d/syslog", "stop");
- eval { modules::unload(qw(ppp_deflate bsd_comp ppp serial)) };
- return 1;
- }
- }
- $::testing;
-}
-
-#------------------------------------------------------------------------------
-sub cleanIfFailedUpgrade($) {
- my ($o) = @_;
-
- #- if an upgrade has failed, there should be .mdkgisave files around.
- if ($o->{isUpgrade}) {
- foreach (@filesToSaveForUpgrade) {
- if (-e "$o->{prefix}/$_" && -e "$o->{prefix}/$_.mdkgisave") {
- rename "$o->{prefix}/$_", "$o->{prefix}/$_.mdkginew"; #- keep new files around in case !
- rename "$o->{prefix}/$_.mdkgisave", "$o->{prefix}/$_";
- }
- }
- }
-}
-
-
-1;