--- loncom/build/Attic/parse.pl 2000/12/11 18:35:14 1.11 +++ loncom/build/Attic/parse.pl 2001/02/27 14:18:46 1.29 @@ -121,11 +121,11 @@ elsif ($mode eq "SPEC") { } elsif ($mode eq "LCMakefile") { @directories=&determine_directory_structure; - $a=&make_directory_install_segment(\@directories); + $a=&make_directory_LCMakefile_segment(\@directories); print $a; - $a=&make_files_install_segment(\@directories); + $a=&make_files_LCMakefile_segment(\@directories); print $a; - $a=&make_links_install_segment(\@directories); + $a=&make_links_LCMakefile_segment(\@directories); print $a; } elsif ($mode eq "BinaryRoot") { @@ -146,13 +146,111 @@ elsif ($mode eq "BinaryRoot") { $a=&make_file_list(\@directories); print OUT $a; close OUT; + open OUT,">setup_file_list.txt"; + print OUT "BinaryRoot/etc/passwd\n"; + close OUT; + open OUT,">BinaryRoot/etc/passwd"; + print OUT<>setup_file_list.txt"; + print OUT "BinaryRoot/etc/hosts.deny\n"; + close OUT; + open OUT,">BinaryRoot/etc/hosts.deny"; + print 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"; + close OUT; + open OUT,">BinaryRoot/etc/pam.d/passwd"; + print OUT<>setup_file_list.txt"; + print OUT "BinaryRoot/etc/pam.d/login\n"; + close OUT; + open OUT,">BinaryRoot/etc/pam.d/login"; + print OUT< LON-CAPA Software Description Page ($distribution, $date) @@ -571,7 +984,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 +
  • Software Package Description +
  • Directory Structure +
  • File Type Ownership and Permissions +
  • File and Directory Structure +
+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 @@ -587,7 +1028,10 @@ END # ------------------------------------------------- Make RPM description block sub make_rpm_description_block { - my $description=<Rolled in a RedHat 6.2 RPM, $date

@@ -608,6 +1052,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; } @@ -620,7 +1116,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

@@ -646,8 +1143,12 @@ END $maxcount=$count if $count>$maxcount; delete $diraccount{$d}; } + if ($mode eq 'status') { + $statusheader="Current Status"; + } $description.=< +$statusheader Category Permissions Development
Permissions
@@ -668,8 +1169,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 @@ -688,6 +1215,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

@@ -727,7 +1255,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

@@ -781,8 +1310,14 @@ END END } if (@files) { + if ($mode eq 'status') { + $statusheader=<Current Status +END + } $description.=< +$statusheader Type File Name Function @@ -794,6 +1329,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'}; @@ -826,8 +1362,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
$fs"; + } + } + } $description.=< +$filestatus $category $category $files[$i] 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.