--- loncom/build/CHECKRPMS 2006/10/10 19:27:48 1.6 +++ loncom/build/CHECKRPMS 2007/12/04 04:43:24 1.10 @@ -39,9 +39,10 @@ to LON-CAPA systems. distprobe is used t The utility which is used to complete the check depends on the distro: -fedora - yum +fedora, rhel 5/5+, centos, scientific - yum suse 9.X and sles9 - you -suse 10.X and sles10 - rug +suse 10.2,10.3 - zypper +sles10,suse10.1 - rug rhel 4 - up2date others - check-rpms @@ -54,12 +55,16 @@ Must be run as root or www. use strict; use lib '/home/httpd/lib/perl/'; use LONCAPA::Configuration; +use Apache::loncommon(); my $tmpfile = '/tmp/CHECKRPMS.'.$$; my $perlvar= LONCAPA::Configuration::read_conf('loncapa.conf'); # Determine who we email -my $emailto = "$perlvar->{'lonAdmEMail'}"; +my $defdom = $perlvar->{'lonDefDomain'}; +my $origmail = $perlvar->{'lonAdmEMail'}; +my $emailto = &Apache::loncommon::build_recipient_list(undef, + 'packagesmail',$defdom,$origmail); my $subj = $perlvar->{'lonHostID'}; # Get Linux distro @@ -84,21 +89,47 @@ if ($distro =~ /^fedora\d+$/) { $cmd = 'you'; &prepare_msg($tmpfile,$cmd); ($send,$addsubj) = &check_with_you($tmpfile); -} elsif ($distro =~ /^(suse|sles)10\.?\d?$/) { +} elsif ($distro =~ /^suse10\.(\d)$/) { + my $version =$1; + if ($version > 1) { + $cmd = 'zypper up'; + &prepare_msg($tmpfile,$cmd); + ($send,$addsubj) = &check_with_zypper($tmpfile); + } else { + $cmd = 'rug up'; + &prepare_msg($tmpfile,$cmd); + ($send,$addsubj) = &check_with_rug($tmpfile); + } +} elsif ($distro =~ /^sles10$/) { $cmd = 'rug up'; &prepare_msg($tmpfile,$cmd); ($send,$addsubj) = &check_with_rug($tmpfile); -} elsif ($distro =~ /^rhes4$/) { - $cmd ='up2date -u --nox'; +} elsif ($distro =~ /^rhes(\d+)$/) { + my $version = $1; + if ($version == 4) { + $cmd ='up2date -u --nox'; + &prepare_msg($tmpfile,$cmd); + ($send,$addsubj) = &check_with_up2date($tmpfile); + } elsif ($version > 4) { + $cmd = 'yum update'; + &prepare_msg($tmpfile,$cmd); + ($send,$addsubj) = &check_with_yum($tmpfile); + } +} elsif ($distro =~ /^centos\d+$/) { + $cmd = 'yum update'; &prepare_msg($tmpfile,$cmd); - ($send,$addsubj) = &check_with_up2date($tmpfile); + ($send,$addsubj) = &check_with_yum($tmpfile); +} elsif ($distro =~ /^scientific\d+\.\d$/) { + $cmd = 'yum update'; + &prepare_msg($tmpfile,$cmd); + ($send,$addsubj) = &check_with_yum($tmpfile); } else { $cmd = '/usr/local/bin/check-rpms --update'; ($send,$addsubj) = &check_with_checkrpms($tmpfile); } if ($send) { $subj .= $addsubj; - system(qq{mail -s '$subj' $emailto < $tmpfile}); + system(qq{mail -s '$subj' "$emailto" < $tmpfile}); } sub prepare_msg { @@ -272,6 +303,55 @@ sub check_with_rug { } else { $append_to_subj = ' Error running RPM update check'; $sendflag = 1; + } + return ($sendflag,$append_to_subj); +} + +sub check_with_zypper { + my ($tmpfile) = @_; + my $zypper = '/usr/bin/zypper'; + my $sendflag = 0; + my $append_to_subj; + my $header; + # + # Execute zypper command to check for updates + if (open (PIPE, "$zypper lu 2>&1 |")) { + my @output=; + close(PIPE); + chomp(@output); + my @clean_output; + foreach my $line (@output) { + if ($line eq 'Restoring system sources...') { + next; + } elsif ($line =~ /^Parsing\smetadata\sfor\s/) { + next; + } elsif ($line eq 'Parsing RPM database...') { + next; + } elsif ($line =~ /^Catalog\s+\|\s+Name\s+\|\s+Version\s+\|\s+Category\s+\|\s+Status$/) { + $header = $line."\n"; + next; + } elsif ($line =~ /^[-+]+$/) { + $header .= $line."\n"; + next; + } elsif ($line eq 'WARNING: These are only the updates affecting the updater itself.') { + next; + } elsif ($line eq 'There are others available too.') { + next; + } else { + push(@clean_output,$line); + } + } + if (@clean_output > 0) { + open(TMPFILE,">>$tmpfile"); + my $message = join("\n",@clean_output); + print TMPFILE $header.$message; + close(TMPFILE); + $append_to_subj= ' RPMS to upgrade'; + $sendflag = 1; + } + } else { + $append_to_subj = ' Error running RPM update check'; + $sendflag = 1; } return ($sendflag,$append_to_subj); }