File:  [LON-CAPA] / loncom / build / Attic / CHECKRPMS.default
Revision 1.4: download - view: text, annotated - select for diffs
Thu Sep 5 17:36:39 2002 UTC (21 years, 10 months ago) by harris41
Branches: MAIN
CVS tags: HEAD
BUG 623, BUG 717 FIXED.  CHECKRPMS --download now works; root user
issues are dealt with.

    1: #!/usr/bin/perl
    2: 
    3: =pod
    4: 
    5: =head1 NAME
    6: 
    7: B<CHECKRPMS> - automated status report about RPMs on a system
    8: 
    9: =head1 SYNOPSIS
   10: 
   11: ./CHECKRPMS
   12: 
   13: or
   14: 
   15: perl CHECKRPMS
   16: 
   17: =head1 DESCRIPTION
   18: 
   19: This file automates the usage of Martin Siegert's "check-rpms"
   20: script.  It runs through a list of possible mirror sites
   21: until it finds one with a reasonably good FTP connection.
   22: 
   23: =head2 Future directions
   24: 
   25: Eventually, this script may have a simple argument format
   26: that allows the user to VIEW, DOWNLOAD, or AUTOUPDATE their
   27: computer.  Or, this script may evolve into an interactive
   28: series of steps:  For example, there may be questions like this:
   29: 
   30: =over 4
   31: 
   32: =item *
   33: 
   34: Do you want to (D)ownload or (A)utoupdate the RPMs
   35: in the list above?
   36: 
   37: =item *
   38: 
   39: Specify a download location for the RPMs
   40: (default=/tmp/update_my_rpms/)?
   41: 
   42: =back
   43: 
   44: Note that there are no current plans to automate a software upgrade of the
   45: kernel.  This step should be performed by a qualified system administrator.
   46: 
   47: =head1 AUTHOR
   48: 
   49: Scott Harrison, sharrison@users.sourceforge.net, 2002
   50: 
   51: =cut
   52: 
   53: # =================================================== READ IN COMMAND ARGUMENTS
   54: # ---------------------------------------------------- Process download option.
   55: my $download=shift(@ARGV);
   56: if ($download eq '--download')
   57:   {
   58:     if ($< != 0) # Download mode requires 'root'.
   59:       {
   60:         print('**** ERROR **** Download mode needs to be run as root'."\n");
   61: 	exit(1); # Exit with error status.
   62:       }
   63:     `rm -Rf /tmp/loncapa_rpm_updates`;
   64:     $download='-v -dl -d /tmp/loncapa_rpm_updates'; # Part of check-rpms args.
   65:   }
   66: else
   67:   {
   68:     $download='';
   69:   }
   70: 
   71: # =================================================== GENERAL INITIAL VARIABLES
   72: # ---------------- The FTP servers (and their directory paths) to check against
   73: my @serverpaths_to_try=(
   74:    'mirror.pa.msu.edu/linux/redhat/linux/updates/',
   75:    'rufus.w3.org/linux/redhat/linux/updates/',
   76:    'distro.ibiblio.org/pub/linux/distributions/redhat/updates/',
   77:    'limestone.uoregon.edu/redhat/updates/',
   78:    'opnsrc.support.compaq.com/linux/redhat/updates.redhat.com/',
   79: );
   80: 
   81: # --------------------------------------------------- Determine RedHat version.
   82: my $RHversion = (split /\s/, `cat /etc/redhat-release`)[4]; # - 6.2 or 7.3 or ?
   83: 
   84:  # ------------------------------------------- Use check-rpms command this way.
   85: my $checkcommand='check-rpms '.$download.' --rpmuser www -ftp';
   86: 
   87: my $FTPSERVER; # ------------------------- the server portion of the serverpath
   88: my $FTPUPDATES; # ----------------------------- the actual update root location
   89: my @rpms; # ---------------------------------- this will store the list of RPMs
   90: my $goodoutput; # ------------------------------------ good stuff was returned!
   91: my $reallygoodoutput; # ------------------------------- you are 100% up-to-date
   92: 
   93: # ----------------------------------------- Find the check-rpms script location
   94: if (-e './check-rpms') {
   95:     $commandpre='perl ./';
   96: }
   97: elsif (-e 'loncom/build/check-rpms') {
   98:     $commandpre='perl loncom/build/';
   99: }
  100: else {
  101:     die("**** ERROR **** CANNOT FIND THE check-rpms SCRIPT\n");
  102: }
  103: 
  104: $checkcommand=$commandpre.$checkcommand;
  105: 
  106: # =============== Go through all the servers until a decent connection is found
  107: print(<<END);
  108: THIS SCRIPT IS NOW PROBING SEVERAL FTP SERVERS....
  109: PLEASE BE PATIENT, THIS MAY TAKE A FEW MINUTES.
  110: END
  111: 
  112: SERVERLOOP: foreach my $serverpath (@serverpaths_to_try) {
  113:     $serverpath=~/^(.*?)\//;
  114:     $FTPSERVER=$1;
  115:     print "Trying $FTPSERVER...\n";
  116:     `ping -c 1 $FTPSERVER 2>/dev/null`;
  117:     if ($?==0) {
  118: 	print "$FTPSERVER found...\n";
  119: 	`ncftpls ftp://$FTPSERVER`;
  120: 	if ($?==0) {
  121: 	    $FTPUPDATES="$serverpath$RHversion/en/os";
  122: 	    print "$checkcommand $FTPUPDATES\n";
  123: 	    if ($download) {
  124: 		$|=1;
  125: 		print `$checkcommand $FTPUPDATES 2>\&1`;
  126: 		exit(0);
  127: 	    }
  128: 	    @rpms=`$checkcommand $FTPUPDATES 2>\&1`;
  129: 	    my $rpmtext=join('',@rpms);
  130: 	    if ($rpmtext=~/You do not seem to have a/) {
  131: 		print "You do not have a 'www' user on your system.\n".
  132: 		    "Please add this user and try this command again.\n";
  133: 		exit(1);
  134: 	    }
  135: 	    if ($rpmtext=~/This account is currently not/) { # ---------- uh-oh
  136: 		print "...strange error, moving on ($FTPSERVER)\n";
  137: 	    }
  138: 	    else { # ------------------------------------- the output is "good"
  139: 		$goodoutput=$rpmtext;
  140: 		unless (@rpms) {
  141: 		    $reallygoodoutput=<<END;
  142: **** NOTE **** All RPMS on your system appear to be up to date.
  143: END
  144: 		}
  145: 		last SERVERLOOP;
  146: 	    }
  147: 	}
  148: 	print "...cannot establish an ftp session with $FTPSERVER\n";
  149:     }
  150:     else {
  151: 	print "...cannot find $FTPSERVER on the network\n";
  152:     }
  153: }
  154: if (!$goodoutput) {
  155:     print "**** ERROR **** Cannot find a working ftp server.\n";
  156:     exit(1);
  157: }
  158: elsif ($reallygoodoutput) {
  159:     print $reallygoodoutput;
  160: }
  161: else {
  162:     my $rpmcount=scalar(@rpms);
  163:     print(<<END);
  164: **** WARNING **** You need to update at least $rpmcount RPMS shown in
  165: the list below.  THIS IS IMPORTANT FOR SECURITY.
  166: 
  167: END
  168:     print $goodoutput;
  169:     print(<<END);
  170: 
  171: Please visit ftp://$FTPUPDATES
  172: and download the RPMS you need.
  173: For instructions on working with (and upgrading) RPMS, please
  174: visit http://www.rpm.org/max-rpm/.
  175: To automatically download these RPMs to /tmp/loncapa_rpm_updates/,
  176: run the CHECKRPMS command as "./CHECKRPMS --download"
  177: END
  178: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>