--- loncom/build/loncaparestoreconfigurations 2000/11/02 17:26:21 1.5 +++ loncom/build/loncaparestoreconfigurations 2001/11/27 23:23:47 1.11 @@ -2,10 +2,35 @@ # loncaparestoreconfigurations -# This tool helps in updating a system. It takes a list of -# .rpmsave files and restores them. - # 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 $ARGV[1]=~/^[\.\w]+$/; +} +elsif ($ARGV[0] eq 'lasttimestamp') { + $suffixpragma="lasttimestamp"; +} + use strict; @@ -19,38 +44,68 @@ my @generic_conf_files=( "/home/httpd/lonTabs/spare.tab", "/etc/krb.conf", "/etc/ntp.conf", + "/etc/httpd/conf/srm.conf", + "/etc/httpd/conf/httpd.conf", ); -my @perlsetvars=("lonHostID","lonRole","lonAdmEMail","lonDefDomain","lonLoadLim","lonExpire"); +my @perlsetvars=("lonHostID","lonRole","lonAdmEMail","lonDefDomain","lonLoadLim","lonExpire","lonReceipt","lonSqlAccess"); +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.rpmsave`; - `/bin/mv /etc/httpd/conf/access.conf /etc/httpd/conf/access.conf.template`; + my $lpmlnew=`/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+)/; + $template=~/\nPerlSetVar\s+$psv\s+(\S+)/; my $pval=$1; - $template=~s/(\nPerlSetVar\s+$psv\s+)\S+/$1$pval/; + $lpmlnew=~s/(\nPerlSetVar\s+$psv\s+)\S+/$1$pval/; $pvar{$psv}=$pval; } - open OUT,">/etc/httpd/conf/access.conf"; - print OUT $template; + open OUT,">/etc/httpd/conf/access.conf$suffix"; + print OUT $lpmlnew; close OUT; } if (/^\/etc\/smb.conf$/) { - my $template=`/bin/cat /etc/httpd/conf/access.conf`; + if ($suffixpragma eq 'lasttimestamp') { + $suffix=getsuffix('/etc/smb.conf'); + } + my $template=`/bin/cat /etc/smb.conf$suffix`; foreach my $psv (@perlsetvars) { $template=~s/\{\{\{\{\[(.*?)\]\}\}\}\}/$pvar{$1}/ge; } - open OUT,">/etc/smb.conf"; + open OUT,">/etc/smb.conf$suffix"; print OUT $template; close OUT; } } +exit; # Just because this is only about restoring configuration to + # new files + foreach (@generic_conf_files) { - if (-e "$_.rpmsave") { - `/bin/mv $_ $_.template`; - `/bin/mv $_.rpmsave $_`; + 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; }