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 >
Wrap
Text File
|
1995-11-03
|
7KB
|
311 lines
# -*-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;