home *** CD-ROM | disk | FTP | other *** search
/ Caldera Network Desktop 1.0 / caldera-network-desktop-1.0.bin / images / ramdisk2-beta.img / usr / lib / perl / series < prev    next >
Encoding:
Text File  |  1995-12-04  |  6.7 KB  |  313 lines

  1. # -*-perl-*-
  2.  
  3. $xinstalled = 0;
  4.  
  5. sub load_series {
  6.     local ( $series_version, $series_file, $series_name );
  7.  
  8.     if ($installsource eq "ftp") {
  9.     $series_file = $ftp_series_file;
  10.     } elsif ($installsource eq "floppy") {
  11.     $series_file = "/tmp/series";
  12.     } else {
  13.     $series_file = "/image/RedHat/base/series";
  14.     }
  15.  
  16.     open(S, $series_file);
  17.     $series_version = <S>;
  18.     chop($series_version);
  19.     $series_name = "";
  20.     @series_names = ();
  21.     $series_count = 0;
  22.     while (<S>) {
  23.     chop;
  24.     ( $first, $rest ) = split;
  25.     next if ($first eq "");
  26.     next if ($first =~ /^\#/);
  27.     next if ($first =~ /@/);
  28.     if ($first eq "end") {
  29.         $series_package_count{$series_name} = $count;
  30.         $series_name = "";
  31.         next;
  32.     }
  33.     if (! $series_name) {
  34.         ($default, $series_name) = $_ =~ /^([01])\s*(.*)/;
  35.         $series_names[$series_count] = $series_name;
  36.         $series_count++;
  37.         $count = 0;
  38.     } else {
  39.         $series_packages{"$series_name:$count"} = $first;
  40.         $count++;
  41.     }
  42.     }
  43.     close(S);
  44. }
  45.  
  46. sub series_select {
  47.     local (@s);
  48.  
  49.     if (! $series_loaded) {
  50.     &load_series;
  51.     $series_loaded = 1;
  52.     }
  53.  
  54.     @series_to_install = ("Base");
  55.     @s = ();
  56.     foreach (@series_names) {
  57.     if ($_ ne "Base") {
  58.         push (@s, $_);
  59.     }
  60.     }
  61.  
  62.     if (! &rhs_checklistl("Select Series",
  63. <<EOM
  64. >
  65. Select each series that you want to install. 
  66. The Base series is not shown, but is always installed.
  67. >
  68. EOM
  69.                               , 78, scalar(@s), @s)) {
  70.     return 0;
  71.     }
  72.     
  73.     foreach (@dialog_result) {
  74.     push (@series_to_install, $_);
  75.     if ($_ =~ /.*X Windows.*/) {
  76.         $xinstalled = 1;
  77.     }
  78.     }
  79.  
  80.     if ($instarch == "i386") {
  81.     if ($xinstalled) {
  82.         &select_x_server;
  83.         $xserver_rpm = "XFree86-$xserver";
  84.     }
  85.     }
  86.  
  87.     return 1;
  88. }
  89.  
  90. sub series_install {
  91.     local ( $rpms, @rpms, @avail_list, @files );
  92.     local ( $file, $count, $total, $nogauge, $failed_packages );
  93.     local ( $msg, $omsg, $res, %doshack, $filename, %already_installed );
  94.     local ( $error );
  95.  
  96.     &get_rpms_list(*rpms) || return 0;
  97.  
  98.     $total = scalar(@rpms);
  99.     $failed_packages = "";
  100.     $nogauge = 1;
  101.     foreach $rpm (@rpms) {
  102.     $count++;
  103.  
  104.     $filename = $rpm;
  105.     $filename =~ s|.*\/||;
  106.  
  107.     $already_installed{$filename} && next;
  108.     $already_installed{$filename} = 1;
  109.  
  110.     undef($removefile);
  111.     if ($installsource eq "floppy") {
  112.         $msg = ">\n" . 
  113.            "> Reading       : $filename\n" .
  114.                    "> Package Number: $count of $total\n" .
  115.            ">\n";
  116.         if ($nogauge) {
  117.         &rhs_gauge("Package Installation", $msg, 70, 0);
  118.         $nogauge = 0;
  119.         } else {
  120.         &rhs_update_gauge_and_message($msg, 0);
  121.         }
  122.  
  123.         &floppy_copy_file($filename, "/mnt/tmp", *nogauge);
  124.         $nogauge = 1;
  125.         $removefile = "/mnt/tmp/$filename";
  126.     }
  127.  
  128.     #print "getting ready to rpm -i $rpm <>\n";
  129.     #<STDIN>;
  130.     
  131.     open (INST, "rpm -i --percent --force --root /mnt $rpm 2>&1 |");
  132.  
  133.     if ($installsource eq "ftp") {
  134.         $msg = ">\n" . 
  135.            "> Downloading   : $filename\n" .
  136.                    "> Package Number: $count of $total\n" .
  137.            ">\n";
  138.     } else {
  139.         $msg = ">\n" . 
  140.            "> Installing    : $filename\n" .
  141.                    "> Package Number: $count of $total\n" .
  142.            ">\n";
  143.     }
  144.     if ($nogauge) {
  145.         &rhs_gauge("Package Installation", $msg, 70, 0);
  146.         $nogauge = 0;
  147.     } else {
  148.         &rhs_update_gauge_and_message($msg, 0);
  149.     }
  150.  
  151.     while (<INST>) {
  152.         if (/.*failed.*/) {
  153.         $failed_packages .= " " . $file;
  154.         &rhs_stop_gauge;
  155.         $nogauge = 1;
  156.         if ($installsource eq "ftp") {
  157.             $error = "FTP";
  158.         } else {
  159.             $error = "Package install";
  160.         }
  161.         &rhs_infobox("$error Failed", 
  162.                  ">\n" .
  163.                  "> $error of $filename failed.\n" .
  164.                  ">\n",
  165.                 , 60);
  166.         sleep(3);
  167.         }
  168.  
  169.         if (/^%%/) {
  170.         # Update (and create if necessary) the gauge
  171.         $omsg = $msg;
  172.         $_ =~ m|%% (.*)|;
  173.         $percent = int($1);
  174.         $percent = 0 if (! $percent);
  175.         if ($percent > 99) {
  176.             $msg = ">\n".
  177.                "> Recording     : $filename\n" .
  178.                            "> Package Number: $count of $total\n" .
  179.                ">\n";
  180.         } else {
  181.             $msg = ">\n".
  182.                "> Installing    : $filename\n" .
  183.                            "> Package Number: $count of $total\n" .
  184.                ">\n";
  185.         }
  186.         if ($nogauge) {
  187.             &rhs_gauge("Package Installation", $msg, 70, $percent);
  188.             $nogauge = 0;
  189.         } else {
  190.             if ($msg ne $omsg) {
  191.             &rhs_update_gauge_and_message($msg, $percent);
  192.             } else {
  193.             &rhs_update_gauge($percent);
  194.             }
  195.         }
  196.         }
  197.     }
  198.     close(INST);
  199.  
  200.     $removefile && unlink($removefile);
  201.     }
  202.  
  203.     if ($failed_packages) {
  204.     if ($installsource eq "ftp") {
  205.         $error = ", probably due to FTP failure.";
  206.     } else {
  207.         $error = ".";
  208.     }
  209.     &rhs_msgbox("Failed Packages",
  210. <<EOM
  211. >
  212. The following packages failed to install$error
  213. You may wish to
  214. install these packages after completing the
  215. installation.
  216. >
  217. $failed_packages
  218. >
  219. EOM
  220.             , 70);
  221.     }
  222.  
  223.     &rhs_msgbox("Package Installation",
  224. <<EOM
  225. >
  226. Package Installation is complete.
  227. >
  228. EOM
  229.         , 70);
  230.  
  231.     return 1;
  232. }
  233.  
  234. sub generate_rpms_to_install {
  235.     local ( @avail ) = @_;
  236.     local ( @series_rpms );
  237.     local ( $rpm, @rpms_to_install );
  238.  
  239.     # First generate a uniq list of package names
  240.     foreach (@series_to_install) {
  241.     foreach $x (0 .. $series_package_count{$_}) {
  242.         if (! &member($series_packages{"$_:$x"}, @series_rpms)) {
  243.         push(@series_rpms, $series_packages{"$_:$x"});
  244.         }
  245.     }
  246.     }
  247.     if ($xinstalled) {
  248.     push(@series_rpms, $xserver_rpm);
  249.     }
  250.  
  251.     foreach $rpm (@avail) {
  252.     $rpm =~ /(.*)-.*-.*\..*\.rpm/;
  253.     $name = $1;
  254.     if (&member($name, @series_rpms)) {
  255.         push(@rpms_to_install, $rpm);
  256.     }
  257.     }
  258.  
  259.     return @rpms_to_install;
  260. }
  261.  
  262. sub get_rpms_list {
  263.     local (*rpms) = @_;
  264.     local (@files, @avail_list, %doshack, @rpms_to_install, @tmprpms);
  265.  
  266.     ($installsource eq "nfs" || $installsource eq "cdrom") && do {
  267.     opendir(D, "/image/RedHat/RPMS");
  268.     @files = readdir(D);
  269.     closedir(D);
  270.     @avail_list = grep(m|.*\.rpm|, @files);
  271.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  272.     @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @rpms_to_install));
  273.     } ;
  274.  
  275.     ($installsource eq "hard drive")  && do {
  276.     require "rpmhead";
  277.  
  278.     &get_name_file_dict(*doshack) || return 0;
  279.  
  280.     @avail_list = keys(%doshack);
  281.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  282.  
  283.     foreach (@rpms_to_install) {
  284.         push(@tmprpms, $doshack{$_});
  285.     }
  286.  
  287.     @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @tmprpms));
  288.     };
  289.  
  290.     ($installsource eq "ftp")  && do {
  291.     &ftp_get_file_list(*files) || return 0;
  292.  
  293.     # Generate the list of rpms
  294.     @avail_list = grep(m|.*\.rpm|, @files);
  295.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  296.     @rpms = sort(grep(s|^|ftp://$ftp_site$ftp_dir/RedHat/RPMS/|, 
  297.                        @rpms_to_install));
  298.     } ;
  299.  
  300.     ($installsource eq "floppy") && do {
  301.     @avail_list = &floppy_get_rpm_list();
  302.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  303.     @rpms = &floppy_sort_rpms(@rpms);
  304.     @rpms = grep(s|^|/mnt/tmp/|, @rpms_to_install);
  305.     };
  306.  
  307.  
  308.     return 1;
  309. }
  310.  
  311. #########
  312. 1;
  313.