home *** CD-ROM | disk | FTP | other *** search
- # -*-perl-*-
-
- $xinstalled = 0;
-
- sub load_series {
- local ( $series_version, $series_file, $series_name );
-
- if ($installsource eq "ftp") {
- $series_file = $ftp_series_file;
- } elsif ($installsource eq "floppy") {
- $series_file = "/tmp/series";
- } else {
- $series_file = "/image/RedHat/base/series";
- }
-
- open(S, $series_file);
- $series_version = <S>;
- chop($series_version);
- $series_name = "";
- @series_names = ();
- $series_count = 0;
- while (<S>) {
- chop;
- ( $first, $rest ) = split;
- next if ($first eq "");
- next if ($first =~ /^\#/);
- next if ($first =~ /@/);
- if ($first eq "end") {
- $series_package_count{$series_name} = $count;
- $series_name = "";
- next;
- }
- if (! $series_name) {
- ($default, $series_name) = $_ =~ /^([01])\s*(.*)/;
- $series_names[$series_count] = $series_name;
- $series_count++;
- $count = 0;
- } else {
- $series_packages{"$series_name:$count"} = $first;
- $count++;
- }
- }
- close(S);
- }
-
- sub series_select {
- local (@s);
-
- if (! $series_loaded) {
- &load_series;
- $series_loaded = 1;
- }
-
- @series_to_install = ("Base");
- @s = ();
- foreach (@series_names) {
- if ($_ ne "Base") {
- push (@s, $_);
- }
- }
-
- if (! &rhs_checklistl("Select Series",
- <<EOM
- >
- Select each series that you want to install.
- The Base series is not shown, but is always installed.
- >
- EOM
- , 78, scalar(@s), @s)) {
- return 0;
- }
-
- foreach (@dialog_result) {
- push (@series_to_install, $_);
- if ($_ =~ /.*X Windows.*/) {
- $xinstalled = 1;
- }
- }
-
- if ($xinstalled) {
- &select_x_server;
- $xserver_rpm = "XFree86-$xserver";
- }
-
- return 1;
- }
-
- sub series_install {
- local ( $rpms, @rpms, @avail_list, @files );
- local ( $file, $count, $total, $nogauge, $failed_packages );
- local ( $msg, $omsg, $res, %doshack, $filename, %already_installed );
- local ( $error );
-
- &get_rpms_list(*rpms) || return 0;
-
- $total = scalar(@rpms);
- $failed_packages = "";
- $nogauge = 1;
- foreach $rpm (@rpms) {
- $count++;
-
- $filename = $rpm;
- $filename =~ s|.*\/||;
-
- $already_installed{$filename} && next;
- $already_installed{$filename} = 1;
-
- undef($removefile);
- if ($installsource eq "floppy") {
- $msg = ">\n" .
- "> Reading : $filename\n" .
- "> Package Number: $count of $total\n" .
- ">\n";
- if ($nogauge) {
- &rhs_gauge("Package Installation", $msg, 70, 0);
- $nogauge = 0;
- } else {
- &rhs_update_gauge_and_message($msg, 0);
- }
-
- &floppy_copy_file($filename, "/mnt/tmp", *nogauge);
- $nogauge = 1;
- $removefile = "/mnt/tmp/$filename";
- }
-
- # print "getting ready to rpm -i $rpm <>\n";
- # <STDIN>;
-
- open (INST, "rpm -i --percent --force --root /mnt $rpm 2>&1 |");
-
- if ($installsource eq "ftp") {
- $msg = ">\n" .
- "> Downloading : $filename\n" .
- "> Package Number: $count of $total\n" .
- ">\n";
- } else {
- $msg = ">\n" .
- "> Installing : $filename\n" .
- "> Package Number: $count of $total\n" .
- ">\n";
- }
- if ($nogauge) {
- &rhs_gauge("Package Installation", $msg, 70, 0);
- $nogauge = 0;
- } else {
- &rhs_update_gauge_and_message($msg, 0);
- }
-
- while (<INST>) {
- if (/.*failed.*/) {
- $failed_packages .= " " . $file;
- &rhs_stop_gauge;
- $nogauge = 1;
- if ($installsource eq "ftp") {
- $error = "FTP";
- } else {
- $error = "Package install";
- }
- &rhs_infobox("$error Failed",
- ">\n" .
- "> $error of $filename failed.\n" .
- ">\n",
- , 60);
- sleep(3);
- }
-
- if (/^%%/) {
- # Update (and create if necessary) the gauge
- $omsg = $msg;
- $_ =~ m|%% (.*)|;
- $percent = int($1);
- $percent = 0 if (! $percent);
- if ($percent > 99) {
- $msg = ">\n".
- "> Recording : $filename\n" .
- "> Package Number: $count of $total\n" .
- ">\n";
- } else {
- $msg = ">\n".
- "> Installing : $filename\n" .
- "> Package Number: $count of $total\n" .
- ">\n";
- }
- if ($nogauge) {
- &rhs_gauge("Package Installation", $msg, 70, $percent);
- $nogauge = 0;
- } else {
- if ($msg ne $omsg) {
- &rhs_update_gauge_and_message($msg, $percent);
- } else {
- &rhs_update_gauge($percent);
- }
- }
- }
- }
- close(INST);
-
- $removefile && unlink($removefile);
- }
-
- if ($failed_packages) {
- if ($installsource eq "ftp") {
- $error = ", probably due to FTP failure.";
- } else {
- $error = ".";
- }
- &rhs_msgbox("Failed Packages",
- <<EOM
- >
- The following packages failed to install$error
- You may wish to
- install these packages after completing the
- installation.
- >
- $failed_packages
- >
- EOM
- , 70);
- }
-
- # &rhs_msgbox("Package Installation",
- #<<EOM
- #>
- #Package Installation is complete.
- #>
- #EOM
- # , 70);
-
- return 1;
- }
-
- sub generate_rpms_to_install {
- local ( @avail ) = @_;
- local ( @series_rpms );
- local ( $rpm, @rpms_to_install );
-
- # First generate a uniq list of package names
- foreach (@series_to_install) {
- foreach $x (0 .. $series_package_count{$_}) {
- if (! &member($series_packages{"$_:$x"}, @series_rpms)) {
- push(@series_rpms, $series_packages{"$_:$x"});
- }
- }
- }
- if ($xinstalled) {
- push(@series_rpms, $xserver_rpm);
- }
-
- foreach $rpm (@avail) {
- $rpm =~ /(.*)-.*-.*\..*\.rpm/;
- $name = $1;
- if (&member($name, @series_rpms)) {
- push(@rpms_to_install, $rpm);
- }
- }
-
- return @rpms_to_install;
- }
-
- sub get_rpms_list {
- local (*rpms) = @_;
- local (@files, @avail_list, %doshack, @rpms_to_install, @tmprpms);
-
- ($installsource eq "nfs" || $installsource eq "cdrom") && do {
- opendir(D, "/image/RedHat/RPMS");
- @files = readdir(D);
- closedir(D);
- @avail_list = grep(m|.*\.rpm|, @files);
- @rpms_to_install = &generate_rpms_to_install(@avail_list);
- @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @rpms_to_install));
- } ;
-
- ($installsource eq "hard drive") && do {
- require "rpmhead";
-
- &get_name_file_dict(*doshack) || return 0;
-
- @avail_list = keys(%doshack);
- @rpms_to_install = &generate_rpms_to_install(@avail_list);
-
- foreach (@rpms_to_install) {
- push(@tmprpms, $doshack{$_});
- }
-
- @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @tmprpms));
- };
-
- ($installsource eq "ftp") && do {
- &ftp_get_file_list(*files) || return 0;
-
- # Generate the list of rpms
- @avail_list = grep(m|.*\.rpm|, @files);
- @rpms_to_install = &generate_rpms_to_install(@avail_list);
- @rpms = sort(grep(s|^|ftp://$ftp_site$ftp_dir/RedHat/RPMS/|,
- @rpms_to_install));
- } ;
-
- ($installsource eq "floppy") && do {
- @avail_list = &floppy_get_rpm_list();
- @rpms_to_install = &generate_rpms_to_install(@avail_list);
- @rpms = &floppy_sort_rpms(@rpms);
- @rpms = grep(s|^|/mnt/tmp/|, @rpms_to_install);
- };
-
-
- return 1;
- }
-
- #########
- 1;
-