Conf File Backup Idea

John Austin ja at jaa.org.uk
Sat Aug 1 12:07:40 UTC 2009


On Sat, 2009-08-01 at 08:41 +0100, Terry Barnaby wrote:
> On 08/01/2009 04:58 AM, Tony Nelson wrote:
> > On 09-07-31 19:17:46, Thom Paine wrote:
> >> Thanks for the suggestions. I'll have a look at some of them and see
> >> if I can figure something out.
> >>
> >> I don't mind manually making lists of files as I start working with
> >> them. What really prompted this was that I have some home automation
> >> working really well on an old server I had. One power outtage that
> >> lasted longer than 30 minutes while I was away from home, two hard
> >> drives in the array went offline. I thought the whole server was lost
> >> and last night I dusted it off and rooted around in the adaptec
> >> interface and was able to force them both back online and bring the
> >> array back up. I quickly copied off my heyu files but I got to
> >> thinking if there was a way to automatically rsync files somewhere
> >> when I edit them, it would make things simpler on a server I have no
> >> need to completely back up, yet have some good info on it.
> >
> > I'm a sloppy person, so I set up an rsync-based solution derived from a
> > script I snagged through googling.  It keeps 4-hourly, daily, 4 weekly,
> > and several monthly rotating backups of the directories I list.  Let me
> > know if you want it.  Sometime I'll clean it up some more and put it on
> > my web site.
> >
> 
> Something that we do to get most of the configuration files backed up is:
> 
> # Create list of RPM config files that have changed
>  > files_rpmconfig
> rpm -qac --dump  | sed -e "/^(/d" | while read -a line
> do
> #	echo "Line: ${line[0]} ${line[3]}"
> 	if false
> 	then
> 		if [ ! -r ${line[0]} ]
> 		then
> 			echo "Unable to access file: ${line[0]}"
> 		fi
> 	fi
> 	if [ -f ${line[0]} ]
> 	then
> 		fi=(`md5sum ${line[0]}`)
> #		echo "Sum: ${fi[0]}"
> 		if [ ${fi[0]} != ${line[3]} ]
> 		then
> 			echo "${line[0]}" >> files_rpmconfig
> 		fi
> 	fi
> done
> 
> This should backup any files that are marked as configuration files in the RPM 
> packages and have changed. If you has installed tarballs etc, you will obviously
> have to add any configuration files for those manually. We normally do this
> during OS updates so we can quickly look back at configuration changes without
> having to go and get the full backup disk.
> 
> Cheers
> 
> 
> Terry
> 
Mine is a bit longer but I have found it very useful

Please triple check it suits your purpose before use !
Absolutely no warranty !

Three vital lines that do all the work are commented out below
for the -os and -or options 
#       print `$command`;######################################!!!!!!!!
The -oc option is enabled

The script started out of a list of vital files I needed to save
and restore when upgrading my server. It just grew!

Hope it helps

John
 

monk bin 215# cat maui_save_restore_compare.pl                                               
#!/usr/bin/perl -w                                                                           
#-os is used to save maui config files to a "safe" tar archive                               
#-or is used to restore maui config files from tar achive onto the same or a different machine
#-oc is used to compare existing config files on a machine with those in a maui "safe" tar archive
# The file list is that defined explicitly by a @list="..." statement or by the contents of a directory
# For the directory cases (/etc/samba, ...) the file list is dependent upon the option given           
# For -os the list is defined by the files present in that directory on the machine                    
# For -or and -oc the file set is defined by the files present in the "safe" directory 

############################################################################                       
#Must be run as root                                                                               
if (`whoami` ne "root\n"){die "I'm not root\n"};                                                   

require "getopts.pl";
&Getopts('o:');      
#print $opt_o,"\n";  

if( $opt_o  eq "" ){die "Must have single command line option -os, -or or -oc\n"};
if ( $opt_o  ne "s" &&  $opt_o  ne "r" &&  $opt_o  ne "c" ){die "Must have command line option -os, -or or -oc\n"};
############################################################################                                       
#Save the system files to directory safe                                                                           
if ( $opt_o  eq "s"){                                                                                              
        chdir;  #cd /root                                                                                          
#       print "pwd ",`pwd`;                                                                                        
        $safe="safe";                                                                                              
        if ( ! -d $safe ){ mkdir $safe;}                                                                           
        $options="-a --parents";                                                                                   
}                                                                                                                  
############################################################################                                       
#Restore the saved files from safe directory to the system - BE CAREFUL !!                                         
if ( $opt_o  eq "r"){                                                                                              
#       Must be run in directory containing directory "safe"                                                       
        if ( ! -d "safe" ){ die "No safe directory located here!\n";}                                              
        $options="-a";                                                                                             
}                                                                                                                  
############################################################################                                       
#Compare the system files with the saved files                                                                     
if ( $opt_o  eq "c"){                                                                                              
#       Must be run in directory containing directory "safe"                                                       
        if ( ! -d "safe" ){ die "No safe directory located here!\n";}                                              
}                                                                                                                  
############################################################################                                       
############################################################################                                       
sub save {                                                                                                         
my (@list) =@_;                                                                                                    
foreach $j (@list) {                                                                                               
        $command=sprintf "cp $options \"/$j\" \"$safe\"";                                                          
        print $command,"\n";                                                                                       
#       print `$command`;     ######################################!!!!!!!!                                                                                     
        }                                                                                                          
}                                                                                                                  
############################################################################                                       
sub restore {                                                                                                      
my (@list) =@_;                                                                                                    
foreach $j (@list) {                                                                                               
        if ( -e "/$j" ){                                                                                           
                $source="/$j"; $dest="/${j}_pre_restore";                                                          
#               print "source=" ,$source,"   dest= ",$dest,"\n";                                                   
                if ( ! -e "$dest" ){                                                                               
                        $command=sprintf "cp $options \"$source\" \"$dest\"";                                      
                        print $command,"\n";                                                                       
#                       print `$command`;######################################!!!!!!!!                                                                      
                        }                                                                                          
                $source="safe/$j"; $dest="/$j";                                                                    
                $command=sprintf "cp $options \"$source\" \"$dest\"";                                              
                print $command,"\n";                                                                               
#               print `$command`; ######################################!!!!!!!!                                                                                 
                }                                                                                                  
        }                                                                                                          
}                                                                                                                  
############################################################################                                       
#Compare system files with "safe" files.                                                                           
sub compare                                                                                                        
{                                                                                                                  
my (@list) =@_;                                                                                                    
foreach $j (@list) {                                                                                               
        $command=sprintf "diff \"/$j\" \"safe/$j\"";                                                               
        print $command,"\n";                                                                                       
        print `$command`;                                                                                          
        }                                                                                                          
}                                                                                                                  
############################################################################                                       
#Misc - Save and Compare Only.                                                                                     
print "---------------------------------------------------------------------------\n";                             
print "Misc - Save and Compare Only\n";                                                                            
@list=("etc/sysconfig/network-scripts/ifcfg-eth0","etc/fstab","etc/rc.d/rc.local",                                 
"usr/sbin/ssd_schedule_change.pl");                                                                                
if($opt_o eq "s"){save (@list)};                                                                                   
#                                                                                                                  
if($opt_o eq "c"){compare (@list)};                                                                                

#Authentication
print "---------------------------------------------------------------------------\n";
print "Authentication\n";                                                             
@list=("etc/passwd","etc/group","etc/shadow","etc/gshadow");                          
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#Cyrus
print "---------------------------------------------------------------------------\n";
print "Cyrus\n";                                                                      
@list=("etc/cyrus.conf","etc/imapd.conf");                                            
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#Dhcpd
print "---------------------------------------------------------------------------\n";
print "Dhcpd\n";                                                                      
@list=("etc/dhcpd.conf");                                                             
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#Exim
print "---------------------------------------------------------------------------\n";
print "Exim\n";                                                                       
@list=("etc/exim/exim.conf","etc/aliases");                                           
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#DDNS
print "---------------------------------------------------------------------------\n";
print "DDNS\n";                                                                       
@list=("var/named/chroot/var/named/jaa.org.uk.zone","var/named/chroot/var/named/148.197.29.zone",
"var/named/chroot/etc/named.conf","etc/sysconfig/named");                                        
if($opt_o eq "s"){save (@list)};                                                                 
if($opt_o eq "r"){restore (@list)};                                                              
if($opt_o eq "c"){compare (@list)};                                                              

#Static Networking
print "---------------------------------------------------------------------------\n";
print "Static Networking\n";                                                          
@list=("etc/hosts","etc/sysconfig/network","etc/nsswitch.conf","etc/resolv.conf");    
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#NFS
print "---------------------------------------------------------------------------\n";
print "NFS\n";                                                                        
@list=("etc/exports","etc/sysconfig/nfs","etc/idmapd.conf");                          
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#Automounter
print "---------------------------------------------------------------------------\n";
print "Automounter\n";                                                                
@list=("etc/auto.direct","etc/auto.home","etc/auto.master","etc/exports",             
"etc/sysconfig/autofs","etc/sysconfig/nfs");                                          
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#NIS
print "---------------------------------------------------------------------------\n";
print "NIS\n";                                                                        
@list=("var/yp/Makefile","var/yp/securenets","etc/yp.conf");                          
if($opt_o eq "s"){save (@list)};                                                      
if($opt_o eq "r"){restore (@list)};                                                   
if($opt_o eq "c"){compare (@list)};                                                   

#Apache and Squirrel Mail
print "---------------------------------------------------------------------------\n";
print "Apache and Squirrel Mail\n";
@list=("etc/httpd/conf/httpd.conf","etc/httpd/conf.d/squirrelmail.conf",
"etc/squirrelmail/config.php","usr/share/squirrelmail/src/login.php");
if($opt_o eq "s"){save (@list)};
if($opt_o eq "r"){restore (@list)};
if($opt_o eq "c"){compare (@list)};

#Samba
#Process /etc/samba directory
print "---------------------------------------------------------------------------\n";
print "Prossessing /etc/samba\n";
if($opt_o eq "s"){
        @newlist=();
        @list=`find /etc/samba -type f -print`;
        foreach $j (@list){$j=~ s#^/##;chop $j;push(@newlist,$j);};
        save (@newlist);
        }
if($opt_o eq "r" || $opt_o eq "c"){
        @newlist=();
        @list=`find safe/etc/samba -type f -print`;
        foreach $j (@list){$j=~ s#^safe/##;chop $j;push(@newlist,$j);};
        }
if($opt_o eq "r"){restore (@newlist)};
if($opt_o eq "c"){compare (@newlist)};

#Process /var/lib/samba directory
print "---------------------------------------------------------------------------\n";
print "Processing /var/lib/samba\n";
if($opt_o eq "s"){
        @newlist=();
        @list=`find /var/lib/samba -type f -print`;
        foreach $j (@list){$j=~ s#^/##;chop $j;push(@newlist,$j);};
        save (@newlist);
        }
if($opt_o eq "r" || $opt_o eq "c"){
        @newlist=();
        @list=`find safe/var/lib/samba -type f -print`;
        foreach $j (@list){$j=~ s#^safe/##;chop $j;push(@newlist,$j);};
        }
if($opt_o eq "r"){restore (@newlist)};
if($opt_o eq "c"){compare (@newlist)};







More information about the users mailing list