--- loncom/build/Attic/parse.pl 2001/01/16 15:48:45 1.24 +++ loncom/build/Attic/parse.pl 2001/01/18 15:13:09 1.25 @@ -211,6 +211,19 @@ close OUT; } elsif ($mode eq "status") { + $a=&begin_description_page('status'); + print $a; + $a=&make_rpm_description_block('status'); + print $a; + @directories=&determine_directory_structure('status'); + $a=&make_directory_structure_description_block(\@directories,'status'); + print $a; + $a=&make_file_type_ownership_and_permissions_description_block('status'); + print $a; + $a=&make_directory_and_file_structure_description_block(\@directories,'status'); + print $a; + $a=&end_description_page('status'); + print $a; } elsif ($mode eq "update") { } @@ -939,7 +952,10 @@ sub end_spec_page { # ------------------------------------------------------- Begin description page sub begin_description_page { - my $description=< LON-CAPA Software Description Page ($distribution, $date) @@ -964,7 +980,35 @@ http://install.lon-capa.org/compile/inde information.

END +} + else { + $description=< + +LON-CAPA Software File System Status Page ($distribution, $date) + + +LON-CAPA Software File System Status Page ($distribution, $date) +
Michigan State University +
Learning Online with CAPA +
Contact korte\@lon-capa.org + +About this file +

+This file is generated dynamically by parse.pl as +part of a status checking process. See http://install.lon-capa.org/ +for more information. +

+END + } return $description; + } # ------------------------------------------------- End description page @@ -980,7 +1024,10 @@ END # ------------------------------------------------- Make RPM description block sub make_rpm_description_block { - my $description=<Rolled in a RedHat 6.2 RPM, $date

@@ -1001,6 +1048,58 @@ $info{'RPM'}{'description'}

END +} + else { + my $exist=`rpm -q LON-CAPA-base 2>/dev/null`; + unless ($exist) { + $description=<No LON-CAPA RPM on the system, (installed ??????) +

+ + + +
+Error! A LON-CAPA-base RPM +was never installed on this system! +
+

+END + } + else { + chop $exist; + my $rpmname=`rpm -q --queryformat '%{NAME}' LON-CAPA-base`; + my $rpmversion=`rpm -q --queryformat '%{VERSION}' LON-CAPA-base`; + my $rpmrelease=`rpm -q --queryformat '%{RELEASE}' LON-CAPA-base`; + my $idate=`rpm -q --queryformat '%{INSTALLTIME:date}' LON-CAPA-base`; + my $rpmvendor=`rpm -q --queryformat '%{VENDOR}' LON-CAPA-base`; + my $rpmbuildhost=`rpm -q --queryformat '%{BUILDHOST}' LON-CAPA-base`; + my $rpmgroup=`rpm -q --queryformat '%{GROUP}' LON-CAPA-base`; + my $rpmlicense=`rpm -q --queryformat '%{LICENSE}' LON-CAPA-base`; + my $rpmsummary=`rpm -q --queryformat '%{SUMMARY}' LON-CAPA-base`; + my $rpmdescription=`rpm -q --queryformat '%{DESCRIPTION}' LON-CAPA-base`; + $description=<Current RedHat RPM on the system, (installed $idate) +

+ + +
+
+Name        : $rpmname
+Version     : $rpmversion
+Vendor      : $rpmvendor
+Release     : $rpmrelease
+Build Host  : $rpmbuildhost
+Group       : $rpmgroup
+License     : $rpmlicense
+Summary     : $rpmsummary
+Description : 
+$rpmdescription
+
+
+

+END +} + } return $description; } @@ -1013,7 +1112,8 @@ sub determine_directory_structure { # ---------------------------------- Make directory structure description block sub make_directory_structure_description_block { - my ($dirs)=@_; + my ($dirs,$mode)=@_; + my $dirstatus; my $statusheader; my $description=<Directory Structure Description, $date

@@ -1039,8 +1139,12 @@ END $maxcount=$count if $count>$maxcount; delete $diraccount{$d}; } + if ($mode eq 'status') { + $statusheader="Current Status"; + } $description.=< +$statusheader Category Permissions Development
Permissions
@@ -1061,8 +1165,34 @@ END my $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'}; my $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'}; my $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'}; + if ($mode eq 'status') { + my $ds=`find /$d -type d -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`; + unless ($ds) { + $dirstatus='MISSING'; + } + else { + my @dss=split(/\t/,$ds); + my $dssz=$dss[0]; + $dssz="0" . $dss[0] if length($dss[0])<4; + $dss[0]=$dssz; + $ds="$dss[0] $dss[1]:$dss[2]"; + if ($ds eq "$chmod $chown" && $ds eq "$devchmod $devchown") { + $dirstatus='runtime+development'; + } + elsif ($ds eq "$chmod $chown") { + $dirstatus='runtime'; + } + elsif ($ds eq "$devchmod $devchown") { + $dirstatus='development'; + } + else { + $dirstatus="ERROR
$ds"; + } + } + } $description.=< +$dirstatus $category $chmod $chown $devchmod $devchown @@ -1081,6 +1211,7 @@ END # ------------------- Make file type ownership and permissions description block sub make_file_type_ownership_and_permissions_description_block { + my ($mode)=@_; my $description=<File Type Ownership and Permissions Descriptions, $date

@@ -1120,7 +1251,8 @@ END # ------------------------- Make directory and file structure description block sub make_directory_and_file_structure_description_block { - my ($dirs)=@_; + my ($dirs,$mode)=@_; + my $statusheader; my $filestatus; my $description=<Directory and File Structure Description, $date

@@ -1174,8 +1306,14 @@ END END } if (@files) { + if ($mode eq 'status') { + $statusheader=<Current Status +END + } $description.=< +$statusheader Type File Name Function @@ -1219,8 +1357,67 @@ END $source="$source"; } } + if ($mode eq 'status') { + $filestatus=''; + my $fs; + my $listing2=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'FILES'}; + my @E=split(/\s+/,$listing2); shift @E; + if (@E) { + $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | wc -l`; chop $fs; + if ($fs!=(@E+0)) { + $ecount=(@E+0); + $estuff=join(",",@E); + $filestatus="ERROR. SOME FILES ARE MISSING"; + } + $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | sort | uniq | wc -l`; chop $fs; + if ($fs!=1) { + $filestatus='ERROR. THERE ARE MULTIPLE OWNERSHIPS/PERMISSIONS WHEN ALL THESE FILES SHOULD HAVE THE SAME CONFIGURATION'; + } + else { + $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g\n" 2>/dev/null | sort | uniq`; chop $fs; + } + } + else { + $fs=`find /$filesfull[$i] -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`; + } + my $fsl=`find /$filesfull[$i] -type l -prune -printf "\%m\t\%u\t\%g" 2>/dev/null`; + unless ($fs || $filestatus) { + $filestatus='MISSING'; + } + elsif (!$filestatus) { + + $chmod=$info{'OWNERSHIP'}{$category}{'CHMOD'}; + $chown=$info{'OWNERSHIP'}{$category}{'CHOWN'}; + $devchmod=$info{'DEVOWNERSHIP'}{$category}{'CHMOD'}; + $devchown=$info{'DEVOWNERSHIP'}{$category}{'CHOWN'}; + + my @fss=split(/\t/,$fs); + my $fssz=$fss[0]; + $fssz="0" . $fss[0] if length($fss[0])<4; + $fss[0]=$fssz; + $fs="$fss[0] $fss[1]:$fss[2]"; + $s=' '; + if ($fsl) { + $fs="$fss[1]:$fss[2]"; + $s=''; + } + if ($fs eq "$chmod$s$chown" && $fs eq "$devchmod$s$devchown") { + $filestatus='runtime+development'; + } + elsif ($fs eq "$chmod$s$chown") { + $filestatus='runtime'; + } + elsif ($fs eq "$devchmod$s$devchown") { + $filestatus='development'; + } + else { + $filestatus="ERROR
$fs"; + } + } + } $description.=< +$filestatus $category $category $files[$i]