version 1.7, 2002/09/09 15:04:48
|
version 1.15, 2003/03/10 17:34:52
|
Line 19 other modes can be specified as shown in
|
Line 19 other modes can be specified as shown in
|
|
|
=over 4 |
=over 4 |
|
|
|
=item DEFAULT |
|
|
|
When left blank, the script runs in interactive mode. First, a proposed |
|
list of RPMs is presented to the user. Then, the user is asked if he or |
|
she wants to download the RPMs to /tmp/loncapa_rpm_updates/. |
|
|
=back |
=item view |
|
|
=head1 DESCRIPTION |
A proposed list of RPMs to update is presented to the user. |
|
|
This file automates the usage of Martin Siegert's "check-rpms" |
=item download |
script. It runs through a list of possible mirror sites |
|
until it finds one with a reasonably good FTP connection. |
|
|
|
=head2 Future directions |
A proposed set of RPMs to update are downloaded into /tmp/loncapa_rpm_updates/. |
|
Note that prior information inside /tmp/loncapa_rpm_updates/ is removed. |
|
|
Eventually, this script may have a simple argument format |
=item redownload |
that allows the user to VIEW, DOWNLOAD, or AUTOUPDATE their |
|
computer. Or, this script may evolve into an interactive |
|
series of steps: For example, there may be questions like this: |
|
|
|
=over 4 |
A proposed set of RPMs to update are downloaded into /tmp/loncapa_rpm_updates/. |
|
Note that prior information inside /tmp/loncapa_rpm_updates/ is not removed. |
|
(This helps support continual attempts from dialup connections.) |
|
|
=item * |
=item html |
|
|
Do you want to (D)ownload or (A)utoupdate the RPMs |
Similar to view mode. XHTML-formatted output is delivered; presumably |
in the list above? |
to a web client. html mode is automatically chosen if $ENV{'QUERY_STRING'} is |
|
defined. |
|
|
=item * |
=back |
|
|
Specify a download location for the RPMs |
=head1 DESCRIPTION |
(default=/tmp/update_my_rpms/)? |
|
|
|
=back |
This file automates the usage of Martin Siegert's "check-rpms" |
|
script. It runs through a list of possible mirror sites |
|
until it finds one with a reasonably good FTP connection. |
|
|
Note that there are no current plans to automate a software upgrade of the |
For instructions on usage, see L<SYNOPSIS>. |
kernel. This step should be performed by a qualified system administrator. |
|
|
|
=head1 AUTHOR |
=head1 AUTHOR |
|
|
Line 69 if ($argument eq '--download' or $argume
|
Line 72 if ($argument eq '--download' or $argume
|
{ |
{ |
if ($< != 0) # Download mode requires 'root'. |
if ($< != 0) # Download mode requires 'root'. |
{ |
{ |
print($out |
print( |
'**** ERROR **** Download mode needs to be run as root'."\n"); |
'**** ERROR **** Download mode needs to be run as root'."\n"); |
exit(0); # Exit. |
exit(0); # Exit. |
} |
} |
Line 100 my $command_name=$0;
|
Line 103 my $command_name=$0;
|
# ---------------- The FTP servers (and their directory paths) to check against |
# ---------------- The FTP servers (and their directory paths) to check against |
my @serverpaths_to_try = |
my @serverpaths_to_try = |
( |
( |
'distro.ibiblio.org/pub/linux/distributions/redhat/updates/', |
'ftpmirror:loncapa@install.lon-capa.org/pub/redhat/linux/updates/', |
'mirror.pa.msu.edu/linux/redhat/linux/updates/', |
'mirror.pa.msu.edu/linux/redhat/linux/updates/', |
|
'distro.ibiblio.org/pub/linux/distributions/redhat/updates/', |
'limestone.uoregon.edu/redhat/updates/', |
'limestone.uoregon.edu/redhat/updates/', |
'rufus.w3.org/linux/redhat/linux/updates/', |
'rufus.w3.org/linux/redhat/linux/updates/', |
'opnsrc.support.compaq.com/linux/redhat/updates.redhat.com/', |
|
); |
); |
|
|
# -------------------------------------------- Use check-rpms command this way. |
# -------------------------------------------- Use check-rpms command this way. |
Line 188 SERVERLOOP: foreach my $serverpath (@ser
|
Line 191 SERVERLOOP: foreach my $serverpath (@ser
|
{ |
{ |
$serverpath=~/^(.*?)\//; # Pattern match the ip name. |
$serverpath=~/^(.*?)\//; # Pattern match the ip name. |
$FTPSERVER=$1; # Set to the ip name. |
$FTPSERVER=$1; # Set to the ip name. |
print($out "Trying $FTPSERVER...\n"); # Notify of attempts with ip name. |
$FTPSERVER_noauth=$FTPSERVER; |
`ping -c 1 $FTPSERVER 2>/dev/null`; # Ping ftp server (are you out there?). |
$FTPSERVER_noauth=~s/^.*?\@//; |
|
print($out |
|
"Trying $FTPSERVER_noauth...\n"); # Notify of attempts with ip name. |
|
`ping -c 1 -w 10 $FTPSERVER_noauth 2>/dev/null`;#Ping ftp server (u there?) |
if ($?==0) # If the ftp server can be pinged. |
if ($?==0) # If the ftp server can be pinged. |
{ |
{ |
print($out "$FTPSERVER found...\n"); # Tell user ftp server is found. |
print($out "$FTPSERVER found...\n"); # Tell user ftp server is found. |
Line 315 sub clean_exit
|
Line 321 sub clean_exit
|
if ($mode eq 'cronmail') # If cronmail mode, then mail LON-CAPA sys admin. |
if ($mode eq 'cronmail') # If cronmail mode, then mail LON-CAPA sys admin. |
{ |
{ |
close(FOUT); |
close(FOUT); |
|
|
# Read in configuration to get e-mail addresses. |
# Read in configuration to get e-mail addresses. |
my $perlvarref = read_conf('loncapa.conf'); |
my $perlvarref = read_conf('loncapa.conf'); |
my %perlvar = %{$perlvarref}; |
my %perlvar = %{$perlvarref}; |
Line 323 sub clean_exit
|
Line 330 sub clean_exit
|
delete $perlvar{'lonSqlAccess'}; # remove since sensitive |
delete $perlvar{'lonSqlAccess'}; # remove since sensitive |
|
|
# Set metadata for the e-mail. |
# Set metadata for the e-mail. |
my $emailto = "$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}"; |
my $emailto = "$perlvar{'lonAdmEMail'}"; |
# my $emailto = "sharrison\@users.sourceforge.net"; |
|
my $subj="LON: $perlvar{'lonHostID'}, RPMS to upgrade"; |
my $subj=$perlvar{'lonHostID'}.', RPMS to upgrade'; |
system( |
|
'metasend -b -t '.$emailto.' -s '. |
# Make the e-mail's subject header to describe whether up-to-date. |
"'$subj' -f /tmp/CHECKRPMS.$$ -m text/plain"); |
if ($reallygoodoutput) |
|
{ |
|
$subj = 'happy_lon: '.$subj; # Machine is up-to-date. |
|
} |
|
else |
|
{ |
|
$subj = 'ALERT_lon: '.$subj; # There are out-of-date RPMs. |
|
} |
|
|
|
# Send the e-mail. |
|
my $date = `date +"\%e"`; # Always send a day after the "Ides" or after |
|
# the beginning of a month. (In other words, |
|
# send an e-mail every two weeks regardless.) |
|
if (!$reallygoodoutput or |
|
$date == 2 or |
|
$date == 16) |
|
{ |
|
system( |
|
'metasend -b -t '.$emailto.' -s '. |
|
"'$subj' -f /tmp/CHECKRPMS.$$ -m text/plain"); |
|
} |
} |
} |
|
|
print($out <<END) if $mode eq 'html'; # If html mode, print ending tags. |
print($out <<END) if $mode eq 'html'; # If html mode, print ending tags. |