summaryrefslogtreecommitdiffstats
path: root/perl-install/install_steps.pm
diff options
context:
space:
mode:
authorMystery Man <unknown@mandriva.org>2000-11-08 00:01:16 +0000
committerMystery Man <unknown@mandriva.org>2000-11-08 00:01:16 +0000
commitd5c526273db473a7d87a26000585900fc10dda7d (patch)
tree0fdaabe7a00921b6cc556601b103d344fc7ac781 /perl-install/install_steps.pm
parent9c164312d4bfff6d93e1c4529de6b992f2bebc44 (diff)
downloaddrakx-d5c526273db473a7d87a26000585900fc10dda7d.tar
drakx-d5c526273db473a7d87a26000585900fc10dda7d.tar.gz
drakx-d5c526273db473a7d87a26000585900fc10dda7d.tar.bz2
drakx-d5c526273db473a7d87a26000585900fc10dda7d.tar.xz
drakx-d5c526273db473a7d87a26000585900fc10dda7d.zip
This commit was manufactured by cvs2svn to create branch
'unlabeled-1.1.1'.
Diffstat (limited to 'perl-install/install_steps.pm')
-rw-r--r--perl-install/install_steps.pm1101
1 files changed, 159 insertions, 942 deletions
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm
index 709764a1e..123507929 100644
--- a/perl-install/install_steps.pm
+++ b/perl-install/install_steps.pm
@@ -2,1002 +2,219 @@ package install_steps;
use diagnostics;
use strict;
-use vars qw(@filesToSaveForUpgrade);
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use common qw(:file :system :common :functional);
-use install_any qw(:all);
-use install_interactive;
-use partition_table qw(:types);
-use detect_devices;
-use modules;
-use run_program;
+
use lang;
-use raid;
use keyboard;
+use pkgs;
+use cpio;
use log;
use fsedit;
-use loopback;
-use commands;
-use network;
-use any;
-use fs;
-
-@filesToSaveForUpgrade = qw(
-/etc/ld.so.conf /etc/fstab /etc/hosts /etc/conf.modules /etc/modules.conf
-);
-
-
-#-######################################################################################
-#- OO Stuff
-#-######################################################################################
-sub new($$) {
- my ($type, $o) = @_;
-
- bless $o, ref $type || $type;
- return $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") {
- eval { commands::cp('-f', "/tmp/ddebug.log", "$o->{prefix}/root") };
- install_any::g_auto_install();
- }
-
- for (my $s = $o->{steps}{first}; $s; $s = $o->{steps}{$s}{next}) {
- #- 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(_("Error"), [
-_("An error occurred, but I don't know how to handle it nicely.
-Continue at your own risk."), $@ ]) if $@;
- }
-}
-
-sub errorInStep($$) { print "error :(\n"; c::_exit(1) }
-sub kill_action {}
-sub set_help { 1 }
-
-#-######################################################################################
-#- Steps Functions
-#-######################################################################################
-#------------------------------------------------------------------------------
-sub selectLanguage {
- my ($o) = @_;
- lang::set($o->{lang});
- $o->{langs} ||= [ $o->{lang} ];
-
- lang::load_console_font($o->{lang});
-
- if ($o->{keyboard_unsafe} || !$o->{keyboard}) {
- $o->{keyboard_unsafe} = 1;
- $o->{keyboard} = keyboard::lang2keyboard($o->{lang});
- selectKeyboard($o);
- }
-}
-#------------------------------------------------------------------------------
-sub selectKeyboard {
- my ($o) = @_;
- keyboard::setup($o->{keyboard});
- lang::set_langs($o->{langs});
-}
-#------------------------------------------------------------------------------
-sub selectPath {}
-#------------------------------------------------------------------------------
-sub selectInstallClass($@) {
- my ($o) = @_;
- $o->{installClass} ||= $::corporate ? "corporate" : "normal";
- $o->{security} ||= ${{
- normal => 2,
- developer => 3,
- corporate => 3,
- server => 4,
- }}{$o->{installClass}};
-}
-#------------------------------------------------------------------------------
-sub setupSCSI {
- modules::load_ide();
- modules::load_thiskind('scsi|raid');
-}
-#------------------------------------------------------------------------------
-sub doPartitionDisksBefore {
- my ($o) = @_;
-
- if (cat_("/proc/mounts") =~ m|/\w+/(\S+)\s+/tmp/hdimage\s+(\S+)|) {
- $o->{stage1_hd} = { dev => $1, fs => $2 };
- install_any::getFile("XXX"); #- close still opened filehandle
- eval { fs::umount("/tmp/hdimage") };
- }
- eval { fs::umount_all($o->{fstab}, $o->{prefix}) } if $o->{fstab} && !$::testing;
- $o->{raid} ||= {};
- install_interactive::getHds($o);
-}
-#------------------------------------------------------------------------------
-sub doPartitionDisksAfter {
- my ($o) = @_;
- unless ($::testing) {
- partition_table::write($_) foreach @{$o->{hds}};
- $_->{rebootNeeded} and $o->rebootNeeded foreach @{$o->{hds}};
- }
- if (my $s = delete $o->{stage1_hd}) {
- eval { fs::mount($s->{dev}, "/tmp/hdimage", $s->{fs}) };
- }
+1;
- $o->{fstab} = [ fsedit::get_fstab(@{$o->{hds}}, $o->{raid}) ];
- fsedit::get_root($o->{fstab}) or die "Oops, no root partition";
- cat_("/proc/mounts") =~ m|(\S+)\s+/tmp/rhimage nfs| &&
- !grep { $_->{mntpoint} eq "/mnt/nfs" } @{$o->{manualFstab} || []} and
- push @{$o->{manualFstab}}, { type => "nfs", mntpoint => "/mnt/nfs", device => $1, options => "noauto,ro,nosuid,rsize=8192,wsize=8192" };
-}
+sub new($) {
+ my ($type, $I) = @_;
-#------------------------------------------------------------------------------
-sub doPartitionDisks {
- my ($o, $hds) = @_;
+ bless $I, ref $type || $type;
}
-#------------------------------------------------------------------------------
-
-sub ask_mntpoint_s {
- my ($o, $fstab) = @_;
-
- #- TODO: set the mntpoints
-
- #- assure type is at least ext2
- (fsedit::get_root($fstab) || {})->{type} = 0x83;
-
- my %m; foreach (@$fstab) {
- my $m = $_->{mntpoint};
-
- next unless $m && $m ne 'swap'; #- there may be a lot of swap.
- $m{$m} and die _("Duplicate mount point %s", $m);
- $m{$m} = 1;
-
- #- in case the type does not correspond, force it to ext2
- $_->{type} = 0x83 if $m =~ m|^/| && !isFat($_);
- }
- 1;
+sub doPartitionDisks($$$) {
+ my ($I, $hds) = @_;
+ fsedit::auto_allocate($hds, $I->{partitions});
}
+sub choosePackages($$$$) {
+ my ($I, $packages, $comps, $isUpgrade) = @_;
-sub rebootNeeded($) {
- my ($o) = @_;
- log::l("Rebooting...");
- c::_exit(0);
-}
-
-sub choosePartitionsToFormat($$) {
- my ($o, $fstab) = @_;
-
- foreach (@$fstab) {
- $_->{mntpoint} = "swap" if isSwap($_);
- $_->{mntpoint} or next;
-
- add2hash_($_, { toFormat => $_->{notFormatted} });
- if (!$_->{toFormat}) {
- my $t = isLoopback($_) ?
- eval { fsedit::typeOfPart($o->{prefix} . loopback::file($_)) } :
- fsedit::typeOfPart($_->{device});
- $_->{toFormatUnsure} = $_->{mntpoint} eq "/" ||
- #- if detected dos/win, it's not precise enough to just compare the types (too many of them)
- (!$t || isOtherAvailableFS({ type => $t }) ? !isOtherAvailableFS($_) : $t != $_->{type});
- }
+ foreach ('base', @{$I->{comps}}) {
+ $comps->{$_}->{selected} = 1;
+ foreach (@{$_->{packages}}) { $_->{selected} = 1; }
}
-}
+ foreach (@{$I->{packages}}) { $_->{selected} = 1; }
-sub formatMountPartitions {
- my ($o) = @_;
- fs::formatMount_all($o->{raid}, $o->{fstab}, $o->{prefix});
+ smp::detect() and $packages->{"kernel-smp"}->{selected} = 1;
}
-#------------------------------------------------------------------------------
-sub setPackages {
- my ($o) = @_;
- install_any::setPackages($o);
-}
-sub selectPackagesToUpgrade {
- my ($o) = @_;
- pkgs::selectPackagesToUpgrade($o->{packages}, $o->{prefix}, $o->{base}, $o->{toRemove}, $o->{toSave});
-}
-
-sub choosePackages {
- my ($o, $packages, $compss, $compssUsers, $compssUsersSorted, $first_time) = @_;
+sub beforeInstallPackages($$$) {
+ my ($I, $method, $fstab, $isUpgrade) = @_;
- #- now for upgrade, package that must be upgraded are
- #- selected first, after is used the same scheme as install.
+ $method->prepareMedia($fstab);
- #- 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("available size $available (corrected $availableCorrected)");
-
- foreach (values %{$packages->[0]}) {
- pkgs::packageSetFlagSkip($_, 0);
- pkgs::packageSetFlagUnskip($_, 0);
+ foreach (qw(dev etc home mnt tmp var var/tmp var/lib var/lib/rpm)) {
+ mkdir "$prefix/$_", 0755;
}
- #- avoid destroying user selection of packages. TOCHECK
- if ($first_time) {
- pkgs::unselectAllPackages($packages);
- pkgs::selectPackage($o->{packages}, pkgs::packageByName($o->{packages}, $_) || next) foreach @{$o->{default_packages}};
-
- add2hash_($o, { compssListLevel => $::expert ? 90 : 80 }) unless $::auto_install;
- pkgs::setSelectedFromCompssList($o->{compssListLevels}, $packages, $o->{compssListLevel}, $availableCorrected, $o->{installClass}) if exists $o->{compssListLevel};
+ unless ($isUpgrade) {
+ local *F;
+ open F, "> $prefix/etc/hosts" or die "Failed to create etc/hosts: $!";
+ print F "127.0.0.1 localhost localhost.localdomain\n";
}
-
- $availableCorrected;
-}
-
-sub beforeInstallPackages {
- my ($o) = @_;
-
- #- save these files in case of upgrade failure.
- if ($o->{isUpgrade}) {
- foreach (@filesToSaveForUpgrade) {
- unlink "$o->{prefix}/$_.mdkgisave";
- if (-e "$o->{prefix}/$_") {
- eval { commands::cp("$o->{prefix}/$_", "$o->{prefix}/$_.mdkgisave") };
- }
- }
- }
-
- #- some packages need such files for proper installation.
- any::writeandclean_ldsoconf($o->{prefix});
- fs::write($o->{prefix}, $o->{fstab}, $o->{manualFstab}, $o->{useSupermount});
-
- network::add2hosts("$o->{prefix}/etc/hosts", "localhost.localdomain", "127.0.0.1");
-
- require pkgs;
- pkgs::init_db($o->{prefix}, $o->{isUpgrade});
-}
-
-sub pkg_install {
- my ($o, @l) = @_;
- require pkgs;
- pkgs::selectPackage($o->{packages}, pkgs::packageByName($o->{packages}, $_) || die "$_ rpm not found") foreach @l;
- $o->installPackages;
}
-sub installPackages($$) { #- complete REWORK, TODO and TOCHECK!
- my ($o) = @_;
- my $packages = $o->{packages};
-
- if (@{$o->{toRemove} || []}) {
- #- hack to ensure proper upgrade of packages from other distribution,
- #- as release number are not mandrake based. this causes save of
- #- important files and restore them after.
- foreach (@{$o->{toSave} || []}) {
- if (-e "$o->{prefix}/$_") {
- unlink "$o->{prefix}/$_.mdkgisave"; eval { commands::cp("$o->{prefix}/$_", "$o->{prefix}/$_.mdkgisave") };
- }
- }
- pkgs::remove($o->{prefix}, $o->{toRemove});
- foreach (@{$o->{toSave} || []}) {
- if (-e "$o->{prefix}/$_.mdkgisave") {
- unlink "$o->{prefix}/$_"; rename "$o->{prefix}/$_.mdkgisave", "$o->{prefix}/$_";
- }
- }
- $o->{toSave} = [];
-
- #- hack for compat-glibc to upgrade properly :-(
- if (pkgs::packageFlagSelected(pkgs::packageByName($packages, 'compat-glibc')) &&
- !pkgs::packageFlagInstalled(pkgs::packageByName($packages, 'compat-glibc'))) {
- rename "$o->{prefix}/usr/i386-glibc20-linux", "$o->{prefix}/usr/i386-glibc20-linux.mdkgisave";
- }
- }
-
- #- small transaction will be built based on this selection and depslist.
- my @toInstall = pkgs::packagesToInstall($packages);
+sub installPackages($$$$$) {
+ my ($I, $prefix, $method, $packages, $isUpgrade) = @_;
- my $time = time;
- $ENV{DURING_INSTALL} = 1;
- pkgs::install($o->{prefix}, $o->{isUpgrade}, \@toInstall, $packages->[1], $packages->[2]);
- delete $ENV{DURING_INSTALL};
- run_program::rooted($o->{prefix}, 'ldconfig') or die "ldconfig failed!";
- log::l("Install took: ", formatTime(time - $time));
+ pkgs::install($prefix, $method, $packages, $isUpgrade, 0);
}
-sub afterInstallPackages($) {
- my ($o) = @_;
+sub afterInstallPackages($$$$) {
+ my ($prefix, $keymap, $isUpgrade) = @_;
- return if $::g_auto_install;
-
- die _("Some important packages didn't get installed properly.
-Either your cdrom drive or your cdrom is defective.
-Check the cdrom on an installed computer using \"rpm -qpl Mandrake/RPMS/*.rpm\"
-") if grep { m|read failed: Input/output error| } cat_("$o->{prefix}/root/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 didn't 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";
+ unless ($isUpgrade) {
+ keyboard::write($prefix, $keymap);
+ lang::write($prefix);
}
-
- pkgs::done_db();
-
- #- why not? cuz weather is nice today :-) [pixel]
+ # why not?
sync(); sync();
- #- configure PCMCIA services if needed.
- $o->pcmciaConfig();
-
- #- for mandrake_firstime
- touch "$o->{prefix}/var/lock/TMP_1ST";
-
- #- remove the nasty acon...
- run_program::rooted($o->{prefix}, "chkconfig", "--del", "acon") unless $ENV{LANGUAGE} =~ /ar/;
-
- #- make the mdk fonts last in available fonts for buggy kde
- run_program::rooted($o->{prefix}, "chkfontpath", "--remove", "/usr/X11R6/lib/X11/fonts/mdk");
- run_program::rooted($o->{prefix}, "chkfontpath", "--add", "/usr/X11R6/lib/X11/fonts/mdk");
-
- #- call update-menus at the end of package installation
- run_program::rooted($o->{prefix}, "update-menus");
-
- #- create /etc/sysconfig/desktop file according to user choice and presence of /usr/bin/kdm or /usr/bin/gdm.
- my $f = "$o->{prefix}/etc/sysconfig/desktop";
- if ($o->{compssUsersChoice}{KDE} && -x "$o->{prefix}/usr/bin/kdm") {
- output($f, "KDE\n");
- } elsif ($o->{compssUsersChoice}{Gnome} && -x "$o->{prefix}/usr/bin/gdm") {
- output($f, "GNOME\n");
- }
-
- if ($o->{pcmcia}) {
- substInFile { s/.*(TaskBarShowAPMStatus).*/$1=1/ } "$o->{prefix}/usr/lib/X11/icewm/preferences";
- eval { commands::cp("$o->{prefix}/usr/share/applnk/System/kapm.kdelnk",
- "$o->{prefix}/etc/skel/Desktop/Autostart/kapm.kdelnk") };
- }
-
- my $msec = "$o->{prefix}/etc/security/msec";
- substInFile { s/^audio\n//; $_ .= "audio\n" if eof } "$msec/group.conf" if -d $msec;
- substInFile { s/^cdrom\n//; $_ .= "cdrom\n" if eof } "$msec/group.conf" if -d $msec;
- substInFile { s/^xgrp\n//; $_ .= "xgrp\n" if eof } "$msec/group.conf" if -d $msec;
-
- my $pkg = pkgs::packageByName($o->{packages}, 'urpmi');
- if ($pkg && pkgs::packageFlagSelected($pkg)) {
- install_any::install_urpmi($o->{prefix}, $o->{method}, $o->{packages}[2]);
- substInFile { s/^urpmi\n//; $_ .= "urpmi\n" if eof } "$msec/group.conf" if -d $msec;
- }
-
- #- update language and icons for KDE.
- update_userkderc($o->{prefix}, 'Locale', Language => "");
- log::l("updating kde icons according to available devices");
- install_any::kdeicons_postinstall($o->{prefix});
-
- my $welcome = _("Welcome to %s", "[HOSTNAME]");
- substInFile { s/^(GreetString)=.*/$1=$welcome/ } "$o->{prefix}/usr/share/config/kdmrc";
- substInFile { s/^(UserView)=false/$1=true/ } "$o->{prefix}/usr/share/config/kdmrc" if $o->{security} < 3;
- run_program::rooted($o->{prefix}, "kdeDesktopCleanup");
-
- #- konsole and gnome-terminal are lamers in exotic languages, link them to something better
- if ($o->{lang} =~ /ja|ko|zh/) {
- foreach ("konsole", "gnome-terminal") {
- my $f = "$o->{prefix}/usr/bin/$_";
- symlinkf("X11/rxvt.sh", $f) if -e $f;
- }
- }
-
-#- my $hasttf;
-#- my $dest = "/usr/X11R6/lib/X11/fonts/drakfont";
-#- foreach my $d (map { $_->{mntpoint} } grep { isFat($_) } @{$o->{fstab}}) {
-#- foreach my $D (map { "$d/$_" } grep { m|^win|i } all("$o->{prefix}$d")) {
-#- $D .= "/fonts";
-#- -d "$o->{prefix}$D" or next;
-#- log::l("found win font dir $D");
-#- if (!$hasttf) {
-#- $hasttf = $o->ask_okcancel('',
-#-_("Some true type fonts from windows have been found on your computer.
-#-Do you want to use them? Be sure you have the right to use them under Linux."), 1) or goto nottf;
-#- mkdir "$o->{prefix}$dest", 0755;
-#- }
-#- /(.*)\.ttf/i and symlink "$D/$_", "$o->{prefix}$dest/$1.ttf" foreach grep { /\.ttf/i } all("$o->{prefix}$D");
-#- }
-#- }
-#- nottf:
-#- if ($hasttf) {
-#- run_program::rooted($o->{prefix}, "ttmkfdir", "-d", $dest, "-o", "$dest/fonts.dir");
-#- run_program::rooted($o->{prefix}, "chkfontpath", "--add", $dest);
-#- }
-
- foreach (list_skels($o->{prefix}, '.kde/share/config/kfmrc')) {
- my $found;
- substInFile {
- $found ||= /KFM Misc Defaults/;
- $_ .=
-"[KFM Misc Defaults]
-GridWidth=85
-GridHeight=70
-" if eof && !$found;
- } $_
- }
-
- #- move some file after an upgrade that may be seriously annoying.
- #- and rename saved files to .mdkgiorig.
- if ($o->{isUpgrade}) {
- log::l("moving previous desktop files that have been updated to Trash of each user");
- install_any::kdemove_desktop_file($o->{prefix});
-
- foreach (@filesToSaveForUpgrade) {
- if (-e "$o->{prefix}$_.mdkgisave") {
- unlink "$o->{prefix}$_.mdkgiorig"; rename "$o->{prefix}/$_.mdkgisave", "$o->{prefix}/$_.mdkgiorig";
- }
- }
- }
+# configPCMCIA($o->{rootPath}, $o->{pcmcia});
}
-#------------------------------------------------------------------------------
-sub selectMouse($) {
- my ($o) = @_;
-}
+sub addUser($$) {
+ my ($I, $prefix) = @_;
-#------------------------------------------------------------------------------
-sub configureNetwork($) {
- my ($o) = @_;
- my $etc = "$o->{prefix}/etc";
+ my $new_uid;
+ #my @uids = map { (split)[2] } cat__("$prefix/etc/passwd");
+ #for ($new_uid = 500; member($new_uid, @uids); $new_uid++) {}
+ for ($new_uid = 500; getpwuid($new_uid); $new_uid++) {}
- network::write_conf("$etc/sysconfig/network", $o->{netc});
- network::write_resolv_conf("$etc/resolv.conf", $o->{netc});
- network::write_interface_conf("$etc/sysconfig/network-scripts/ifcfg-$_->{DEVICE}", $_) foreach @{$o->{intf}};
- network::add2hosts("$etc/hosts", $o->{netc}{HOSTNAME}, map { $_->{IPADDR} } @{$o->{intf}});
- network::sethostname($o->{netc}) unless $::testing;
- network::addDefaultRoute($o->{netc}) unless $::testing;
+ my $new_gid;
+ #my @gids = map { (split)[2] } cat__("$prefix/etc/group");
+ #for ($new_gid = 500; member($new_gid, @gids); $new_gid++) {}
+ for ($new_gid = 500; getgrgid($new_gid); $new_gid++) {}
- $o->pkg_install("dhcpcd") if grep { $_->{BOOTPROTO} =~ /^(dhcp)$/ } @{$o->{intf}};
- # Handle also pump (this is still in initscripts no?)
- $o->pkg_install("pump") if grep { $_->{BOOTPROTO} =~ /^(pump|bootp)$/ } @{$o->{intf}};
- #-res_init(); #- reinit the resolver so DNS changes take affect
+ my $homedir = "$prefix/home/$default->{user}->{name}";
- miscellaneousNetwork($o);
-}
+ my $pw = crypt_($default->{user}->{password});
-#------------------------------------------------------------------------------
-sub pppConfig {
- my ($o) = @_;
- $o->{modem} or return;
-
- symlinkf($o->{modem}{device}, "$o->{prefix}/dev/modem") or log::l("creation of $o->{prefix}/dev/modem failed");
- $o->pkg_install("ppp") unless $::testing;
-
- my %toreplace;
- $toreplace{$_} = $o->{modem}{$_} foreach qw(connection phone login passwd auth domain dns1 dns2);
- $toreplace{kpppauth} = ${{ 'Script-based' => 0, 'PAP' => 1, 'Terminal-based' => 2, 'CHAP' => 3, }}{$o->{modem}{auth}};
- $toreplace{phone} =~ s/\D//g;
- $toreplace{dnsserver} = join ',', map { $o->{modem}{$_} } "dns1", "dns2";
- $toreplace{dnsserver} .= $toreplace{dnsserver} && ',';
-
- #- using peerdns or dns1,dns2 avoid writing a /etc/resolv.conf file.
- $toreplace{peerdns} = "yes";
-
- $toreplace{connection} ||= 'DialupConnection';
- $toreplace{domain} ||= 'localdomain';
- $toreplace{intf} ||= 'ppp0';
- $toreplace{papname} = $o->{modem}{auth} eq 'PAP' && $toreplace{login};
-
- #- build ifcfg-ppp0.
- my $ifcfg = "$o->{prefix}/etc/sysconfig/network-scripts/ifcfg-ppp0";
- local *IFCFG; open IFCFG, ">$ifcfg" or die "Can't open $ifcfg";
- print IFCFG <<END;
-DEVICE="$toreplace{intf}"
-ONBOOT="no"
-USERCTL="no"
-MODEMPORT="/dev/modem"
-LINESPEED="115200"
-PERSIST="yes"
-DEFABORT="yes"
-DEBUG="yes"
-INITSTRING="ATZ"
-DEFROUTE="yes"
-HARDFLOWCTL="yes"
-ESCAPECHARS="no"
-PPPOPTIONS=""
-PAPNAME="$toreplace{papname}"
-REMIP=""
-NETMASK=""
-IPADDR=""
-MRU=""
-MTU=""
-DISCONNECTTIMEOUT="5"
-RETRYTIMEOUT="60"
-BOOTPROTO="none"
-PEERDNS="$toreplace{peerdns}"
-END
- foreach (1..2) {
- if ($toreplace{"dns$_"}) {
- print IFCFG <<END;
-DNS$_=$toreplace{"dns$_"}
-END
- }
- }
- close IFCFG;
-
- #- build chat-ppp0.
- my $chat = "$o->{prefix}/etc/sysconfig/network-scripts/chat-ppp0";
- local *CHAT; open CHAT, ">$chat" or die "Can't open $chat";
- print CHAT <<END;
-'ABORT' 'BUSY'
-'ABORT' 'ERROR'
-'ABORT' 'NO CARRIER'
-'ABORT' 'NO DIALTONE'
-'ABORT' 'Invalid Login'
-'ABORT' 'Login incorrect'
-'' 'ATZ'
-'OK' 'ATDT$toreplace{phone}'
-'CONNECT' ''
-END
- if ($o->{modem}{auth} eq 'Terminal-based' || $o->{modem}{auth} eq 'Script-based') {
- print CHAT <<END;
-'ogin:' '$toreplace{login}'
-'ord:' '$toreplace{passwd}'
-END
- }
- print CHAT <<END;
-'TIMEOUT' '5'
-'~--' ''
-END
- close CHAT;
-
- if ($o->{modem}{auth} eq 'PAP') {
- #- need to create a secrets file for the connection.
- my $secrets = "$o->{prefix}/etc/ppp/" . lc($o->{modem}{auth}) . "-secrets";
- my @l = cat_($secrets);
- my $replaced = 0;
- do { $replaced ||= 1
- if s/^\s*"?$toreplace{login}"?\s+ppp0\s+(\S+)/"$toreplace{login}" ppp0 "$toreplace{passwd}"/; } foreach @l;
- if ($replaced) {
- local *F;
- open F, ">$secrets" or die "Can't open $secrets: $!";
- print F @l;
- } else {
+ unless ($testing) {
+ {
local *F;
- open F, ">>$secrets" or die "Can't open $secrets: $!";
- print F "$toreplace{login} ppp0 \"$toreplace{passwd}\"\n";
- }
- #- restore access right to secrets file, just in case.
- chmod 0600, $secrets;
- } #- CHAP is not supported by initscripts, need patching before doing more on that here!
-
- #-install_any::template2userfile($o->{prefix}, "$ENV{SHARE_PATH}/kppprc.in", ".kde/share/config/kppprc", 1, %toreplace);
- commands::mkdir_("-p", "$o->{prefix}/usr/share/config");
- template2file("$ENV{SHARE_PATH}/kppprc.in", "$o->{prefix}/usr/share/config/kppprc", %toreplace);
-
- miscellaneousNetwork($o);
-}
-
-#------------------------------------------------------------------------------
-sub installCrypto {
- my ($o) = @_;
- my $u = $o->{crypto} or return; $u->{mirror} && $u->{packages} or return;
-
- $o->upNetwork;
- require crypto;
- my @crypto_packages = crypto::getPackages($o->{prefix}, $o->{packages}, $u->{mirror});
-
- my $oldGetFile = \&install_any::getFile;
- local *install_any::getFile = sub {
- my ($rpmfile) = @_;
- if ($rpmfile =~ /^(.*)-[^-]*-[^-]*$/ && member($1, @crypto_packages)) {
- log::l("crypto::getFile $rpmfile");
- crypto::getFile($rpmfile, $u->{mirror});
- } else {
- #- use previous getFile typically if non cryptographic packages
- #- have been selected by dependancies.
- log::l("normal getFile $rpmfile");
- &$oldGetFile($rpmfile);
- }
- };
- $o->pkg_install(@{$u->{packages}});
-}
-
-#------------------------------------------------------------------------------
-sub pcmciaConfig($) {
- my ($o) = @_;
- my $t = $o->{pcmcia};
-
- #- should be set after installing the package above else the file will be renamed.
- setVarsInSh("$o->{prefix}/etc/sysconfig/pcmcia", {
- PCMCIA => $t ? "yes" : "no",
- PCIC => $t,
- PCIC_OPTS => "",
- CORE_OPTS => "",
- });
-}
-
-#------------------------------------------------------------------------------
-sub configureTimezone {
- my ($o, $f) = @_;
- require timezone;
- timezone::write($o->{prefix}, $o->{timezone}, $f);
-}
-
-#------------------------------------------------------------------------------
-sub configureServices {
- my ($o) = @_;
- require services;
- services::doit($o, $o->{services}, $o->{prefix}) if $o->{services};
-}
-#------------------------------------------------------------------------------
-sub configurePrinter {
- my($o) = @_;
- if ($o->{printer}{configured}) {
- require pkgs;
- pkgs::selectPackage($o->{packages}, pkgs::packageByName($o->{packages}, 'rhs-printfilters'));
- $o->installPackages($o->{packages});
-
- require printer;
- eval { add2hash($o->{printer}, printer::getinfo($o->{prefix})) }; #- get existing configuration.
- printer::read_printer_db(); #- load printer db, else configuration will fails.
- foreach (keys %{$o->{printer}{configured} || {}}) {
- log::l("configuring printer queue $_->{queue}");
- printer::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::configure_queue($o->{printer});
+ open F, ">> $prefix/etc/passwd" or die "can't append to passwd file: $!";
+ print F "$default->{user}->{name}:$pw:$new_uid:$new_gid:$default->{user}->{realname}:/home/$default->{user}->{name}:$default->{user}->{shell}\n";
+
+ open F, ">> $prefix/etc/group" or die "can't append to group file: $!";
+ print F "$default->{user}->{name}::$new_gid:\n";
}
+ eval { commands::cp("-f", "$prefix/etc/skel", $homedir) }; $@ and log::l("copying of skel failed: $@"), mkdir($homedir, 0750);
+ commands::chown_("-r", "$new_uid.$new_gid", $homedir);
}
}
-#------------------------------------------------------------------------------
-my @etc_pass_fields = qw(name pw uid gid realname home shell);
-sub setRootPassword($) {
- my ($o) = @_;
- my $p = $o->{prefix};
- my $u = $o->{superuser} ||= {};
-
- $u->{pw} ||= $u->{password} && any::crypt($u->{password}, $o->{authentication}{md5});
+sub setRootPassword($$) {
+ my ($I, $prefix) = @_;
- my @lines = cat_(my $f = "$p/etc/passwd") or log::l("missing passwd file"), return;
+ my $pw = $default->{rootPassword};
+ $pw = crypt_($pw);
+ my @lines = cat_("$prefix/etc/passwd", 'die');
local *F;
- open F, "> $f" or die "failed to write file $f: $!\n";
+ open F, "> $prefix/etc/passwd" or die "can't write in passwd: $!\n";
foreach (@lines) {
- if (/^root:/) {
- chomp;
- my %l; @l{@etc_pass_fields} = split ':';
- add2hash($u, \%l);
- $_ = join(':', @$u{@etc_pass_fields}) . "\n";
- }
+ s/^root:.*?:/root:$pw:/;
print F $_;
}
}
-#------------------------------------------------------------------------------
-
-sub addUser($) {
- my ($o) = @_;
- my $p = $o->{prefix};
-
- my (%uids, %gids);
- foreach (glob_("$p/home")) { my ($u, $g) = (stat($_))[4,5]; $uids{$u} = 1; $gids{$g} = 1; }
-
- my %done;
- my @l = grep {
- if (!$_->{name} || getpwnam($_->{name}) || $done{$_->{name}}) {
- 0;
- } else {
- $_->{home} ||= "/home/$_->{name}";
-
- my $u = $_->{uid} || ($_->{oldu} = (stat("$p$_->{home}"))[4]);
- my $g = $_->{gid} || ($_->{oldg} = (stat("$p$_->{home}"))[5]);
- #- search for available uid above 501 else initscripts may fail to change language for KDE.
- if (!$u || getpwuid($u)) { for ($u = 501; getpwuid($u) || $uids{$u}; $u++) {} }
- if (!$g || getgrgid($g)) { for ($g = 501; getgrgid($g) || $gids{$g}; $g++) {} }
-
- $_->{uid} = $u; $uids{$u} = 1;
- $_->{gid} = $g; $gids{$g} = 1;
- $_->{pw} ||= $_->{password} && any::crypt($_->{password}, $o->{authentication}{md5});
- $_->{shell} ||= "/bin/bash";
- $done{$_->{name}} = 1;
- }
- } @{$o->{users} || []};
- my @passwd = cat_("$p/etc/passwd");;
-
- local *F;
- open F, ">> $p/etc/passwd" or die "can't append to passwd file: $!";
- print F join(':', @$_{@etc_pass_fields}), "\n" foreach @l;
-
- open F, ">> $p/etc/group" or die "can't append to group file: $!";
- print F "$_->{name}:x:$_->{gid}:\n" foreach @l;
-
- foreach my $u (@l) {
- if (! -d "$p$u->{home}") {
- my $mode = $o->{security} < 2 ? 0755 : 0750;
- eval { commands::cp("-f", "$p/etc/skel", "$p$u->{home}") };
- if ($@) {
- log::l("copying of skel failed: $@"); mkdir("$p$u->{home}", $mode);
- } else {
- chmod $mode, "$p$u->{home}";
- }
- }
- eval { commands::chown_("-r", "$u->{uid}.$u->{gid}", "$p$u->{home}") }
- if $u->{uid} != $u->{oldu} || $u->{gid} != $u->{oldg};
- }
- require any;
- any::addUsers($o->{prefix}, @l);
-}
-
-#------------------------------------------------------------------------------
-sub createBootdisk($) {
- my ($o) = @_;
- my $dev = $o->{mkbootdisk} or return;
-
- my @l = detect_devices::floppies();
-
- $dev = shift @l || die _("No floppy drive available")
- if $dev eq "1"; #- special case meaning autochoose
-
- return if $::testing;
-
- require bootloader;
- bootloader::mkbootdisk($o->{prefix}, install_any::kernelVersion($o), $dev, $o->{bootloader}{perImageAppend});
- $o->{mkbootdisk} = $dev;
-}
-
-#------------------------------------------------------------------------------
-sub readBootloaderConfigBeforeInstall {
- my ($o) = @_;
- my ($image, $v);
-
- require bootloader;
- add2hash($o->{bootloader} ||= {}, bootloader::read($o->{prefix}, arch() =~ /sparc/ ? "/etc/silo.conf" : "/etc/lilo.conf"));
-
- #- since kernel or kernel-smp may not be upgraded, it should be checked
- #- if there is a need to update existing lilo.conf entries by following
- #- symlinks before kernel or other packages get installed.
- foreach my $e (@{$o->{bootloader}{entries}}) {
- while (my $v = readlink "$o->{prefix}/$e->{kernel_or_dev}") {
- $v = "/boot/$v" if $v !~ m|^/|;
- -e "$o->{prefix}$v" or next;
- log::l("renaming /boot/$e->{kernel_or_dev} entry by $v");
- $e->{kernel_or_dev} = $v;
- }
- }
-}
-
-sub setupBootloaderBefore {
- my ($o) = @_;
- if (arch() =~ /alpha/) {
- if (my $dev = fsedit::get_root($o->{fstab})) {
- $o->{bootloader}{boot} ||= "/dev/$dev->{rootDevice}";
- $o->{bootloader}{root} ||= "/dev/$dev->{device}";
- $o->{bootloader}{part_nb} ||= first($dev->{device} =~ /(\d+)/);
- }
- } else {
- require bootloader;
- bootloader::suggest($o->{prefix}, $o->{bootloader}, $o->{hds}, $o->{fstab}, install_any::kernelVersion($o));
- if ($o->{miscellaneous}{profiles}) {
- my $e = bootloader::get_label("linux", $o->{bootloader});
- push @{$o->{bootloader}{entries}}, { %$e, label => "office", append => "$e->{append} prof=Office" };
- $e->{append} .= " prof=Home";
- }
- bootloader::suggest_floppy($o->{bootloader}) if $o->{security} <= 3;
- $o->{bootloader}{keytable} ||= keyboard::keyboard2kmap($o->{keyboard});
- }
-}
-sub setupBootloader($) {
- my ($o) = @_;
- return if $::g_auto_install;
-
- if (arch() =~ /alpha/) {
- return if $::testing;
- my $b = $o->{bootloader};
- $b->{boot} or $o->ask_warn('', "Can't install aboot, not a bsd disklabel"), return;
-
- run_program::rooted($o->{prefix}, "swriteboot", $b->{boot}, "/boot/bootlx") or do {
- cdie "swriteboot failed";
- run_program::rooted($o->{prefix}, "swriteboot", "-f1", $b->{boot}, "/boot/bootlx");
- };
- run_program::rooted($o->{prefix}, "abootconf", $b->{boot}, $b->{part_nb});
-
- modules::load('loop');
- output "$o->{prefix}/etc/aboot.conf",
- map_index { -e "$o->{prefix}/boot/initrd-$_->[1]" ?
- "$::i:$b->{part_nb}$_->[0] root=$b->{root} initrd=/boot/initrd-$_->[1] $b->{perImageAppend}\n" :
- "$::i:$b->{part_nb}$_->[0] root=$b->{root} $b->{perImageAppend}\n" }
- map { run_program::rooted($o->{prefix}, "mkinitrd", "-f", "/boot/initrd-$_->[1]", "--ifneeded", $_->[1]) ;#or
- #unlink "$o->{prefix}/boot/initrd-$_->[1]";$_ } grep { $_->[0] && $_->[1] }
- $_ } grep { $_->[0] && $_->[1] }
- map { [ m|$o->{prefix}(/boot/vmlinux-(.*))| ] } eval { glob_("$o->{prefix}/boot/vmlinux-*") };
-# output "$o->{prefix}/etc/aboot.conf",
-# map_index { "$::i:$b->{part_nb}$_ root=$b->{root} $b->{perImageAppend}\n" }
-# map { /$o->{prefix}(.*)/ } eval { glob_("$o->{prefix}/boot/vmlinux*") };
- } else {
- require bootloader;
- bootloader::install($o->{prefix}, $o->{bootloader}, $o->{fstab}, $o->{hds});
- }
+sub setupXfree {
+# my ($method, $prefix, $psp) = @_;
+# int fd, i;
+# char buf[200], * chptr;
+# char server[50];
+# int rc;
+# char * path;
+# char * procPath;
+# rpmdb db;
+# rpmTransactionSet trans;
+# struct callbackInfo cbi;
+# rpmProblemSet probs;
+#
+# if (rpmdbOpen(prefix, &db, O_RDWR | O_CREAT, 0644)) {
+# errorWindow(_("Fatal error reopening RPM database"));
+# return INST_ERROR;
+# }
+# log::l("reopened rpm database");
+#
+# path = alloca(strlen(prefix) + 200);
+# procPath = alloca(strlen(prefix) + 50);
+# sprintf(path, "%s/usr/X11R6/bin/Xconfigurator", prefix);
+#
+# # This is a cheap trick to see if our X component was installed
+# if (access(path, X_OK)) {
+# log::l("%s cannot be run", path);
+# return INST_OKAY;
+# }
+#
+# # need proc to do pci probing
+# sprintf(procPath, "%s/proc", prefix);
+# umount(procPath);
+# if ((rc = doMount("/proc", procPath, "proc", 0, 0))) {
+# return INST_ERROR;
+# }
+#
+# # this handles kickstart and normal/expert modes
+# if ((rc=xfree86Config(prefix, "--pick")))
+# return INST_ERROR;
+#
+# sprintf(path, "%s/tmp/SERVER", prefix);
+# if ((fd = open(path, O_RDONLY)) < 0) {
+# log::l("failed to open %s: %s", path, strerror(errno));
+# return INST_ERROR;
+# }
+#
+# buf[0] = '\0';
+# read(fd, buf, sizeof(buf));
+# close(fd);
+# chptr = buf;
+# while (chptr < (buf + sizeof(buf) - 1) && *chptr && *chptr != ' ')
+# chptr++;
+#
+# if (chptr >= (buf + sizeof(buf) - 1) || *chptr != ' ') {
+# log::l("couldn't find ' ' in %s", path);
+# return INST_ERROR;
+# }
+#
+# *chptr = '\0';
+# strcpy(server, "XFree86-");
+# strcat(server, buf);
+#
+# log::l("I will install the %s package", server);
+#
+# for (i = 0; i < psp->numPackages; i++) {
+# if (!strcmp(psp->packages[i]->name, server)) {
+# log::l("\tfound package: %s", psp->packages[i]->name);
+# swOpen(1, psp->packages[i]->size);
+# trans = rpmtransCreateSet(db, prefix);
+# rpmtransAddPackage(trans, psp->packages[i]->h, NULL,
+# psp->packages[i], 0, NULL);
+#
+# cbi.method = method;
+# cbi.upgrade = 0;
+#
+# rpmRunTransactions(trans, swCallback, &cbi, NULL, &probs, 0,
+# 0xffffffff);
+#
+# swClose();
+# break;
+# }
+# }
+#
+# # this handles kickstart and normal/expert modes
+# if ((rc=xfree86Config(prefix, "--continue")))
+# return INST_ERROR;
+#
+# # done with proc now
+# umount(procPath);
+#
+# rpmdbClose(db);
+#
+# log::l("rpm database closed");
+#
+# return INST_OKAY;
}
-#------------------------------------------------------------------------------
-sub configureXBefore {
- my ($o) = @_;
- my $xkb = $o->{X}{keyboard}{xkb_keymap} || keyboard::keyboard2xkb($o->{keyboard});
- if (!-e "$o->{prefix}/usr/X11R6/lib/X11/xkb/symbols/$xkb" && (my $f = keyboard::xmodmap_file($o->{keyboard}))) {
- commands::cp("-f", $f, "$o->{prefix}/etc/X11/xinit/Xmodmap");
- $xkb = '';
- }
- $o->{X}{keyboard}{xkb_keymap} = $xkb;
- $o->{X}{mouse} = $o->{mouse};
- $o->{X}{wacom} = $o->{wacom};
-
- require Xconfig;
- Xconfig::getinfoFromDDC($o->{X});
-
- #- keep this here if the package has to be updated.
- $o->pkg_install("XFree86");
-}
-sub configureX {
- my ($o) = @_;
- $o->configureXBefore;
-
- require Xconfigurator;
- require class_discard;
- { local $::testing = 0; #- unset testing
- local $::auto = 1;
- $o->{X}{skiptest} = 1;
- Xconfigurator::main($o->{prefix}, $o->{X}, class_discard->new, $o->{allowFB}, bool($o->{pcmcia}), sub {
- $o->pkg_install("XFree86-$_[0]");
- });
- }
- $o->configureXAfter;
-}
-sub configureXAfter {
- my ($o) = @_;
- if ($o->{X}{card}{server} eq 'FBDev') {
- unless (install_any::setupFB($o, Xconfigurator::getVGAMode($o->{X}))) {
- log::l("disabling automatic start-up of X11 if any as setup framebuffer failed");
- Xconfigurator::rewriteInittab(3) unless $::testing; #- disable automatic start-up of X11 on error.
- }
- }
- if ($o->{X}{default_depth} >= 16 && $o->{X}{card}{default_wres} >= 1024) {
- log::l("setting large icon style for kde");
- install_any::kderc_largedisplay($o->{prefix});
- }
-}
-
-#------------------------------------------------------------------------------
-sub miscellaneousNetwork {
- my ($o) = @_;
- setVarsInSh ("$o->{prefix}/etc/profile.d/proxy.sh", $o->{miscellaneous}, qw(http_proxy ftp_proxy));
- setVarsInCsh("$o->{prefix}/etc/profile.d/proxy.csh", $o->{miscellaneous}, qw(http_proxy ftp_proxy));
-}
-
-#------------------------------------------------------------------------------
-sub miscellaneous {
- my ($o) = @_;
-
- my %s = getVarsFromSh("$o->{prefix}/etc/sysconfig/system");
- $o->{miscellaneous}{HDPARM} ||= $s{HDPARM} if exists $s{HDPARM};
- $o->{miscellaneous}{CLEAN_TMP} ||= $s{CLEAN_TMP} if exists $s{CLEAN_TMP};
- $o->{security} ||= $s{SECURITY} if exists $s{SECURITY};
-
- $ENV{SECURE_LEVEL} = $o->{security};
- add2hash_ $o, { useSupermount => $o->{security} < 4 && arch() !~ /sparc/ && $o->{installClass} !~ /corporate|server/ };
-
- cat_("/proc/cmdline") =~ /.mem=(\S+)/; #- if /^mem/, it means that's the value grub gave
- add2hash_($o->{miscellaneous} ||= {}, { numlock => !$o->{pcmcia}, $1 ? (memsize => $1) : () });
-
- local $_ = $o->{bootloader}{perImageAppend};
- if (my $ramsize = $o->{miscellaneous}{memsize} and !/mem=/) {
- $_ .= " mem=$ramsize";
- }
- if (my @l = detect_devices::getIDEBurners() and !/ide-scsi/) {
- $_ .= " " . join(" ", (map { "$_=ide-scsi" } @l),
- map { "$_->{device}=ide-floppy" } detect_devices::ide_zips());
- }
- if (my $m = detect_devices::hasUltra66()) {
- $_ .= " $m" if !/ide.=/;
- }
-
- #- keep some given parameters
- #-TODO
-
- log::l("perImageAppend: $_");
- $o->{bootloader}{perImageAppend} = $_;
-}
-
-#------------------------------------------------------------------------------
-sub generateAutoInstFloppy($) {
- my ($o) = @_;
-}
-
-#------------------------------------------------------------------------------
-sub exitInstall { install_any::unlockCdrom }
-
-#------------------------------------------------------------------------------
-sub hasNetwork {
- my ($o) = @_;
-
- $o->{intf} && $o->{netc}{NETWORKING} ne 'false' || $o->{modem};
-}
-
-#------------------------------------------------------------------------------
-sub upNetwork {
- my ($o, $pppAvoided) = @_;
-
- foreach (qw(resolv.conf protocols services)) {
- symlinkf("$o->{prefix}/etc/$_", "/etc/$_");
- }
-
- modules::write_conf($o->{prefix});
- if ($o->{intf} && $o->{netc}{NETWORKING} ne 'false') {
- network::up_it($o->{prefix}, $o->{intf});
- } elsif (!$pppAvoided && $o->{modem} && !$o->{modem}{isUp}) {
- eval { modules::load_multi(qw(serial ppp bsd_comp ppp_deflate)) };
- run_program::rooted($o->{prefix}, "/etc/rc.d/init.d/syslog", "start");
- run_program::rooted($o->{prefix}, "ifup", "ppp0");
- $o->{modem}{isUp} = 1;
- } else {
- $::testing or return;
- }
- 1;
-}
-
-#------------------------------------------------------------------------------
-sub downNetwork {
- my ($o, $pppOnly) = @_;
-
- modules::write_conf($o->{prefix});
- if (!$pppOnly && $o->{intf} && $o->{netc}{NETWORKING} ne 'false') {
- network::down_it($o->{prefix}, $o->{intf});
- } elsif ($o->{modem} && $o->{modem}{isUp}) {
- run_program::rooted($o->{prefix}, "ifdown", "ppp0");
- run_program::rooted($o->{prefix}, "/etc/rc.d/init.d/syslog", "stop");
- eval { modules::unload($_) foreach qw(ppp_deflate bsd_comp ppp serial) };
- $o->{modem}{isUp} = 0;
- } else {
- $::testing or return;
- }
- 1;
-}
-
-#------------------------------------------------------------------------------
-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}/$_";
- }
- }
- }
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1;