Annotation of loncom/build/rpmparse.pl, revision 1.10
1.1 harris41 1: #!/usr/bin/perl
2:
1.8 harris41 3: my ($standard,$current,$expected)=@ARGV;
1.1 harris41 4:
1.10 ! harris41 5: $standard=~s/[^\/\w\.]//g; # cd_rpms.txt
! 6: $current=~s/[^\/\w\.]//g; # rpm -qa --queryformat \
! 7: # '%{NAME}\t%{VERSION}\t%{RELEASE}\t%{BUILDTIME}'
! 8: $expected=~s/[^\/\w\.]//g; # rpm_list.txt
1.1 harris41 9: my %svhash;
10: my %sbhash;
1.8 harris41 11: my %chash;
1.1 harris41 12:
13: my @oldrpms;
14: my @badversionrpms;
15: my @newrpms;
16: my @externalrpms;
1.8 harris41 17: my @barerpms;
18: my @developrpms;
1.1 harris41 19:
1.10 ! harris41 20: my %ignore=(
! 21: 'LON-CAPA-setup' => 1,
! 22: 'LON-CAPA-base' => 1,
! 23: );
! 24:
1.4 harris41 25: open IN, "<$standard";
1.1 harris41 26: while(<IN>) {
27: chop;
1.10 ! harris41 28: my ($name,$version,$release,$buildtime,$arch)=split(/\s+/);
! 29: next if $ignore{$name};
! 30: $download='<a href="'.
! 31: 'http://install.lon-capa.org/3.1/latestRPMS/'.$name.'-'.
! 32: $version.'-'.$release.'.'.$arch.'.rpm'.'">[download]</a>';
! 33: $version="$version-$release";
1.1 harris41 34: $svhash{$name}=$version;
35: $sbhash{$name}=$buildtime;
1.10 ! harris41 36: $dhash{$name}=$download;
1.1 harris41 37: }
38: close IN;
39:
1.4 harris41 40: open IN, "<$current";
1.1 harris41 41: while(<IN>) {
42: chop;
1.10 ! harris41 43: my ($name,$version,$release,$buildtime)=split(/\s+/);
! 44: next if $ignore{$name};
! 45: $version="$version-$release";
1.8 harris41 46: $chash{$name}=1;
1.1 harris41 47: if ($svhash{$name}) {
48: unless ($svhash{$name} eq $version) {
1.10 ! harris41 49: push @badversionrpms,sprintf("$dhash{$name} %-25s %s",($name,"is version $version, should be $svhash{$name}"))."\n";
1.1 harris41 50: }
51: if ($sbhash{$name}<$buildtime) {
1.10 ! harris41 52: push @newrpms,sprintf("$dhash{$name} %-25s %s",($name,"was built ".localtime($buildtime)." when the expected build time was ".localtime($sbhash{$name})))."\n";
1.1 harris41 53: }
54: if ($sbhash{$name}>$buildtime) {
1.10 ! harris41 55: push @oldrpms,sprintf("$dhash{$name} %-25s %s",($name,"was built ".localtime($buildtime)." when the expected build time was ".localtime($sbhash{$name})))."\n";
1.1 harris41 56: }
57: }
58: else {
1.10 ! harris41 59: push @externalrpms,sprintf("$dhash{$name} %-25s %s",($name,"(built ".localtime($buildtime).") is an RPM not expected to ever be on a LON-CAPA system"))."\n";
1.1 harris41 60: }
61: }
62: close IN;
63:
1.8 harris41 64: open IN,"<$expected";
65: while(<IN>) {
66: chop;
67: next unless /^[YN] \w/;
68: /(.).(.*)/;
69: my $type=$1;
70: my $package=$2;
71: $package=~s/\-[^\-]*\-[^\-]*$//;
1.10 ! harris41 72: next if $ignore{$package};
1.8 harris41 73: if (!$chash{$package}) {
1.10 ! harris41 74: push @barerpms,sprintf("$dhash{$package} %-25s %s",($package,"is missing and is of basic necessity to a LON-CAPA system"))."\n" if $type eq 'Y';
! 75: push @developrpms,sprintf("$dhash{$package} %-25s %s",($package,"is missing and may be useful for a LON-CAPA system"))."\n" if $type eq 'N';
1.8 harris41 76: }
77: }
78: close IN;
79:
1.1 harris41 80: my $date=`date`; chop $date;
1.3 harris41 81: my $hostname=`hostname`; chop $hostname;
1.1 harris41 82: print <<END;
1.7 harris41 83: <html>
84: <head>
85: <title>LON-CAPA Software RPM Status Page</title>
86: </head>
87: <body>
88: <font size="+2">LON-CAPA Software RPM Status Page
89: (done on $date for $hostname)</font>
90: <br />Michigan State University
91: <br />Learning Online with CAPA
92: <br />Contact korte\@lon-capa.org
93: <ul>
1.8 harris41 94: <li>Important warnings</li>
1.7 harris41 95: <li>About this file</li>
96: <li>Bad RPM Versions</li>
97: <li>Out-of-date RPMS</li>
98: <li>Newer than expected RPMS</li>
99: <li>RPMS external to LON-CAPA</li>
1.8 harris41 100: <li>RPMS from the "bare minimum" set that you are missing</li>
101: <li>RPMS from the "development" set that you are missing</li>
1.7 harris41 102: </ul>
1.8 harris41 103: <font size="+2">Important warnings</font>
104: <p>
105: <b>Never install LON-CAPA-setup</b> on a running LON-CAPA machine.
106: This RPM package contains pre-installation files such as
107: /etc/group and /etc/passwd. You will lose all access to your
108: machine if you install this RPM.
109: </p>
110: <p>
111: If you are doing CVS-based upgrades of your LON-CAPA
112: software, then you do not need to upgrade your LON-CAPA-base
113: RPM. Upgrading with the LON-CAPA-base RPM
114: will cause you to lose many of your system-specific
115: configuration settings.
116: </p>
117: <p>
118: DO NOT UPGRADE YOUR KERNEL UNLESS YOU KNOW WHAT YOU ARE DOING.
119: Kernel upgrading involves packages beginning with the word
120: "kernel".
121: </p>
1.7 harris41 122: <font size="+2">About this file</font>
123: <p>
1.1 harris41 124: This file is generated dynamically by <tt>make rpmstatuspost</tt>
125: when this command is entered in the CVS:loncom/build directory.
1.7 harris41 126: </p>
1.8 harris41 127: <p>
128: Managing software packages on any system, testing different
129: sets of software packages, tracking their dependencies, and maintaining
130: configuration information is an inexact science. While the LON-CAPA
131: recommended set of RPMs is a tested set with no missing dependencies,
132: we still highly recommend that RPM upgrades are only performed
133: by those with significant knowledge about standard Linux operating
134: systems.
135: </p>
1.1 harris41 136: END
137: print <<END;
1.7 harris41 138: <font size="+2">Differing RPM Versions</font>
139: <pre>
1.1 harris41 140: END
141: foreach my $rpminfo (@badversionrpms) {
142: print $rpminfo;
143: }
144: print <<END;
1.7 harris41 145: </pre>
1.1 harris41 146: END
147: print <<END;
1.7 harris41 148: <font size="+2">Out-of-date RPMS</font>
149: <pre>
1.1 harris41 150: END
151: foreach my $rpminfo (@oldrpms) {
152: print $rpminfo;
153: }
154: print <<END;
1.7 harris41 155: </pre>
1.1 harris41 156: END
157: print <<END;
1.7 harris41 158: <font size="+2">Newer than expected RPMS</font>
159: <pre>
1.1 harris41 160: END
161: foreach my $rpminfo (@newrpms) {
162: print $rpminfo;
163: }
164: print <<END;
1.7 harris41 165: </pre>
1.1 harris41 166: END
167: print <<END;
1.7 harris41 168: <font size="+2">RPMS external to LON-CAPA</font>
169: <pre>
1.1 harris41 170: END
171: foreach my $rpminfo (@externalrpms) {
1.8 harris41 172: print $rpminfo;
173: }
174: print <<END;
175: </pre>
176: END
177: print <<END;
178: <font size="+2">RPMS from the "bare minimum" set that you are missing</font>
179: <pre>
180: END
181: foreach my $rpminfo (@barerpms) {
182: print $rpminfo;
183: }
184: print <<END;
185: </pre>
186: END
187: print <<END;
188: <font size="+2">RPMS from the "development" set that you are missing</font>
189: <pre>
190: END
191: foreach my $rpminfo (@developrpms) {
1.1 harris41 192: print $rpminfo;
193: }
194: print <<END;
1.7 harris41 195: </pre>
1.1 harris41 196: END
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>