home *** CD-ROM | disk | FTP | other *** search
/ Caldera Network Desktop 1.0 / caldera-network-desktop-1.0.bin / images / ramdisk2.img / usr / lib / perl / series < prev    next >
Text File  |  1995-11-03  |  7KB  |  311 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 ($xinstalled) {
  81.     &select_x_server;
  82.     $xserver_rpm = "XFree86-$xserver";
  83.     }
  84.  
  85.     return 1;
  86. }
  87.  
  88. sub series_install {
  89.     local ( $rpms, @rpms, @avail_list, @files );
  90.     local ( $file, $count, $total, $nogauge, $failed_packages );
  91.     local ( $msg, $omsg, $res, %doshack, $filename, %already_installed );
  92.     local ( $error );
  93.  
  94.     &get_rpms_list(*rpms) || return 0;
  95.  
  96.     $total = scalar(@rpms);
  97.     $failed_packages = "";
  98.     $nogauge = 1;
  99.     foreach $rpm (@rpms) {
  100.     $count++;
  101.  
  102.     $filename = $rpm;
  103.     $filename =~ s|.*\/||;
  104.  
  105.     $already_installed{$filename} && next;
  106.     $already_installed{$filename} = 1;
  107.  
  108.     undef($removefile);
  109.     if ($installsource eq "floppy") {
  110.         $msg = ">\n" . 
  111.            "> Reading       : $filename\n" .
  112.                    "> Package Number: $count of $total\n" .
  113.            ">\n";
  114.         if ($nogauge) {
  115.         &rhs_gauge("Package Installation", $msg, 70, 0);
  116.         $nogauge = 0;
  117.         } else {
  118.         &rhs_update_gauge_and_message($msg, 0);
  119.         }
  120.  
  121.         &floppy_copy_file($filename, "/mnt/tmp", *nogauge);
  122.         $nogauge = 1;
  123.         $removefile = "/mnt/tmp/$filename";
  124.     }
  125.  
  126.     # print "getting ready to rpm -i $rpm <>\n";
  127.     # <STDIN>;
  128.     
  129.     open (INST, "rpm -i --percent --force --root /mnt $rpm 2>&1 |");
  130.  
  131.     if ($installsource eq "ftp") {
  132.         $msg = ">\n" . 
  133.            "> Downloading   : $filename\n" .
  134.                    "> Package Number: $count of $total\n" .
  135.            ">\n";
  136.     } else {
  137.         $msg = ">\n" . 
  138.            "> Installing    : $filename\n" .
  139.                    "> Package Number: $count of $total\n" .
  140.            ">\n";
  141.     }
  142.     if ($nogauge) {
  143.         &rhs_gauge("Package Installation", $msg, 70, 0);
  144.         $nogauge = 0;
  145.     } else {
  146.         &rhs_update_gauge_and_message($msg, 0);
  147.     }
  148.  
  149.     while (<INST>) {
  150.         if (/.*failed.*/) {
  151.         $failed_packages .= " " . $file;
  152.         &rhs_stop_gauge;
  153.         $nogauge = 1;
  154.         if ($installsource eq "ftp") {
  155.             $error = "FTP";
  156.         } else {
  157.             $error = "Package install";
  158.         }
  159.         &rhs_infobox("$error Failed", 
  160.                  ">\n" .
  161.                  "> $error of $filename failed.\n" .
  162.                  ">\n",
  163.                 , 60);
  164.         sleep(3);
  165.         }
  166.  
  167.         if (/^%%/) {
  168.         # Update (and create if necessary) the gauge
  169.         $omsg = $msg;
  170.         $_ =~ m|%% (.*)|;
  171.         $percent = int($1);
  172.         $percent = 0 if (! $percent);
  173.         if ($percent > 99) {
  174.             $msg = ">\n".
  175.                "> Recording     : $filename\n" .
  176.                            "> Package Number: $count of $total\n" .
  177.                ">\n";
  178.         } else {
  179.             $msg = ">\n".
  180.                "> Installing    : $filename\n" .
  181.                            "> Package Number: $count of $total\n" .
  182.                ">\n";
  183.         }
  184.         if ($nogauge) {
  185.             &rhs_gauge("Package Installation", $msg, 70, $percent);
  186.             $nogauge = 0;
  187.         } else {
  188.             if ($msg ne $omsg) {
  189.             &rhs_update_gauge_and_message($msg, $percent);
  190.             } else {
  191.             &rhs_update_gauge($percent);
  192.             }
  193.         }
  194.         }
  195.     }
  196.     close(INST);
  197.  
  198.     $removefile && unlink($removefile);
  199.     }
  200.  
  201.     if ($failed_packages) {
  202.     if ($installsource eq "ftp") {
  203.         $error = ", probably due to FTP failure.";
  204.     } else {
  205.         $error = ".";
  206.     }
  207.     &rhs_msgbox("Failed Packages",
  208. <<EOM
  209. >
  210. The following packages failed to install$error
  211. You may wish to
  212. install these packages after completing the
  213. installation.
  214. >
  215. $failed_packages
  216. >
  217. EOM
  218.             , 70);
  219.     }
  220.  
  221. #    &rhs_msgbox("Package Installation",
  222. #<<EOM
  223. #>
  224. #Package Installation is complete.
  225. #>
  226. #EOM
  227. #        , 70);
  228.  
  229.     return 1;
  230. }
  231.  
  232. sub generate_rpms_to_install {
  233.     local ( @avail ) = @_;
  234.     local ( @series_rpms );
  235.     local ( $rpm, @rpms_to_install );
  236.  
  237.     # First generate a uniq list of package names
  238.     foreach (@series_to_install) {
  239.     foreach $x (0 .. $series_package_count{$_}) {
  240.         if (! &member($series_packages{"$_:$x"}, @series_rpms)) {
  241.         push(@series_rpms, $series_packages{"$_:$x"});
  242.         }
  243.     }
  244.     }
  245.     if ($xinstalled) {
  246.     push(@series_rpms, $xserver_rpm);
  247.     }
  248.  
  249.     foreach $rpm (@avail) {
  250.     $rpm =~ /(.*)-.*-.*\..*\.rpm/;
  251.     $name = $1;
  252.     if (&member($name, @series_rpms)) {
  253.         push(@rpms_to_install, $rpm);
  254.     }
  255.     }
  256.  
  257.     return @rpms_to_install;
  258. }
  259.  
  260. sub get_rpms_list {
  261.     local (*rpms) = @_;
  262.     local (@files, @avail_list, %doshack, @rpms_to_install, @tmprpms);
  263.  
  264.     ($installsource eq "nfs" || $installsource eq "cdrom") && do {
  265.     opendir(D, "/image/RedHat/RPMS");
  266.     @files = readdir(D);
  267.     closedir(D);
  268.     @avail_list = grep(m|.*\.rpm|, @files);
  269.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  270.     @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @rpms_to_install));
  271.     } ;
  272.  
  273.     ($installsource eq "hard drive")  && do {
  274.     require "rpmhead";
  275.  
  276.     &get_name_file_dict(*doshack) || return 0;
  277.  
  278.     @avail_list = keys(%doshack);
  279.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  280.  
  281.     foreach (@rpms_to_install) {
  282.         push(@tmprpms, $doshack{$_});
  283.     }
  284.  
  285.     @rpms = sort(grep(s|^|/image/RedHat/RPMS/|, @tmprpms));
  286.     };
  287.  
  288.     ($installsource eq "ftp")  && do {
  289.     &ftp_get_file_list(*files) || return 0;
  290.  
  291.     # Generate the list of rpms
  292.     @avail_list = grep(m|.*\.rpm|, @files);
  293.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  294.     @rpms = sort(grep(s|^|ftp://$ftp_site$ftp_dir/RedHat/RPMS/|, 
  295.                        @rpms_to_install));
  296.     } ;
  297.  
  298.     ($installsource eq "floppy") && do {
  299.     @avail_list = &floppy_get_rpm_list();
  300.     @rpms_to_install = &generate_rpms_to_install(@avail_list);
  301.     @rpms = &floppy_sort_rpms(@rpms);
  302.     @rpms = grep(s|^|/mnt/tmp/|, @rpms_to_install);
  303.     };
  304.  
  305.  
  306.     return 1;
  307. }
  308.  
  309. #########
  310. 1;
  311.