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>