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)};




-- 
fedora-list mailing list
fedora-list@redhat.com
To unsubscribe: https://www.redhat.com/mailman/listinfo/fedora-list
Guidelines: http://fedoraproject.org/wiki/Communicate/MailingListGuidelines

Reply via email to