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: # =================================================== GENERAL INITIAL VARIABLES
54: # ---------------- The FTP servers (and their directory paths) to check against
55: my @serverpaths_to_try=(
56: 'spock.lite.msu.edu/linux/redhat/linux/updates/',
57: 'mirror234.pa.msu.edu/linux/redhat/linux/updates/',
58: 'mirror.pa.msu.edu/linux/redhat/linux/updates/',
59: 'rufus.w3.org/linux/redhat/linux/updates/',
60: 'distro.ibiblio.org/pub/linux/distributions/redhat/updates/',
61: 'limestone.uoregon.edu/redhat/updates/',
62: 'opnsrc.support.compaq.com/linux/redhat/updates.redhat.com/',
63: );
64:
65: my $RHversion = (split /\s/, `cat /etc/redhat-release`)[4]; # - 6.2 or 7.3 or ?
66: my $checkcommand='check-rpms -ftp '; # -------- use check-rpms command this way
67:
68: my $FTPSERVER; # ------------------------- the server portion of the serverpath
69: my $FTPUPDATES; # ----------------------------- the actual update root location
70: my @rpms; # ---------------------------------- this will store the list of RPMs
71: my $goodoutput; # ------------------------------------ good stuff was returned!
72: my $reallygoodoutput; # ------------------------------- you are 100% up-to-date
73:
74: # ----------------------------------------- Find the check-rpms script location
75: if (-e './check-rpms') {
76: $commandpre='perl ./';
77: }
78: elsif (-e 'loncom/build/check-rpms') {
79: $commandpre='perl loncom/build/';
80: }
81: else {
82: die("**** ERROR **** CANNOT FIND THE check-rpms SCRIPT\n");
83: }
84:
85: $checkcommand=$commandpre.$checkcommand;
86:
87: # =============== Go through all the servers until a decent connection is found
88: print(<<END);
89: THIS SCRIPT IS NOW PROBING SEVERAL FTP SERVERS....
90: PLEASE BE PATIENT, THIS MAY TAKE A FEW MINUTES.
91: END
92:
93: SERVERLOOP: foreach my $serverpath (@serverpaths_to_try) {
94: $serverpath=~/^(.*?)\//;
95: $FTPSERVER=$1;
96: print "Trying $FTPSERVER...\n";
97: `ping -q -c 1 $FTPSERVER 2>/dev/null`;
98: if ($?==0) {
99: `ncftpls ftp://$FTPSERVER`;
100: if ($?==0) {
101: $FTPUPDATES="$serverpath$RHversion/en/os";
102: print "$checkcommand $FTPUPDATES\n";
103: @rpms=`$checkcommand $FTPUPDATES`;
104: my $rpmtext=join('',@rpms);
105: if ($rpmtext=~/This account is currently not/) { # ---------- uh-oh
106: print "...strange error, moving on ($FTPSERVER)\n";
107: }
108: else { # ------------------------------------- the output is "good"
109: $goodoutput=$rpmtext;
110: unless (@rpms) {
111: $reallygoodoutput=<<END;
112: **** NOTE **** All RPMS on your system appear to be up to date.
113: END
114: }
115: last SERVERLOOP;
116: }
117: }
118: print "...cannot establish an ftp session with $FTPSERVER\n";
119: }
120: else {
121: print "...cannot find $FTPSERVER on the network\n";
122: }
123: }
124: if (!$goodoutput) {
125: print "**** ERROR **** Cannot find a working ftp server.\n";
126: exit(1);
127: }
128: elsif ($reallygoodoutput) {
129: print $reallygoodoutput;
130: }
131: else {
132: my $rpmcount=scalar(@rpms);
133: print(<<END);
134: **** WARNING **** You need to update at least $rpmcount RPMS shown in
135: the list below. THIS IS IMPORTANT FOR SECURITY.
136:
137: END
138: print $goodoutput;
139: print(<<END);
140:
141: Please visit ftp://$FTPUPDATES
142: and download the RPMS you need.
143: For instructions on working with (and upgrading) RPMS, please
144: visit http://www.rpm.org/max-rpm/.
145: END
146: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>