#!/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; }