File:  [LON-CAPA] / loncom / build / loncaparestoreconfigurations
Revision 1.8: download - view: text, annotated - select for diffs
Thu Dec 14 17:38:38 2000 UTC (23 years, 4 months ago) by harris41
Branches: MAIN
CVS tags: HEAD
include ability to work with timestamps and alternative suffices (.bak)

#!/usr/bin/perl

# loncaparestoreconfigurations

# Scott Harrison, 10/25/2000
# Scott Harrison, 12/14/2000

# This tool helps in updating a system.  It restores backed-up
# configuration files (.rpmsave or other backup notations).

# By default, the .rpmsave suffix is used.
# Alternatively, there can be two other invocations
# Invocation #1:
#   ARGV[0]=suffix
#   ARGV[1]=.bak
# Invocation #2:
#   ARGV[0]=lasttimestamp

# The criteria for the lasttimestamp is that the 
# file suffix is a '.' followed by a 14-digit
# time-stamp (YYYYMMDDhhmmss).
# The time-stamp with the greatest value is
# taken as the backup file.

my $suffix=".rpmsave";
my $suffixpragma="";
if ($ARGV[0] eq 'suffix') {
    $suffix=$ARGV[1] if $suffix=~/^[\.\w]+$/;
}
elsif ($ARGV[0] eq 'lasttimestamp') {
    $suffixpragma="lasttimestamp";
}


use strict;

my @special_conf_files=(
			"/etc/httpd/conf/access.conf",
			"/etc/smb.conf"
			);

my @generic_conf_files=(
			"/home/httpd/lonTabs/hosts.tab",
			"/home/httpd/lonTabs/spare.tab",
			"/etc/krb.conf",
			"/etc/ntp.conf",
			);

my @perlsetvars=("lonHostID","lonRole","lonAdmEMail","lonDefDomain","lonLoadLim","lonExpire");
my %pvar;
foreach (@special_conf_files) {
    if (/^\/etc\/httpd\/conf\/access.conf$/) {
	if ($suffixpragma eq 'lasttimestamp') {
	    $suffix=getsuffix('/etc/httpd/conf/access.conf');
	}
	my $template=`/bin/cat /etc/httpd/conf/access.conf`;
	my $rpmsave=`/bin/cat /etc/httpd/conf/access.conf$suffix`;
	`/bin/mv /etc/httpd/conf/access.conf /etc/httpd/conf/access.conf.template`;
	foreach my $psv (@perlsetvars) {
	    $rpmsave=~/\nPerlSetVar\s+$psv\s+(\S+)/;
	    my $pval=$1;
	    $template=~s/(\nPerlSetVar\s+$psv\s+)\S+/$1$pval/;
	    $pvar{$psv}=$pval;
	}
	open OUT,">/etc/httpd/conf/access.conf";
	print OUT $template;
	close OUT;
    }
    if (/^\/etc\/smb.conf$/) {
	if ($suffixpragma eq 'lasttimestamp') {
	    $suffix=getsuffix('/etc/smb.conf');
	}
	my $template=`/bin/cat /etc/smb.conf`;
	foreach my $psv (@perlsetvars) {
	    $template=~s/\{\{\{\{\[(.*?)\]\}\}\}\}/$pvar{$1}/ge;
	}
	open OUT,">/etc/smb.conf";
	print OUT $template;
	close OUT;
    }
}

foreach (@generic_conf_files) {
    my $file=$_;
    if ($suffixpragma eq 'lasttimestamp') {
	$suffix=getsuffix($file);
    }
    if (-e "$file$suffix") {
	`/bin/mv $file $_.template`;
	`/bin/cp $file$suffix $file`;
    }
}

sub getsuffix {
    my ($file)=@_;
    print "$file\n";
    my $dir=$file; $dir=~s/([^\/]+)$//;
    my $filename=$1;
    opendir(DIR,$dir);
    my @a=grep {/$filename\.\d{14}/} readdir DIR;
    closedir DIR;
    map {s/$filename\.//;} @a;
    my @b=sort {$a<=>$b} @a;
    my $suffix='.'.$b[$#b];
    return $suffix;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>