diff options
Diffstat (limited to 'perl-install/install_steps.pm')
-rw-r--r-- | perl-install/install_steps.pm | 263 |
1 files changed, 122 insertions, 141 deletions
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm index 123507929..9e4a3c1c0 100644 --- a/perl-install/install_steps.pm +++ b/perl-install/install_steps.pm @@ -3,70 +3,84 @@ package install_steps; use diagnostics; use strict; +use common qw(:file :system); use lang; use keyboard; use pkgs; use cpio; use log; use fsedit; - +use commands; +use smp; 1; -sub new($) { - my ($type, $I) = @_; +sub new($$) { + my ($type, $o) = @_; - bless $I, ref $type || $type; + bless $o, ref $type || $type; } +sub selectInstallOrUpgrade($) { + my ($o) = @_; + $o->{isUpgrade} || $o->{default}->{isUpgrade} || 0; +} +sub selectInstallClass($) { + my ($o) = @_; + $o->{installClass} || $o->{default}->{installClass} || 'Custom'; +} +sub setupSCSIInterfaces { + die "TODO"; +} sub doPartitionDisks($$$) { - my ($I, $hds) = @_; - fsedit::auto_allocate($hds, $I->{partitions}); + my ($o, $hds) = @_; + fsedit::auto_allocate($hds, $o->{partitions}); } -sub choosePackages($$$$) { - my ($I, $packages, $comps, $isUpgrade) = @_; +sub choosePackages($$$) { + my ($o, $packages, $comps) = @_; - foreach ('base', @{$I->{comps}}) { + foreach ('base', @{$o->{comps}}) { $comps->{$_}->{selected} = 1; foreach (@{$_->{packages}}) { $_->{selected} = 1; } } - foreach (@{$I->{packages}}) { $_->{selected} = 1; } + foreach (@{$o->{packages}}) { $_->{selected} = 1; } smp::detect() and $packages->{"kernel-smp"}->{selected} = 1; } -sub beforeInstallPackages($$$) { - my ($I, $method, $fstab, $isUpgrade) = @_; +sub beforeInstallPackages($$) { + my ($o, $fstab) = @_; - $method->prepareMedia($fstab); + $o->{method}->prepareMedia($fstab); foreach (qw(dev etc home mnt tmp var var/tmp var/lib var/lib/rpm)) { - mkdir "$prefix/$_", 0755; + mkdir "$o->{prefix}/$_", 0755; } - unless ($isUpgrade) { + unless ($o->{isUpgrade}) { local *F; - open F, "> $prefix/etc/hosts" or die "Failed to create etc/hosts: $!"; + open F, "> $o->{prefix}/etc/hosts" or die "Failed to create etc/hosts: $!"; print F "127.0.0.1 localhost localhost.localdomain\n"; } } -sub installPackages($$$$$) { - my ($I, $prefix, $method, $packages, $isUpgrade) = @_; - - pkgs::install($prefix, $method, $packages, $isUpgrade, 0); +sub installPackages($$) { + my ($o, $packages) = @_; + my $toInstall = [ $packages->{basesystem}, + grep { $_->{selected} && $_->{name} ne "basesystem" } values %$packages ]; + pkgs::install($o->{prefix}, $o->{method}, $toInstall, $o->{isUpgrade}, 0); } -sub afterInstallPackages($$$$) { - my ($prefix, $keymap, $isUpgrade) = @_; +sub afterInstallPackages($$) { + my ($o, $keymap) = @_; - unless ($isUpgrade) { - keyboard::write($prefix, $keymap); - lang::write($prefix); + unless ($o->{isUpgrade}) { + keyboard::write($o->{prefix}, $keymap); + lang::write($o->{prefix}); } # why not? sync(); sync(); @@ -74,46 +88,44 @@ sub afterInstallPackages($$$$) { # configPCMCIA($o->{rootPath}, $o->{pcmcia}); } -sub addUser($$) { - my ($I, $prefix) = @_; +sub addUser($) { + my ($o) = @_; + my $p = $o->{prefix}; my $new_uid; - #my @uids = map { (split)[2] } cat__("$prefix/etc/passwd"); + #my @uids = map { (split)[2] } cat__("$p/etc/passwd"); #for ($new_uid = 500; member($new_uid, @uids); $new_uid++) {} for ($new_uid = 500; getpwuid($new_uid); $new_uid++) {} my $new_gid; - #my @gids = map { (split)[2] } cat__("$prefix/etc/group"); + #my @gids = map { (split)[2] } cat__("$p/etc/group"); #for ($new_gid = 500; member($new_gid, @gids); $new_gid++) {} for ($new_gid = 500; getgrgid($new_gid); $new_gid++) {} - my $homedir = "$prefix/home/$default->{user}->{name}"; + my $homedir = "$p/home/$o->{user}->{name}"; - my $pw = crypt_($default->{user}->{password}); + my $pw = crypt_($o->{user}->{password}); - unless ($testing) { - { - local *F; - 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"; + local *F; + open F, ">> $p/etc/passwd" or die "can't append to passwd file: $!"; + print F "$o->{user}->{name}:$pw:$new_uid:$new_gid:$o->{user}->{realname}:/home/$o->{user}->{name}:$o->{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); - } + open F, ">> $p/etc/group" or die "can't append to group file: $!"; + print F "$o->{user}->{name}::$new_gid:\n"; + + eval { commands::cp("-f", "$p/etc/skel", $homedir) }; $@ and log::l("copying of skel failed: $@"), mkdir($homedir, 0750); + commands::chown_("-r", "$new_uid.$new_gid", $homedir); } sub setRootPassword($$) { - my ($I, $prefix) = @_; - - my $pw = $default->{rootPassword}; + my ($o) = @_; + my $p = $o->{prefix}; + my $pw = $o->{rootPassword}; $pw = crypt_($pw); - my @lines = cat_("$prefix/etc/passwd", 'die'); + my @lines = cat_("$p/etc/passwd", 'die'); local *F; - open F, "> $prefix/etc/passwd" or die "can't write in passwd: $!\n"; + open F, "> $p/etc/passwd" or die "can't write in passwd: $!\n"; foreach (@lines) { s/^root:.*?:/root:$pw:/; print F $_; @@ -122,99 +134,68 @@ sub setRootPassword($$) { 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; + + if (rpmdbOpen(prefix, &db, O_RDWR | O_CREAT, 0644)) { + errorWindow(_("Fatal error reopening RPM database")); + return INST_ERROR; + } + log::l("reopened rpm database"); + + 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 exitInstall {} |