# rhn-lib.pl # Functions for installing packages from the redhat network $up2date_config = "/etc/sysconfig/rhn/up2date"; $rhn_sysconfig = "/etc/sysconfig/rhn/rhnsd"; # update_system_install([package]) # Install some package with up2date sub update_system_install { local $update = $_[0] || $in{'update'}; local @rv; print "",&text('rhn_install', "up2date $update"),"

\n"; print "

";
&additional_log('exec', undef, "up2date \"$update\"");
local $qm = quotemeta($update);
&open_execute_command(CMD, "up2date $qm 2>&1", 1);
local $got_error = 0;
while() {
	while(s/^[^\015]+\015([^\012])/$1/) { }
	$got_error++ if (/error|failed/i);
	if (/installing.*\/([^\/\s]+)\-([^\-]+)\-([^\-]+)\.rpm/i) {
		push(@rv, $1);
		}
	print;
	}
close(CMD);
print "
\n"; if ($got_error) { print "$text{'rhn_failed'}

\n"; @rv = ( ); } else { print "$text{'rhn_ok'}

\n"; } return @rv; } # update_system_form() # Show a form for configuring the redhat update agent sub update_system_form { print &ui_subheading($text{'rhn_form'}); print "

\n"; print "\n"; &foreign_require("init", "init-lib.pl"); local $auto = &init::action_status("rhnsd"); print "\n"; printf "\n", $auto == 2 ? '' : 'checked', $text{'no'}; local %rhnsd; &read_env_file($rhn_sysconfig, \%rhnsd); print "\n"; print "\n"; local $conf = &read_up2date_config(); print "\n"; printf "\n", $prx; print "\n"; print "\n"; print "
$text{'rhn_auto'} %s\n", $auto == 2 ? 'checked' : '', $text{'yes'}; printf " %s
$text{'rhn_interval'} ", "$text{'rhn_secs'}
$text{'rhn_proxy'} %s\n", $conf->{'enableProxy'}->{'value'} ? '' : 'checked', $text{'rhn_none'}; printf " %s\n", $conf->{'enableProxy'}->{'value'} ? 'checked' : ''; local $prx = $conf->{'pkgProxy'} ? $conf->{'pkgProxy'}->{'value'} : $conf->{'httpProxy'}->{'value'}; printf "
$text{'rhn_skip'}
\n"; print "\n"; print "
\n"; } # read_up2date_config() sub read_up2date_config { local %conf; local $lnum = 0; &open_readfile(CONF, $up2date_config); while() { s/\r|\n//g; s/#.*$//; if (/^([^=\s]+)=(.*)$/) { $conf{$1} = { 'name' => $1, 'value' => $2, 'line' => $lnum }; } $lnum++; } close(CONF); return \%conf; } # save_up2date_config(&config, name, value) sub save_up2date_config { local $lref = &read_file_lines($up2date_config); local $old = $_[0]->{$_[1]}; if ($old) { $lref->[$old->{'line'}] = "$_[1]=$_[2]"; } } # update_system_available() # Returns a list of packages available from RHN sub update_system_available { local @rv; open(UP2DATE, "up2date -l --showall |"); while() { s/\r|\n//g; if (/^(\S+)\-([^\-]+)\-([^\-]+)\.([^\.]+)$/) { push(@rv, { 'name' => $1, 'version' => "$2-$3", 'arch' => $4 }); } } close(UP2DATE); return @rv; } 1;