diff options
Diffstat (limited to 'globetrotter/move.pm')
-rw-r--r-- | globetrotter/move.pm | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/globetrotter/move.pm b/globetrotter/move.pm new file mode 100644 index 000000000..c61f3649b --- /dev/null +++ b/globetrotter/move.pm @@ -0,0 +1,171 @@ +package move; # $Id$ + +#- Copyright (c) 2004 MandrakeSoft +#- +#- This program is free software; you can redistribute it and/or modify +#- it under the terms of the GNU General Public License as published by +#- the Free Software Foundation; either version 2, or (at your option) +#- any later version. +#- +#- This program is distributed in the hope that it will be useful, +#- but WITHOUT ANY WARRANTY; without even the implied warranty of +#- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#- GNU General Public License for more details. +#- +#- You should have received a copy of the GNU General Public License +#- along with this program; if not, write to the Free Software +#- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +use diagnostics; +use strict; + +use c; +use common; +use modules; +use fs; +use fsedit; +use run_program; +use partition_table qw(:types); +use swap; +use log; +use lang; +use detect_devices; + +sub symlinkf_short { + my ($dest, $file) = @_; + if (my $l = readlink $dest) { + $dest = $l if $l =~ m!^/!; + } + -d $file and log::l("$file already exists and is a directory! writing in directory may be needed, not overwriting"), return; + symlinkf($dest, $file); +} + +#- run very soon at stage2 start, setup things on tmpfs rw / that +#- were not necessary to start stage2 itself (there were setup +#- by stage1 of course) +sub init { + my ($o) = @_; + + check_for_xserver() and c::bind_textdomain_codeset('libDrakX2', 'UTF8'); + + + -d '/lib/modules/' . c::kernel_version() or warn("ERROR: kernel package " . c::kernel_version() . " not installed\n"), c::_exit(1); + + run_program::run('sysctl', '-w', 'kernel.hotplug=/bin/true'); + modules::load_category('bus/usb'); + *c::pcmcia_probe = \&detect_devices::pcmcia_probe; + $o->{pcmcia} ||= !$::noauto && c::pcmcia_probe(); + install_steps::setupSCSI($o); + run_program::run('sysctl', '-w', 'kernel.hotplug=/sbin/hotplug'); + +drakx_stuff: + $o->{steps}{$_} = { reachable => 1, text => $_ } + foreach qw(autoSelectLanguage configMove selectMouse setRootPassword addUser configureNetwork miscellaneous selectMouse); + $o->{orderedSteps_orig} = $o->{orderedSteps}; + $o->{orderedSteps} = [ qw(selectLanguage acceptLicense selectMouse setupSCSI miscellaneous selectKeyboard setRootPassword addUser configureNetwork configMove ) ]; + $o->{steps}{first} = $o->{orderedSteps}[0]; +} + + + + +sub enable_service { + run_program::run('/sbin/chkconfig', '--level', 5, $_[0], 'on'); +} + +sub disable_service { + run_program::run('/sbin/chkconfig', '--del', $_[0], 'on'); +} + +sub install2::configMove { + my $o = $::o; + + security::level::set($o->{security}); + + require install_steps; + install_steps::addUser($o); # for test, when replaying wizard on an already configured machine + while ($#{$o->{users}} ne -1) { + install_steps::addUser($o); + } + + $::noauto and goto after_autoconf; + + my $_wait = $o->wait_message(N("Auto configuration"), N("Please wait, detecting and configuring devices...")); + + #- automatic printer, timezone, network configs + require install_steps_interactive; + if (cat_('/proc/mounts') !~ /nfs/) { + install_steps_interactive::configureNetwork($o); + enable_service('network'); + } + enable_service('netfs'); + install_steps_interactive::summaryBefore($o); + + modules::load_category('multimedia/sound'); + enable_service('sound'); + + detect_devices::isLaptop() or enable_service('numlock'); + +after_autoconf: + require timezone; + timezone::write($o->{timezone}); + + $o->{useSupermount} = 1; + fs::set_removable_mntpoints($o->{all_hds}); + fs::set_all_default_options($o->{all_hds}, %$o, lang::fs_options($o->{locale})); + + modules::write_conf(); + require mouse; + mouse::write_conf($o, $o->{mouse}, 1); #- write xfree mouse conf + detect_devices::install_addons(''); + + foreach my $step (@{$o->{orderedSteps_orig}}) { + next if member($step, @{$o->{orderedSteps}}); + while (my $f = shift @{$o->{steps}{$step}{toBeDone} || []}) { + log::l("doing remaining toBeDone for undone step $step"); + eval { &$f() }; + $o->ask_warn(N("Error"), [ +N("An error occurred, but I don't know how to handle it nicely. +Continue at your own risk."), formatError($@) ]) if $@; + } + } + system("killall XFree86"); + output_p("$::prefix/etc/rpm/macros", "%_install_langs all\n"); + system("service dm on"); + c::_exit(0); +} + + + +sub automatic_xconf { + my ($o) = @_; + + log::l('automatic XFree configuration'); + + any::devfssymlinkf($o->{mouse}, 'mouse'); + local $o->{mouse}{device} = 'mouse'; + + require Xconfig::default; + $o->{raw_X} = Xconfig::default::configure({ KEYBOARD => 'uk' }, $o->{mouse}); #- using uk instead of us for now to have less warnings + + require Xconfig::main; + require class_discard; + Xconfig::main::configure_everything_auto_install($o->{raw_X}, class_discard->new, {}, + { allowNVIDIA_rpms => sub { [] }, allowATI_rpms => sub { [] }, allowFB => $o->{allowFB} }); + + modules::load_category('various/agpgart'); + + my $file = '/etc/X11/XF86Config'; + $file = "$file-4" if -e "$file-4"; + my ($Driver) = cat_($file) =~ /Section "Device".*Driver\s*"(.*?)"/s; + if ($Driver eq 'nvidia') { + modules::load('nvidia'); + } + my $lib = 'libGL.so.1'; + symlinkf_short(-e "/usr/lib/$lib.$Driver" ? "/usr/lib/$lib.$Driver" : "/usr/X11R6/lib/$lib", "/etc/X11/$lib"); +} + +sub handleI18NClp {} + + +1; |