--- loncom/build/Attic/parse.pl 2001/01/16 15:48:45 1.24
+++ loncom/build/Attic/parse.pl 2001/04/17 14:09:51 1.36
@@ -2,8 +2,19 @@
# Scott Harrison
# November 2000
-
-# Read in loncapa tags and metagroup tags
+# 12/5/2000,12/7,12/8,12/9,12/10,12/11,12/12,12/13,12/14,12/21 Scott Harrison
+# 1/8/2001,1/10/2001,1/13/2001,1/16/2001,1/18/2001,1/23/2001 Scott Harrison
+# 2/26/2001,2/27/2001,3/5/2001,4/10/2001,4/11,2001,4/13,2001 Scott Harrison
+# 4/17/2001 Scott Harrison
+
+# Read in loncapa tags and metagroup tags. Output various
+# useful files for viewing, compiling, monitoring, updating,
+# and installing.
+
+# This code works well. HOWEVER, I was in a rush when I
+# wrote it. Future plans are that the parsing should be
+# much more event-state based and the input should be
+# more XML-ish. -Scott
# ---------------------------------------------- Read in command line arguments
my ($file,$mode)=@ARGV;
@@ -179,6 +190,10 @@ ALL: ALL
END
close OUT;
+ `install -o 500 -g 500 -m 0700 -d BinaryRoot/home/www`;
+ open OUT,">>setup_file_list.txt";
+ print OUT "BinaryRoot/home/www\n";
+ close OUT;
`install -d BinaryRoot/etc/pam.d`;
open OUT,">>setup_file_list.txt";
print OUT "BinaryRoot/etc/pam.d/passwd\n";
@@ -211,6 +226,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") {
}
@@ -551,7 +579,9 @@ sub make_files_build_segment {
my $description;
my @allfiles=keys %{$info{'LOCATION'}{$distribution}};
my $tab="\t";
- my $sources="all: ";
+ my $sources="# Dynamic Makefile generated by LON-CAPA build process\n\n";
+ $sources.="SHELL=\"/bin/sh\"\n\n";
+ $sources.="\nall: ";
foreach my $d (@$dirs) {
# set other values
my $dirdescription=$info{'DIRECTORY'}{$distribution}{$d}{'DESCRIPTION'};
@@ -592,9 +622,25 @@ sub make_files_build_segment {
$depstat=" alwaysrun";
}
$dependencies=~s/\s+/ $sdir/gs;
+ my @deps=split(/\s+/,$dependencies);
+ shift @deps;
+ my $testing=<
+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 +1064,10 @@ END # ------------------------------------------------- Make RPM description block sub make_rpm_description_block { - my $description=<
+
+Error! A LON-CAPA-base RPM +was never installed on this system! + |
+
++Name : $rpmname +Version : $rpmversion +Vendor : $rpmvendor +Release : $rpmrelease +Build Host : $rpmbuildhost +Group : $rpmgroup +License : $rpmlicense +Summary : $rpmsummary +Description : +$rpmdescription ++ |
@@ -1039,8 +1179,12 @@ END $maxcount=$count if $count>$maxcount; delete $diraccount{$d}; } + if ($mode eq 'status') { + $statusheader="
@@ -1120,7 +1291,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=<
@@ -1174,8 +1346,14 @@ END
END
}
if (@files) {
+ if ($mode eq 'status') {
+ $statusheader=<Type
File Name
Function
@@ -1187,6 +1365,7 @@ END
my $category=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'CATEGORY'};
my $fdescription=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'DESCRIPTION'};
my $source=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'SOURCE'};
+ my $source2=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'SOURCE'};
my $note=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'NOTE'};
$note.="
" if $note;
my $listing=$info{'LOCATION'}{$distribution}{$filesfull[$i]}{'FILES'};
@@ -1219,8 +1398,80 @@ END
$source="$source";
}
}
+ my $checksum;
+ my $checksum_source;
+ my $checksum_target;
+ 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`;
+ if (-f "/$filesfull[$i]" && !(-l "/$filesfull[$i]")) {
+ $checksum_source=`md5sum ../../$source2 | cut -d ' ' -f1`;
+ chop $checksum_source;
+ $checksum_target=`md5sum /$filesfull[$i] | cut -d ' ' -f1`;
+ chop $checksum_target;
+# warn ("CS: $checksum_source, CT: $checksum_target\n");
+ unless ($checksum_source eq $checksum_target) {
+ $checksum="
CHECKSUM DIFFERENCE";
+ }
+ }
+ }
+ 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$checksum ";
+ }
+ elsif ($fs eq "$chmod$s$chown") {
+ $filestatus="runtime$checksum ";
+ }
+ elsif ($fs eq "$devchmod$s$devchown") {
+ $filestatus="development$checksum ";
+ }
+ else {
+ $filestatus="ERROR ";
+ }
+ }
+ }
$description.=<
$fs
$category
$files[$i]