setldv - setld subset verifier in perl
a.e.mossberg
aem at mthvax.cs.miami.edu
Thu Mar 21 06:54:38 AEST 1991
I whiped this up today to show me the changes from what setld thinks I
have loaded, and what changed I've made.
Synopsis:
setldv -i - list of what setld thinks you have loaded
setldv -i [subset...] - lists contents of subset(s)
setldv -v [subset...] - try to verify subset using checksums
-V option gives more verbose messages
---cut here---
#!/usr/local/bin/perl
# verify a setld subset inventory
# aem at mthvax.cs.miami.edu 3/20/91
#
# setldv [-i[V]] [-v[V]] [subsets...]
# -i inventory subset. If no subset listed, list installed subsets
# -v verify specified subset
# -V verbosity
do 'getopts.pl';
do Getopts('viV');
if (!$opt_v && !$opt_i)
{ print "Usage: setldv [-viV] [subset]\n"; exit 1; }
if ($opt_v && $#ARGV < 0 )
{
print "setldv: verify requires subset name. Do setldv -i for list.\n";
exit 1;
}
# subset control files are in:
$DIR="/usr/etc/subsets";
if ($opt_i && $#ARGV < 0 )
{
# read in list of .lk files from subset dir,
# print out name and description from .ctrl file
chdir $DIR;
open(IN,"ls *.lk|");
while (<IN>)
{
chop;
$file = $_;
$file =~ s/\.lk//;
if ( -f "${file}.ctrl" )
{
print "$file";
if ($opt_V)
{
open(IN2,"${file}.ctrl");
while (<IN2>)
{
if (/DESC=/)
{
($foo,$desc,$foo) = split(/'/);
print " - $desc";
}
if (/DEPS=/)
{
($foo,$desc,$foo) = split(/"/);
if ($desc ne ".") {print " - Depends on $desc.";}
}
}
}
print "\n";
}
else
{
die "$file $!";
}
}
exit 0;
}
foreach $subset (@ARGV)
{
if ( ! -f "$DIR/$subset.inv" )
{
print "setldv: sorry, subset \"$subset\" does not exist.\n";
exit 1;
}
if ($opt_V)
{
print "loading inventory for subset $subset...\n";
}
open (IN,"$DIR/$subset.inv") || die "Couldn't open $subset.inv $!";
while (<IN>)
{
( $foo, $bytes, $sum, $foo, $foo, $mode, $date, $vers, $type, $file, $linkto, $foo ) = split;
if ($opt_v)
{
push(@files,$file);
$checksum{$file} = $sum; $filetype{$file} = $type;
if ($type eq "l")
{ $link{$file} = $linkto; }
if ($type eq "s")
{ $link{$file} = $linkto; }
}
if ($opt_i)
{
$_ = $type;
if (/d/)
{
print "$file"; $dirs++;
if ($opt_V)
{ print " (directory)";}
}
if (/l/)
{
print "$file"; $links++;
if ($opt_V)
{ print " (hard link to $linkto)";}
}
if (/s/)
{
print "$file"; $syms++;
if ($opt_V)
{ print " (symbolic link to $linkto)";}
}
if (/f/)
{
print "$file"; $plain++;
if ($opt_V)
{ print " (plain file)";}
}
print "\n";
}
}
close(IN);
}
if ($opt_v)
{
chdir '/'; # all filenames relative to origin
foreach $file (@files)
{
$_ = $filetype{$file};
if (/d/)
{ # check directory
if ( -d $file )
{
if ($opt_V)
{ print "$file directory okay.\n"; }
}
else
{
print "$file (directory) missing.\n";
}
}
if (/s/)
{ # symbolic link
if ( ! -s $file )
{
print "$file (symbolic link) missing.\n";
}
}
if (/l/)
{ # hard link
if ( ! -l $file )
{
print "$file (hard link) missing.\n";
}
}
if (/f/)
{ # plain file, do the checksum thing
if ( -f $file )
{
$tmp = `sum $file`; chop $tmp;
($sum_now, $foo) = split(/ /,$tmp);
if ( $checksum{$file} == $sum_now )
{
if ($opt_V)
{ print "$file okay.\n"; }
}
else
{
print "$file checksum changed.\n";
}
}
else
{
print "$file (plain file) missing.\n";
}
}
}
}
#end of file
--
aem at mthvax.cs.miami.edu .......................................................
What does a lifetime of watching television do to your brain? - Andrew McEvoy
More information about the Comp.unix.ultrix
mailing list