#!/bin/bash ############################################################################################################## # # Astbackup by Kyle Yoksh, K0KN 3/3/2014, last revised 11/19/2014 # # Usage = astbackup [b]ackup [r]estore [path/filename of backup] # # NOTE: In restore mode, the backup path/filename can optionally be # provided on the command line for unprompted restore. # # A configuration file can be used to override defaults, and also # include user-defined directories to backup. The default path/filename # is /etc/asterisk/astbackup.conf # # Valid variables are (case sensitive): # # COPY_BACKUP_TO= specify a location to copy your backup to. Backups # will always be saved to /etc also. The filename will be hostname.tgz # # ETC_ASTERISK= the location of your Asterisk directory. Default is: # ETC_ASTERISK=/etc/asterisk # # POST_FIX= specify where Postfix is located. Default is: # POST_FIX=/etc/postfix # # NIC_ETH= specify your ethernet configuration file - default is: # NIC_ETH=/etc/sysconfig/network-scripts/ifcfg-eth0 # # RESOLV_CONF= specify your DNS configuration file - default is: # RESOLV_CONF=/etc/resolv.conf # # LOCAL_TIME= specify your localtime configuration file - default is: # LOCAL_TIME=/etc/localtime # # CRON_TAB= specify your crontab configuration file - default is: # CRON_TAB=/etc/crontab # # RC_LOCAL= specify where your rc.local file is located. Default is: # RC_LOCAL=/etc/rc.d/rc.local # # ETC_HOSTS= specify where your hosts file is located. Default is: # ETC_HOSTS=/etc/hosts # # USER_DIRECTORY1= specify a user directory to backup. # USER_DIRECTORY2= specify a user directory to backup. # USER_DIRECTORY3= specify a user directory to backup. # USER_DIRECTORY4= specify a user directory to backup. # USER_DIRECTORY5= specify a user directory to backup. # USER_DIRECTORY6= specify a user directory to backup. ############################################################################################################## ASTBACKUPCONF="/etc/asterisk/astbackup.conf" ASTBACKUPTEMP="/dev/shm/x.astbackup.tmp" ASTTEMP="/tmp/xastbackupx" # ---------------------- DO NOT EDIT BELOW THIS LINE --------------------------- if ! [ `whoami` = root ]; then echo "Please run this script as root or using sudo" exit fi # # Remove temp directory if exists rm -rf $ASTTEMP mkdir $ASTTEMP hostname > "$ASTBACKUPTEMP" yourhost=$(cat "$ASTBACKUPTEMP") # Exit routine function cleanup { echo echo "Removing temp files and directory" rm -rf $ASTTEMP rm -f $ASTBACKUPTEMP echo "Done." exit 0 } trap cleanup EXIT getrestorename () { echo "" echo "Enter path/filename of backup file: " read BACKUPFILELOC # if ! [ -s "$BACKUPFILELOC" ] ; then echo "File not found!" ; getrestorename else echo "Restore file is $BACKUPFILELOC" fi } # readconfig () { PATTERN="COPY_BACKUP_TO" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) COPY_BACKUP_TO=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="NIC_ETH" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) NIC_ETH=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="RESOLV_CONF" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) RESOLV_CONF=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="LOCAL_TIME" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) LOCAL_TIME=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="CRON_TAB" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) CRON_TAB=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="ETC_ASTERISK" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) ETC_ASTERISK=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="RC_LOCAL" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) RC_LOCAL=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="ETC_HOSTS" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) ETC_HOSTS=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="POST_FIX" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) POST_FIX=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="USER_DIRECTORY1" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) USER_DIRECTORY1=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="USER_DIRECTORY2" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) USER_DIRECTORY2=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="USER_DIRECTORY3" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) USER_DIRECTORY3=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="USER_DIRECTORY4" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) USER_DIRECTORY4=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="USER_DIRECTORY5" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) USER_DIRECTORY5=$(echo "${PATTERNX/$PATTERN=/}") # PATTERN="USER_DIRECTORY6" PATTERNX=$(grep -i "$PATTERN=" $ASTBACKUPCONF) USER_DIRECTORY6=$(echo "${PATTERNX/$PATTERN=/}") } # # Set defaults if not defined in config setdefaults () { if [ -z $NIC_ETH ] ; then NIC_ETH="/etc/sysconfig/network-scripts/ifcfg-eth0" fi # if [ -z $RESOLV_CONF ] ; then RESOLV_CONF="/etc/resolv.conf" fi # if [ -z $LOCAL_TIME ] ; then LOCAL_TIME="/etc/localtime" fi # if [ -z $CRON_TAB ] ; then CRON_TAB="/etc/crontab" fi # if [ -z $ETC_ASTERISK ] ; then ETC_ASTERISK="/etc/asterisk" fi # if [ -z $RC_LOCAL ] ; then RC_LOCAL="/etc/rc.d/rc.local" fi # if [ -z $ETC_HOSTS ] ; then ETC_HOSTS="/etc/hosts" fi # if [ -z $POST_FIX ] ; then POST_FIX="/etc/postfix" fi } # createbackup () { echo "" if [ -s "$LOCAL_TIME" ] ; then cd / tar -cvzf LOCAL_TIME.tgz "$LOCAL_TIME" mv -f LOCAL_TIME.tgz "$ASTTEMP" fi # if [ -s "$NIC_ETH" ] ; then cd / tar -cvzf NIC_ETH.tgz "$NIC_ETH" mv -f NIC_ETH.tgz "$ASTTEMP" fi # if [ -s "$RESOLV_CONF" ] ; then cd / tar -cvzf RESOLV_CONF.tgz "$RESOLV_CONF" mv -f RESOLV_CONF.tgz "$ASTTEMP" fi # if [ -s "$RC_LOCAL" ] ; then cd / tar -cvzf RC_LOCAL.tgz "$RC_LOCAL" mv -f RC_LOCAL.tgz "$ASTTEMP" fi # if [ -s "$ETC_HOSTS" ] ; then cd / tar -cvzf ETC_HOSTS.tgz "$ETC_HOSTS" mv -f ETC_HOSTS.tgz "$ASTTEMP" fi # if [ -s "$CRON_TAB" ] ; then cd / tar -cvzf CRON_TAB.tgz "$CRON_TAB" mv -f CRON_TAB.tgz "$ASTTEMP" fi # if [ -d "$ETC_ASTERISK" ] ; then cd / tar -cvzf ETC_ASTERISK.tgz "$ETC_ASTERISK" mv -f ETC_ASTERISK.tgz "$ASTTEMP" fi # if [ -d "$POST_FIX" ] ; then cd / tar -cvzf POST_FIX.tgz "$POST_FIX" mv -f POST_FIX.tgz "$ASTTEMP" fi # if [ -d "$USER_DIRECTORY1" ] ; then cd / tar -cvzf USER_DIR1.tgz "$USER_DIRECTORY1" mv -f USER_DIR1.tgz "$ASTTEMP" fi # if [ -d "$USER_DIRECTORY2" ] ; then cd / tar -cvzf USER_DIR2.tgz "$USER_DIRECTORY2" mv -f USER_DIR2.tgz "$ASTTEMP" fi # if [ -d "$USER_DIRECTORY3" ] ; then cd / tar -cvzf USER_DIR3.tgz "$USER_DIRECTORY3" mv -f USER_DIR3.tgz "$ASTTEMP" fi # if [ -d "$USER_DIRECTORY4" ] ; then cd / tar -cvzf USER_DIR4.tgz "$USER_DIRECTORY4" mv -f USER_DIR4.tgz "$ASTTEMP" fi # if [ -d "$USER_DIRECTORY5" ] ; then cd / tar -cvzf USER_DIR5.tgz "$USER_DIRECTORY5" mv -f USER_DIR5.tgz "$ASTTEMP" fi # if [ -d "$USER_DIRECTORY6" ] ; then cd / tar -cvzf USER_DIR6.tgz "$USER_DIRECTORY6" mv -f USER_DIR6.tgz "$ASTTEMP" fi # # Create entire backup file cd /"$ASTTEMP" tar cvzf "$yourhost".tgz * echo "Copying backup file $yourhost.tgz to /etc" cp -f "$yourhost".tgz /etc if [ -d "$COPY_BACKUP_TO" ] ; then echo "Copying backup file $yourhost.tgz to $COPY_BACKUP_TO" cp -f "$yourhost".tgz "$COPY_BACKUP_TO" fi } # restorefrombackup () { # Install packages yum -y install postfix fetchmail procmail w3m mc # if [ -f "$ASTTEMP"/ETC_ASTERISK.tgz ] ; then echo "Restoring /etc/asterisk" cp -f "$ASTTEMP"/ETC_ASTERISK.tgz / cd / tar -zxvf ETC_ASTERISK.tgz rm -f ETC_ASTERISK.tgz fi # if [ -f "$ASTTEMP"/POST_FIX.tgz ] ; then echo "Restoring /etc/postfix" cp -f "$ASTTEMP"/POST_FIX.tgz / cd / tar -zxvf POST_FIX.tgz rm -f POST_FIX.tgz fi # if [ -f "$ASTTEMP"/RC_LOCAL.tgz ] ; then echo "Restoring rc.local" cp -f "$ASTTEMP"/RC_LOCAL.tgz / cd / tar -zxvf RC_LOCAL.tgz rm -f RC_LOCAL.tgz fi # if [ -f "$ASTTEMP"/ETC_HOSTS.tgz ] ; then echo "Restoring /etc/hosts" cp -f "$ASTTEMP"/ETC_HOSTS.tgz / cd / tar -zxvf ETC_HOSTS.tgz rm -f ETC_HOSTS.tgz fi # if [ -f "$ASTTEMP"/NIC_ETH.tgz ] ; then echo "Restoring Ethernet configuration" cp -f "$ASTTEMP"/NIC_ETH.tgz / cd / tar -zxvf NIC_ETH.tgz rm -f NIC_ETH.tgz fi # if [ -f "$ASTTEMP"/RESOLV_CONF.tgz ] ; then echo "Restoring Resolv.conf" cp -f "$ASTTEMP"/RESOLV_CONF.tgz / cd / tar -zxvf RESOLV_CONF.tgz rm -f RESOLV_CONF.tgz fi # if [ -f "$ASTTEMP"/LOCAL_TIME.tgz ] ; then echo "Restoring localtime" cp -f "$ASTTEMP"/LOCAL_TIME.tgz / cd / tar -zxvf LOCAL_TIME.tgz rm -f LOCAL_TIME.tgz fi # if [ -f "$ASTTEMP"/CRON_TAB.tgz ] ; then echo "Restoring crontab" cp -f "$ASTTEMP"/CRON_TAB.tgz / cd / tar -zxvf CRON_TAB.tgz rm -f CRON_TAB.tgz fi ####### if [ -f "$ASTTEMP"/USER_DIR1.tgz ] ; then echo "Restoring User Directory 1" cp -f "$ASTTEMP"/USER_DIR1.tgz / cd / tar -zxvf USER_DIR1.tgz rm -f USER_DIR1.tgz fi # if [ -f "$ASTTEMP"/USER_DIR2.tgz ] ; then echo "Restoring User Directory 2" cp -f "$ASTTEMP"/USER_DIR2.tgz / cd / tar -zxvf USER_DIR2.tgz rm -f USER_DIR2.tgz fi # if [ -f "$ASTTEMP"/USER_DIR3.tgz ] ; then echo "Restoring User Directory 3" cp -f "$ASTTEMP"/USER_DIR3.tgz / cd / tar -zxvf USER_DIR3.tgz rm -f USER_DIR3.tgz fi # if [ -f "$ASTTEMP"/USER_DIR4.tgz ] ; then echo "Restoring User Directory 4" cp -f "$ASTTEMP"/USER_DIR4.tgz / cd / tar -zxvf USER_DIR4.tgz rm -f USER_DIR4.tgz fi # if [ -f "$ASTTEMP"/USER_DIR5.tgz ] ; then echo "Restoring User Directory 5" cp -f "$ASTTEMP"/USER_DIR5.tgz / cd / tar -zxvf USER_DIR5.tgz rm -f USER_DIR5.tgz fi # if [ -f "$ASTTEMP"/USER_DIR6.tgz ] ; then echo "Restoring User Directory 6" cp -f "$ASTTEMP"/USER_DIR6.tgz / cd / tar -zxvf USER_DIR6.tgz rm -f USER_DIR6.tgz fi } # if [ "$1" == "" ] ; then echo "" echo "No option selected" echo "" echo "Usage = astbackup [b]ackup [r]estore [path/filename of backup]" ; exit fi if [ "$1" = "b" -o "$1" = "B" ] ; then backuprestore=b fi if [ "$1" = "r" -o "$1" = "R" ] ; then backuprestore=r clear echo "" echo "Restoring system from backup." if [ -s "$2" ] ; then BACKUPFILELOC="$2" ; UNATTENDED=1 echo "" echo "Restore file is $BACKUPFILELOC" else getrestorename fi fi if [ "$backuprestore" != "b" -a "$backuprestore" != "r" ] ; then echo "" echo "Invalid option selected" echo "" echo "Usage = astbackup [b]ackup [r]estore [path/filename of backup]" ; exit fi if [ "$backuprestore" = "b" -a -s "$ASTBACKUPCONF" ] ; then clear echo "Backing up system. Using config file found in $ASTBACKUPCONF" defaultbackup=0 readconfig setdefaults createbackup fi if [ "$backuprestore" = "b" -a ! -s "$ASTBACKUPCONF" ] ; then clear echo "Backing up system. No config file found in $ASTBACKUPCONF -- only default files will be saved" defaultbackup=1 setdefaults createbackup fi if [ "$UNATTENDED" = 1 ] ; then echo "Running in unprompted restore mode" fi if [ "$backuprestore" = "r" ] ; then cp -f "$BACKUPFILELOC" "$ASTTEMP" echo "Copying backup to temp directory and untarring" cd /"$ASTTEMP" tar -zxvf "$BACKUPFILELOC" restorefrombackup fi ######### Done exit 0