# csw-lib.pl # Functions for installing packages from Blastwave $pkg_get = -x "/opt/csw/bin/pkg-get" ? "/opt/csw/bin/pkg-get" : &has_command("pkg-get"); # update_system_install([file]) # Install some package with pkg-get sub update_system_install { local $update = $_[0] || $in{'update'}; local (@rv, @newpacks); print "",&text('csw_install', "$pkg_get -i $update"),"
\n"; $| = 1; print "
";
local ($ph, $ppid) = &foreign_call("proc", "pty_process_exec_logged",
"$pkg_get -i ".quotemeta($update));
while(1) {
local $wf = &wait_for($ph, '(.*) \[\S+\]',
'Installation of <(.*)> failed',
'Installation of <(.*)> was successful',
'No changes were made to the system',
'.*\n', '.*\r');
if ($wait_for_input !~ /^\s*\d+\%\s+\[/) {
# Print everything except download line
print &html_escape($wait_for_input);
}
if ($wf == 0) {
# some question which should not have appeared before
if ($seen{$matches[1]}++) {
$failed++;
last;
}
&sysprint($ph, "y\n");
}
elsif ($wf == 1) {
# This package contains scripts
$failed++;
last;
}
elsif ($wf == 1 || $wf == 3) {
# failed for some reason.. give up
$failed++;
last;
}
elsif ($wf == 2) {
# done ok!
push(@rv, $matches[1]);
}
elsif ($wf == -1) {
# No more output
last;
}
}
print "";
close($ph);
if ($? || $failed) {
print "$text{'csw_failed'}\n"; return ( ); } else { print "$text{'csw_ok'}
\n";
return @rv;
}
}
# update_system_available()
# Returns a list of all available CSW packages
sub update_system_available
{
local @rv;
open(PKG, "$pkg_get -a |");
while(