diff --git a/.github/workflows/Check pull request source branch.yml b/.github/workflows/Check pull request source branch.yml index 9313148..fb4b2fc 100644 --- a/.github/workflows/Check pull request source branch.yml +++ b/.github/workflows/Check pull request source branch.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Check branches run: | - if [ ${{ github.head_ref }} != "dev" ] && [ ${{ github.base_ref }} == "main" ]; then + if [ ${{ github.head_ref }} != "develop" ] && [ ${{ github.base_ref }} == "main" ]; then echo "Merge requests to main branch are only allowed from dev branch." exit 1 fi diff --git a/backupmon-1.5.7-Beta1.sh b/backupmon-1.5.7-Beta1.sh deleted file mode 100644 index 38a8d4e..0000000 --- a/backupmon-1.5.7-Beta1.sh +++ /dev/null @@ -1,5662 +0,0 @@ -#!/bin/sh - -# Original functional backup script by: @Jeffrey Young, August 9, 2023 -# BACKUPMON v1.5.7-Beta1 heavily modified and restore functionality added by @Viktor Jaep, 2023 -# -# BACKUPMON is a shell script that provides backup and restore capabilities for your Asus-Merlin firmware router's JFFS and -# external USB drive environments. By creating a network share off a NAS, server, or other device, BACKUPMON can point to -# this location, and perform a daily backup to this mounted drive. To perform daily, unattended backups, simply add a -# statement to your cron schedule, and launch backupmon.sh at any time you wish. During a situation of need to restore a -# backup after a catastrophic event with either your router or attached USB storage, simply copy the backupmon.sh & .cfg -# files over to a newly formatted /jffs/scripts folder, ensuring that your external USB storage was formatted with the same -# exact name (which is retrievable from the instructions.txt in your backup folder), and perform the restore by running the -# "backupmon.sh -restore" command, selecting the backup you want to use, and going through the prompts to complete the -# restoration of both your /jffs and external USB drive environments. -# -# Please use the 'backupmon.sh -setup' command to configure the necessary parameters that match your environment the best! - -# Variable list -- please do not change any of these -Version="1.5.7-Beta1" # Current version -Beta=0 # Beta release Y/N -CFGPATH="/jffs/addons/backupmon.d/backupmon.cfg" # Path to the backupmon config file -DLVERPATH="/jffs/addons/backupmon.d/version.txt" # Path to the backupmon version file -LOGFILE="/jffs/addons/backupmon.d/backupmon.log" # Path to the local logfile -PFEXCLUSION="/jffs/addons/backupmon.d/pfexclusion.txt" # Path to pagefile exclusion file -WDAY="$(date +%a)" # Current day # of the week -MDAY="$(date +%d)" # Current day # of the month -YDAY="$(date +%j)" # Current day # of the year -EXTDRIVE="/tmp/mnt/$(nvram get usb_path_sda1_label)" # Grabbing the default External USB Drive path -EXTLABEL="$(nvram get usb_path_sda1_label)" # Grabbing the default External USB Label name -UNCUPDATED="False" # Tracking if the UNC was updated or not -SECONDARYUNCUPDATED="False" # Tracking if the Secondary UNC was updated or not -UpdateNotify=0 # Tracking whether a new update is available -BSWITCH="False" # Tracking -backup switch to eliminate timer -USBSOURCE="FALSE" # Tracking switch -USBTARGET="FALSE" # Tracking switch -SECONDARYUSBTARGET="FALSE" # Tracking switch -TESTUSBTARGET="FALSE" # Tracking switch - -# Default Config variables -BTUSERNAME="admin" -BTPASSWORD="YWRtaW4K" -UNC="\\\\192.168.50.25\\Backups" -UNCDRIVE="/tmp/mnt/backups" -BKDIR="/router/GT-AX6000-Backup" -BACKUPMEDIA="Network" -EXCLUSION="" -BACKUPSWAP=0 -SMBVER="2.1" -SCHEDULE=0 -SCHEDULEHRS=2 -SCHEDULEMIN=30 -SCHEDULEMODE="BackupOnly" -FREQUENCY="M" -MODE="Basic" -PURGE=0 -PURGELIMIT=0 -AMTMEMAIL=0 -AMTMEMAILSUCCESS=0 -AMTMEMAILFAILURE=0 -SECONDARYSTATUS=0 -SECONDARYUSER="admin" -SECONDARYPWD="YWRtaW4K" -SECONDARYUNC="\\\\192.168.50.25\\SecondaryBackups" -SECONDARYUNCDRIVE="/tmp/mnt/secondarybackups" -SECONDARYBKDIR="/router/GT-AX6000-2ndBackup" -SECONDARYBACKUPMEDIA="Network" -SECONDARYEXCLUSION="" -SECONDARYFREQUENCY="M" -SECONDARYMODE="Basic" -SECONDARYPURGE=0 -SECONDARYPURGELIMIT=0 - -#AMTM Email Notification Variables -readonly scriptFileName="${0##*/}" -readonly scriptFileNTag="${scriptFileName%.*}" -readonly CEM_LIB_TAG="master" -readonly CEM_LIB_URL="https://raw.githubusercontent.com/Martinski4GitHub/CustomMiscUtils/${CEM_LIB_TAG}/EMail" -readonly CUSTOM_EMAIL_LIBDir="/jffs/addons/shared-libs" -readonly CUSTOM_EMAIL_LIBName="CustomEMailFunctions.lib.sh" -readonly CUSTOM_EMAIL_LIBFile="${CUSTOM_EMAIL_LIBDir}/$CUSTOM_EMAIL_LIBName" - -# Color variables -CBlack="\e[1;30m" -InvBlack="\e[1;40m" -CRed="\e[1;31m" -InvRed="\e[1;41m" -CGreen="\e[1;32m" -InvGreen="\e[1;42m" -CDkGray="\e[1;90m" -InvDkGray="\e[1;100m" -InvLtGray="\e[1;47m" -CYellow="\e[1;33m" -InvYellow="\e[1;43m" -CBlue="\e[1;34m" -InvBlue="\e[1;44m" -CMagenta="\e[1;35m" -CCyan="\e[1;36m" -InvCyan="\e[1;46m" -CWhite="\e[1;37m" -InvWhite="\e[1;107m" -CClear="\e[0m" - -#Preferred standard router binaries path -export PATH="/sbin:/bin:/usr/sbin:/usr/bin:$PATH" - -# ------------------------------------------------------------------------------------------------------------------------- -# Functions -# ------------------------------------------------------------------------------------------------------------------------- - -# LogoNM is a function that displays the BACKUPMON script name in a cool ASCII font without menu options -logoNM () { - echo -e "${CYellow} ____ ___ ________ ____ ______ __ _______ _ __" - echo -e " / __ )/ | / ____/ //_/ / / / __ \/ |/ / __ \/ | / /" - echo -e " / __ / /| |/ / / ,< / / / / /_/ / /|_/ / / / / |/ /" - echo -e " / /_/ / ___ / /___/ /| / /_/ / ____/ / / / /_/ / /| /" - echo -e " /_____/_/ |_\____/_/ |_\____/_/ /_/ /_/\____/_/ |_/ ${CGreen}v$Version${CYellow}${CClear}" -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Promptyn is a simple function that accepts y/n input -promptyn () { # No defaults, just y or n - while true; do - read -p "[y/n]? " -n 1 -r yn - case "${yn}" in - [Yy]* ) return 0 ;; - [Nn]* ) return 1 ;; - * ) echo -e "\nPlease answer y or n.";; - esac - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# blackwhite is a simple function that removes all color attributes -blackwhite () { -# Color variables -CBlack="" -InvBlack="" -CRed="" -InvRed="" -CGreen="" -InvGreen="" -CDkGray="" -InvDkGray="" -InvLtGray="" -CYellow="" -InvYellow="" -CBlue="" -InvBlue="" -CMagenta="" -CCyan="" -InvCyan="" -CWhite="" -InvWhite="" -CClear="" - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Preparebar and Progressbaroverride is a script that provides a nice progressbar to show script activity -preparebar () { - # $1 - bar length - # $2 - bar char - barlen=$1 - barspaces=$(printf "%*s" "$1") - barchars=$(printf "%*s" "$1" | tr ' ' "$2") -} - -progressbaroverride () { - - insertspc=" " - - if [ $1 -eq -1 ]; then - printf "\r $barspaces\r" - else - barch=$(($1*barlen/$2)) - barsp=$((barlen-barch)) - progr=$((100*$1/$2)) - fi - - if [ ! -z $6 ]; then AltNum=$6; else AltNum=$1; fi - - printf " ${CWhite}${InvDkGray}$AltNum${4} / ${progr}%%${CClear} ${CGreen}[ e=Exit / Selection? ${InvGreen} ${CClear}${CGreen}]\r${CClear}" "$barchars" "$barspaces" - - # Borrowed this wonderful keypress capturing mechanism from @Eibgrad... thank you! :) - key_press=''; read -rsn1 -t 1 key_press < "$(tty 0>&2)" - - if [ $key_press ]; then - case $key_press in - [Xx]) echo ""; echo ""; sleep 1; restore;; - [Ss]) (vsetup); source $CFGPATH; echo ""; sleep 1; exit 0;; - [Ee]) # Exit gracefully - echo "" - echo -e "${CClear}" - exit 0 - ;; - esac - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# updatecheck is a function that downloads the latest update version file, and compares it with what's currently installed -updatecheck () { - - # Download the latest version file from the source repository - curl --silent --retry 3 "https://raw.githubusercontent.com/ViktorJp/backupmon/master/version.txt" -o "/jffs/addons/backupmon.d/version.txt" - - if [ -f $DLVERPATH ] - then - # Read in its contents for the current version file - DLVersion=$(cat $DLVERPATH) - - # Compare the new version with the old version and log it - if [ "$Beta" == "1" ]; then # Check if Dev/Beta Mode is enabled and disable notification message - UpdateNotify=0 - elif [ "$DLVersion" != "$Version" ]; then - UpdateNotify="Update available: v$Version -> v$DLVersion" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: A new update (v$DLVersion) is available to download" >> $LOGFILE - else - UpdateNotify=0 - fi - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vlogs is a function that calls the nano text editor to view the BACKUPMON log file -vlogs () { - -export TERM=linux -nano +999999 --linenumbers $LOGFILE - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Trimlogs is a function that forces the logs down to a certain number of rows to give you some history -trimlogs () { - - CURRLOGSIZE=$(wc -l $LOGFILE | awk '{ print $1 }' ) # Determine the number of rows in the log - - if [ $CURRLOGSIZE -gt 5000 ] # If it's bigger than the max allowed, tail/trim it! - then - echo "$(tail -5000 $LOGFILE)" > $LOGFILE - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vconfig is a function that guides you through the various configuration options for backupmon -vconfig () { - - if [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - fi - - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - - if [ -z $SECONDARYPURGE ]; then SECONDARYPURGE=0; fi - - # Determine router model - if [ -z "$ROUTERMODEL" ]; then - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - fi - - # Check for the Swap File Exclusion - if [ "$BACKUPSWAP" == "0" ]; then - excludeswap - fi - - CHANGES=0 #track notification to save your changes - - while true; do - clear - logoNM - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Primary Backup Configuration Options" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} ${CClear}${CCyan}: Source Router Model : "${CGreen}$ROUTERMODEL - echo -e "${InvDkGray}${CWhite} ${CClear}${CCyan}: Source Router Firmware/Build : "${CGreen}$FWBUILD - echo -e "${InvDkGray}${CWhite} 1 ${CClear}${CCyan}: Source EXT USB Drive Mount Point : "${CGreen}$EXTDRIVE - - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CCyan}: Backup Target Media Type : "${CGreen}$BACKUPMEDIA - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CDkGray}: Backup Target Username : "${CDkGray}$BTUSERNAME - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Backup Target Password (ENC) : "${CDkGray}$BTPASSWORD - if [ "$UNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Backup Target UNC Path : "${CDkGray};printf '%s' $UNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Backup Target UNC Path : "${CDkGray}; echo $UNC | sed -e 's,\\,\\\\,g' - fi - else - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CCyan}: Backup Target Username : "${CGreen}$BTUSERNAME - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Backup Target Password (ENC) : "${CGreen}$BTPASSWORD - if [ "$UNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Backup Target UNC Path : "${CGreen};printf '%s' $UNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Backup Target UNC Path : "${CGreen}; echo $UNC | sed -e 's,\\,\\\\,g' - fi - fi - - if [ "$UNCDRIVE" == "" ] || [ -z "$UNCDRIVE" ]; then - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Backup Target Mount Point : ${CWhite}${InvRed}<-- Action Needed! ${CClear}" - else - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Backup Target Mount Point : "${CGreen}$UNCDRIVE - fi - - echo -e "${InvDkGray}${CWhite} 7 ${CClear}${CCyan}: Backup Target Directory Path : "${CGreen}$BKDIR - - echo -e "${InvDkGray}${CWhite} 8 ${CClear}${CCyan}: Backup Exclusion File Name : "${CGreen}$EXCLUSION - - echo -en "${InvDkGray}${CWhite} 9 ${CClear}${CCyan}: Backup Swap File : ${CGreen}" - if [ "$BACKUPSWAP" == "0" ]; then - printf "No"; printf "%s\n"; - elif [ "$BACKUPSWAP" == "1" ]; then - printf "Yes"; printf "%s\n";fi - - echo -e "${InvDkGray}${CWhite} 10 ${CClear}${CCyan}: Backup CIFS/SMB Version : "${CGreen}$SMBVER - - echo -en "${InvDkGray}${CWhite} 11 ${CClear}${CCyan}: Backup Frequency? : ${CGreen}" - if [ "$FREQUENCY" == "W" ]; then - printf "Weekly"; printf "%s\n"; - elif [ "$FREQUENCY" == "M" ]; then - printf "Monthly"; printf "%s\n"; - elif [ "$FREQUENCY" == "Y" ]; then - printf "Yearly"; printf "%s\n"; - elif [ "$FREQUENCY" == "P" ]; then - printf "Perpetual"; printf "%s\n"; fi - if [ "$FREQUENCY" == "P" ]; then - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge Backups? : ${CGreen}" - if [ "$PURGE" == "0" ]; then - printf "No"; printf "%s\n"; - elif [ "$PURGE" == "1" ]; then - printf "Yes"; printf "%s\n";fi - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge older than (days): : ${CGreen}" - if [ "$PURGELIMIT" == "0" ]; then - printf "N/A"; printf "%s\n"; - else - printf $PURGELIMIT; printf "%s\n"; - fi - else - echo -e "${InvDkGray}${CWhite} |--${CClear}${CDkGray}- Purge Backups? : ${CDkGray}No" - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- Purge older than (days): : ${CDkGray}N/A" - fi - - echo -e "${InvDkGray}${CWhite} 12 ${CClear}${CCyan}: Backup/Restore Mode : "${CGreen}$MODE - - echo -en "${InvDkGray}${CWhite} 13 ${CClear}${CCyan}: Schedule Backups? : ${CGreen}" - if [ "$SCHEDULE" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - if [ "$SCHEDULE" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Time: : ${CGreen}$SCHEDULEHRS:$SCHEDULEMIN" - else - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- Time: : ${CDkGray}$SCHEDULEHRS:$SCHEDULEMIN" - fi - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Scheduled Backup Mode : ${CGreen}" - if [ "$SCHEDULEMODE" == "BackupOnly" ]; then - printf "Backup Only"; printf "%s\n"; - elif [ "$SCHEDULEMODE" == "BackupAutoPurge" ]; then - printf "Backup + Autopurge"; printf "%s\n"; fi - - echo -en "${InvDkGray}${CWhite} 14 ${CClear}${CCyan}: AMTM Email Notifications? : ${CGreen}" - if [ "$AMTMEMAIL" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - if [ "$AMTMEMAILSUCCESS" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- On Success? : ${CGreen}Yes" - else - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- On Success? : ${CDkGray}No" - fi - if [ "$AMTMEMAILFAILURE" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- On Failure? : ${CGreen}Yes" - else - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- On Failure? : ${CDkGray}No" - fi - - echo -en "${InvDkGray}${CWhite} 15 ${CClear}${CCyan}: Secondary Backup Config Options : "${CGreen}$SECONDARY - if [ "$SECONDARYSTATUS" != "0" ] && [ "$SECONDARYSTATUS" != "1" ]; then SECONDARYSTATUS=0; fi - if [ "$SECONDARYSTATUS" == "0" ]; then - printf "Disabled"; printf "%s\n"; - else printf "Enabled"; printf "%s\n"; fi - - echo -e "${InvDkGray}${CWhite} | ${CClear}" - if [ $CHANGES -eq 0 ]; then - echo -e "${InvDkGray}${CWhite} s ${CClear}${CCyan}: Save Config & Exit" - else - echo -e "${InvDkGray}${CWhite} s ${CClear}${CCyan}: Save Config & Exit ${CWhite}${InvRed}<-- Save your changes! ${CClear}" - fi - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit & Discard Changes" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - CHANGES=1 - printf "Selection: " - read -r ConfigSelection - - # Execute chosen selections - case "$ConfigSelection" in - - 1) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}1. Please choose the SOURCE Mount Point of your attached external USB Drive that" - echo -e "${CCyan}contains data that you want to have backed up. In most cases, whatever is" - echo -e "${CCyan}attached to your sda1 partition should be selected. Should there be only one" - echo -e "${CCyan}mount point available, it will be automatically selected." - printf "${CYellow}Recommended Mount Point = ${CClear}" - _GetDefaultUSBMountPoint_ - USBSOURCE="TRUE" - _GetMountPoint_ "Select an EXT USB Drive Mount Point: " - read -rsp $'Press any key to acknowledge...\n' -n1 key - checkusbexclusion - ;; - - 2) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}2. What is the TARGET Backup Media Type? This is the type of device that you" - echo -e "${CCyan}want your backups copied to. Please indicate whether the media is a network" - echo -e "${CCyan}device (accessible via UNC path), or a local USB device (connected to router)." - echo -e "${CCyan}PLEASE NOTE: If the USB option is chosen, there will be no need to complete" - echo -e "${CCyan}further information for the Target UNC, username or password, and will be" - echo -e "${CCyan}grayed out." - echo -e "${CYellow}(Network=1, USB=2) (Default = 1)" - echo -e "${CClear}" - while true; do - read -p 'Media Type (1/2)?: ' BACKUPMEDIA - case $BACKUPMEDIA in - [1] ) BACKUPMEDIA="Network"; break ;; - [2] ) BACKUPMEDIA="USB"; break ;; - "" ) echo -e "\nError: Please use either 1 or 2\n";; - * ) echo -e "\nError: Please use either 1 or 2\n";; - esac - done - - if [ "$BACKUPMEDIA" == "Network" ] && [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - UNCDRIVE="" - fi - - if [ "$BACKUPMEDIA" == "USB" ] && [ "$EXTDRIVE" != "$UNCDRIVE" ]; then - UNCDRIVE="" - fi - - ;; - - 3) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}3. What is the TARGET Network Backup Username?" - echo -e "${CYellow}(Default = admin)" - echo -e "${CClear}" - read -p 'Username: ' BTUSERNAME1 - if [ "$BTUSERNAME1" == "" ] || [ -z "$BTUSERNAME1" ]; then BTUSERNAME="admin"; else BTUSERNAME="$BTUSERNAME1"; fi # Using default value on enter keypress - ;; - - 4) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}4. What is the TARGET Network Backup Password?" - echo -e "${CYellow}(Default = admin)" - echo -e "${CClear}" - if [ $BTPASSWORD == "admin" ]; then - echo -e "${CGreen}Old Password (Unencoded): admin" - else - echo -en "${CGreen}Old Password (Unencoded): "; echo "$BTPASSWORD" | openssl enc -d -base64 -A - fi - echo "" - read -rp 'New Password: ' BTPASSWORD1 - if [ "$BTPASSWORD1" == "" ] || [ -z "$BTPASSWORD1" ]; then BTPASSWORD=`echo "admin" | openssl enc -base64 -A`; else BTPASSWORD=`echo $BTPASSWORD1 | openssl enc -base64 -A`; fi # Using default value on enter keypress - ;; - - 5) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}5. What is the TARGET Backup UNC Path? This is the path of a local network" - echo -e "${CCyan}backup device that has a share made available for backups to be pushed to." - echo -e "${CCyan}Please note: Use proper notation for the network path by starting with" - echo -en "${CCyan}4 backslashes "; printf "%s" "(\\\\\\\\)"; echo -en " and using 2 backslashes "; printf "%s" "(\\\\)"; echo -e " between any additional" - echo -e "${CCyan}folders. Example below:" - echo -en "${CYellow}"; printf "%s" "(Default = \\\\\\\\192.168.50.25\\\\Backups)" - echo -e "${CClear}" - read -rp 'Target Backup UNC Path: ' UNC1 - if [ "$UNC1" == "" ] || [ -z "$UNC1" ]; then UNC="\\\\\\\\192.168.50.25\\\\Backups"; else UNC="$UNC1"; fi # Using default value on enter keypress - UNCUPDATED="True" - ;; - - 6) # ----------------------------------------------------------------------------------------- - - if [ "$BACKUPMEDIA" == "Network" ]; then - echo "" - echo -e "${CCyan}6. What would you like to name the TARGET Network Backup Drive Mount Point? This" - echo -e "${CCyan}mount path will be created for you, and is the local path on your router" - echo -e "${CCyan}typically located under /tmp/mnt which provides a physical directory that is" - echo -e "${CCyan}mounted to the network backup location. Please note: Use proper notation for the" - echo -e "${CCyan}path by using single forward slashes between directories. Example below:" - echo -e "${CYellow}(Default = /tmp/mnt/backups)" - echo -e "${CClear}" - read -p 'Target Network Backup Drive Mount Point: ' UNCDRIVE1 - if [ "$UNCDRIVE1" == "" ] || [ -z "$UNCDRIVE1" ]; then UNCDRIVE="/tmp/mnt/backups"; else UNCDRIVE="$UNCDRIVE1"; fi # Using default value on enter keypress - if [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - UNCDRIVE="" - echo "" - echo -e "${CYellow} WARNING: Your TARGET Network Backup Drive Mount Point cannot be named the" - echo -e "${CYellow} same as your SOURCE External USB Drive Mount. Please choose a mount point" - echo -e "${CYellow} name that is unique for this network target.${CClear}\n" - read -rsp $'Press any key to acknowledge...\n' -n1 key - fi - - elif [ "$BACKUPMEDIA" == "USB" ]; then - echo "" - echo -e "${CCyan}6. Please choose the TARGET USB Backup Drive Mount Point assigned to your external" - echo -e "${CCyan}USB Drive where you want backups to be stored. Should there be only one drive" - echo -e "${CCyan}available, it will be automatically selected. PLEASE NOTE: It is highly recommended" - echo -e "${CCyan}not to use the same USB drive to both be a SOURCE and TARGET for backups.${CClear}" - USBTARGET="TRUE" - _GetMountPoint_ "Select a Target USB Backup Drive Mount Point: " - read -rsp $'Press any key to acknowledge...\n' -n1 key - checkusbexclusion - fi - ;; - - 7) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}7. What is the TARGET Backup Directory Path? This is the path that is created" - echo -e "${CCyan}on your network backup location in order to store and order the backups by day." - echo -e "${CCyan}Please note: Use proper notation for the path by using single forward slashes" - echo -e "${CCyan}between directories. Example below:" - echo -e "${CYellow}(Default = /router/GT-AX6000-Backup)" - echo -e "${CClear}" - read -p 'Target Backup Directory Path: ' BKDIR1 - if [ "$BKDIR1" == "" ] || [ -z "$BKDIR1" ]; then BKDIR="/router/GT-AX6000-Backup"; else BKDIR="$BKDIR1"; fi # Using default value on enter keypress - checkusbexclusion - ;; - - 8) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}8. Would you like to use a Backup Exclusion File Name? This file contains a" - echo -e "${CCyan}list of certain files that you want to exclude from the backup, such as your" - echo -e "${CCyan}swap file." - echo "" - echo -e "${CYellow}WARNING: If you do not use an Exclusion file with the necessary entries to" - echo -e "${CYellow}exlude your swap file (or others), your backup size and time it takes to" - echo -e "${CYellow}complete the backup will increase greatly. Examples of what to include in" - echo -e "${CYellow}the exlusions.txt file below entered in a simple list format:" - echo "" - echo -e "${CYellow}myswap.swp" - echo -e "${CYellow}entware/var/log/*" - echo -e "${CYellow}skynet/skynet.log" - echo "" - echo -e "${CCyan}Please note: Use proper notation for the path to this file by using single" - echo -e "${CCyan}forward slashes between directories. Example below:" - echo -e "${CYellow}(Example = /jffs/addons/backupmon.d/exclusions.txt) (Default = Leave Blank)" - echo -e "${CClear}" - read -p 'Backup Exclusion Path + File Name: ' EXCLUSION1 - if [ "$EXCLUSION1" == "" ] || [ -z "$EXCLUSION1" ]; then EXCLUSION=""; else EXCLUSION="$EXCLUSION1"; fi # Using default value on enter keypress - if [ "$BACKUPSWAP" == "0" ] && [ "$EXCLUSION" == "" ]; then EXCLUSION="$PFEXCLUSION"; fi - ;; - - 9) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}9. Would you like to back up your Swap File? This file usually ranges in the" - echo -e "${CCyan}1GB, 2GB or 4GB range. It is not a file that is required to be backed up, and" - echo -e "${CCyan}may cause issues when restoring backups. Due to the size, it will also" - echo -e "${CCyan}substantially increase backup target size and time it takes to run backups." - echo -e "${CYellow}NOTE: It is highly recommended to leave this disabled." - echo "" - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Backup Swap? (0/1): ' SWAP1 - if [ "$SWAP1" == "" ] || [ -z "$SWAP1" ]; then BACKUPSWAP=0; else BACKUPSWAP="$SWAP1"; fi # Using default value on enter keypress - - if [ "$BACKUPSWAP" == "1" ]; then - swapname=$(cat /proc/swaps | awk 'NR==2 {print $1}' | sed 's|.*/||') >/dev/null 2>&1 - sed -i -e '/'$swapname'/d' $EXCLUSION >/dev/null 2>&1 - sed -i -e '/'$swapname'/d' $SECONDARYEXCLUSION >/dev/null 2>&1 - fi - ;; - - 10) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}10. What version of the CIFS/SMB protocol would you like to use? This protocol" - echo -e "${CCyan}is used by BACKUPMON to connect to other network devices in order to transfer" - echo -e "${CCyan}files and backups from source to target. While BACKUPMON supports the latest" - echo -e "${CCyan}SMB protocol available (v3.02), you can choose older versions for backwards" - echo -e "${CCyan}compatibility purposes, for example, if the target hardware is not able to" - echo -e "${CCyan}support a more recent version." - echo -e "${CYellow}(v2.1=1, v2.0=2, v1.0=3, v3.0=4, v3.02=5) (Default = 1)" - echo -e "${CClear}" - while true; do - read -p 'CIFS/SMB Version (1/2/3/4/5)?: ' SMBVER - case $SMBVER in - [1] ) SMBVER="2.1"; break ;; - [2] ) SMBVER="2.0"; break ;; - [3] ) SMBVER="1.0"; break ;; - [4] ) SMBVER="3.0"; break ;; - [5] ) SMBVER="3.02"; break ;; - "" ) echo -e "\nError: Please use either 1, 2, 3, 4 or 5\n";; - * ) echo -e "\nError: Please use either 1, 2, 3, 4 or 5\n";; - esac - done - ;; - - - 11) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}11. What backup frequency would you like BACKUPMON to run daily backup jobs each" - echo -e "${CCyan}day? There are 4 different choices -- Weekly, Monthly, Yearly and Perpetual." - echo -e "${CCyan}Backup folders based on the week, month, year, or perpetual are created under" - echo -e "${CCyan}your network share. Explained below:" - echo "" - echo -e "${CYellow}WEEKLY:" - echo -e "${CGreen}7 different folders for each day of the week are created (ex: Mon, Tue... Sun)." - echo "" - echo -e "${CYellow}MONTHLY:" - echo -e "${CGreen}31 different folders for each day are created (ex: 01, 02, 03... 30, 31)." - echo "" - echo -e "${CYellow}YEARLY:" - echo -e "${CGreen}365 different folders are created for each day (ex: 001, 002, 003... 364, 365)." - echo "" - echo -e "${CYellow}PERPETUAL:" - echo -e "${CGreen}A unique backup folder is created each time it runs based on the date-time" - echo -e "${CGreen}(ex: 20230909-084322). NOTE: When using the Perpetual backup frequency option," - echo -e "${CGreen}you may only use BASIC mode." - echo "" - echo -e "${CYellow}(Weekly=W, Monthly=M, Yearly=Y, Perpetual=P) (Default = M)" - echo -e "${CClear}" - while true; do - read -p 'Frequency (W/M/Y/P)?: ' FREQUENCY - case $FREQUENCY in - [Ww] ) FREQUENCY="W"; PURGE=0; PURGELIMIT=0; break ;; - [Mm] ) FREQUENCY="M"; PURGE=0; PURGELIMIT=0; break ;; - [Yy] ) FREQUENCY="Y"; PURGE=0; PURGELIMIT=0; break ;; - [Pp] ) FREQUENCY="P"; MODE="Basic" break ;; - "" ) echo -e "\nError: Please use either M, W, Y or P\n";; - * ) echo -e "\nError: Please use either M, W, Y or P\n";; - esac - done - - if [ $FREQUENCY == "P" ]; then - echo "" - echo -e "${CCyan}11a. Would you like to purge perpetual backups after a certain age? This can help" - echo -e "${CCyan}trim your backups and reclaim disk space, but also gives you more flexibility on" - echo -e "${CCyan}the length of time you can keep your backups. Purging backups can be run manually" - echo -e "${CCyan}from the setup menu, and gives you the ability to see which backups will be purged" - echo -e "${CCyan}before they are deleted permanently. It will also run automatically when calling" - echo -e "${CCyan}BACKUPMON with the -backup switch. If you run 'sh backupmon.sh -backup', it will" - echo -e "${CCyan}complete a backup, and then run an auto purge based on your criteria. Running" - echo -e "${CCyan}'sh backupmon.sh' without the -backup switch will run a normal backup without an" - echo -e "${CCyan}auto purge, even if purge is enabled below." - echo "" - echo -e "${CCyan}PLEASE NOTE: If there are any backups you wish to save permanently, please move" - echo -e "${CCyan}these to a SAFE, separate folder that BACKUPMON does not interact with." - echo "" - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Purge Backups? (0/1): ' PURGE1 - if [ "$PURGE1" == "" ] || [ -z "$PURGE1" ]; then PURGE=0; else PURGE="$PURGE1"; fi # Using default value on enter keypress - - if [ "$PURGE" == "0" ]; then - PURGELIMIT=0 - elif [ "$PURGE" == "1" ]; then - - echo "" - echo -e "${CCyan}11b. How many days would you like to keep your perpetual backups? Example: 90" - echo -e "${CCyan}Note that all perpetual backups older than 90 days would be permanently deleted." - echo "" - echo -e "${CCyan}PLEASE NOTE: If there are any backups you wish to save permanently, please move" - echo -e "${CCyan}these to a SAFE, separate folder that BACKUPMON does not interact with." - echo "" - echo -e "${CYellow}(Default = 90)" - echo -e "${CClear}" - read -p 'Backup Age? (in days): ' PURGELIMIT1 - if [ "$PURGELIMIT1" == "" ] || [ -z "$PURGELIMIT1" ]; then PURGELIMIT=0; else PURGELIMIT="$PURGELIMIT1"; fi # Using default value on enter keypress - - else - PURGE=0 - PURGELIMIT=0 - fi - fi - - ;; - - 12) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}12. What mode of operation would you like BACKUPMON to run in? You have 2 different" - echo -e "${CCyan}choices -- Basic or Advanced. Choose wisely! These are the differences:" - echo "" - echo -e "${CYellow}BASIC:" - echo -e "${CGreen}- Only backs up one backup set per daily folder" - echo -e "${CGreen}- Backup file names have standard names based on jffs and USB drive label names" - echo -e "${CGreen}- Self-prunes the daily backup folders by deleting contents before backing up new set" - echo -e "${CGreen}- Will overwrite daily backups, even if multiple are made on the same day" - echo -e "${CGreen}- Restore more automated, and only required to pick which day to restore from" - echo "" - echo -e "${CYellow}ADVANCED:" - echo -e "${CGreen}- Backs up multiple daily backup sets per daily folder" - echo -e "${CGreen}- Backup file names contain extra unique date and time identifiers" - echo -e "${CGreen}- Keeps all daily backups forever, and no longer self-prunes" - echo -e "${CGreen}- Will not overwrite daily backups, even if multiple are made on the same day" - echo -e "${CGreen}- Restore more tedious, and required to type exact backup file names before restore" - echo "" - echo -e "${CYellow}NOTE: When choosing BASIC mode while using 'Perpetual Frequency', your daily backup" - echo -e "${CYellow}folders will not self-prune or overwrite, even if multiple backups are made on the" - echo -e "${CYellow}same day." - echo "" - echo -e "${CYellow}(Basic-0, Advanced=1) (Default = 0)" - echo -e "${CClear}" - while true; do - read -p 'Mode (0/1)?: ' MODE1 - case $MODE1 in - [0] ) MODE="Basic"; break ;; - [1] ) if [ $FREQUENCY == "P" ]; then MODE="Basic"; else MODE="Advanced"; fi; break ;; - "" ) echo -e "\nError: Please use either 0 or 1\n";; - * ) echo -e "\nError: Please use either 0 or 1\n";; - esac - done - ;; - - 13) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}13. Would you like BACKUPMON to automatically run at a scheduled time each day?" - echo -e "${CCyan}Please note: This will place a cru command into your 'services-start' file that" - echo -e "${CCyan}is located under your /jffs/scripts folder. Each time your router reboots, this" - echo -e "${CCyan}command will automatically be added as a CRON job to run your backup." - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Schedule BACKUPMON?: ' SCHEDULE1 - if [ "$SCHEDULE1" == "" ] || [ -z "$SCHEDULE1" ]; then SCHEDULE=0; else SCHEDULE="$SCHEDULE1"; fi # Using default value on enter keypress - - if [ "$SCHEDULE" == "0" ]; then - - if [ -f /jffs/scripts/services-start ]; then - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - fi - - elif [ "$SCHEDULE" == "1" ]; then - - echo "" - echo -e "${CCyan}12a. What time would you like BACKUPMON to automatically run each day? Please" - echo -e "${CCyan}note: You will be asked for the hours and minutes in separate prompts. Use 24hr" - echo -e "${CCyan}format for the hours. (Ex: 17 hrs / 15 min = 17:15 or 5:15pm)" - echo -e "${CYellow}(Default = 2 hrs / 30 min = 02:30 or 2:30am)" - echo -e "${CClear}" - read -p 'Schedule HOURS?: ' SCHEDULEHRS1 - if [ "$SCHEDULEHRS1" == "" ] || [ -z "$SCHEDULEHRS1" ]; then SCHEDULEHRS=2; else SCHEDULEHRS="$SCHEDULEHRS1"; fi # Using default value on enter keypress - read -p 'Schedule MINUTES?: ' SCHEDULEMIN1 - if [ "$SCHEDULEMIN1" == "" ] || [ -z "$SCHEDULEMIN1" ]; then SCHEDULEMIN=30; else SCHEDULEMIN="$SCHEDULEMIN1"; fi # Using default value on enter keypress - - if [ "$FREQUENCY" == "P" ]; then - echo "" - echo -e "${CCyan}12b. When running a scheduled job each day, would you like BACKUPMON to only run" - echo -e "${CCyan}backups, or would you like it to run backups and have it automatically purge" - echo -e "${CCyan}old backups outside your specified age range immediately following? If you don't" - echo -e "${CCyan}want to run backups with autopurge, you will be responsible for manually running" - echo -e "${CCyan}backup purges using the config menu, or manually from the file system itself." - echo -e "${CCyan}Please note: This option is only available when having the Perpetual Backup" - echo -e "${CCyan}Frequency selected." - echo -e "${CYellow}(Backups Only=1, Backups+Autopurge=2) (Default = 1)" - echo -e "${CClear}" - while true; do - read -p 'Backup/Purge Functionality (1/2)?: ' SCHEDULEMODE - case $SCHEDULEMODE in - [1] ) SCHEDULEMODE="BackupOnly"; break ;; - [2] ) SCHEDULEMODE="BackupAutoPurge"; break ;; - "" ) echo -e "\nError: Please use either 1 or 2\n";; - * ) echo -e "\nError: Please use either 1 or 2\n";; - esac - done - fi - - if [ "$SCHEDULEMODE" == "BackupOnly" ]; then - if [ -f /jffs/scripts/services-start ]; then - - if ! grep -q -F "sh /jffs/scripts/backupmon.sh" /jffs/scripts/services-start; then - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh" - else - #delete and re-add if it already exists in case there's a time change - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh" - fi - - else - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh"'"' >> /jffs/scripts/services-start - chmod 755 /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh" - fi - - echo "" - echo -e "${CGreen}[Modifiying SERVICES-START file]..." - sleep 2 - echo -e "[Modifying CRON jobs]..." - sleep 2 - - elif [ "$SCHEDULEMODE" == "BackupAutoPurge" ]; then - if [ -f /jffs/scripts/services-start ]; then - - if ! grep -q -F "sh /jffs/scripts/backupmon.sh" /jffs/scripts/services-start; then - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup" - else - #delete and re-add if it already exists in case there's a time change - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup" - fi - - else - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup"'"' >> /jffs/scripts/services-start - chmod 755 /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup" - fi - - echo "" - echo -e "${CGreen}[Modifiying SERVICES-START file]..." - sleep 2 - echo -e "[Modifying CRON jobs]..." - sleep 2 - - fi - - else - SCHEDULE=0 - SCHEDULEHRS=2 - SCHEDULEMIN=30 - fi - ;; - - 14) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}14. Would you like BACKUPMON to send you email notifications on backup success" - echo -e "${CCyan}or failure, or both? Please note: This does require that AMTM email has been" - echo -e "${CCyan}set up successfully under AMTM -> em (email settings). Once you are able to" - echo -e "${CCyan}send and receive test emails, you may utilize this functionality in BACKUPMON." - echo -e "${CCyan}Additionally, this functionality will download an AMTM email interface library" - echo -e "${CCyan}courtesy of @Martinski, and will be located under a new common library folder" - echo -e "${CCyan}called: /jffs/addons/shared-libs." - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Enable BACKUPMON Email Notifications? (0/1): ' AMTMEMAIL1 - if [ "$AMTMEMAIL1" == "" ] || [ -z "$AMTMEMAIL1" ]; then AMTMEMAIL=0; else AMTMEMAIL="$AMTMEMAIL1"; fi # Using default value on enter keypress - - if [ "$AMTMEMAIL" == "1" ]; then - - if [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - . "$CUSTOM_EMAIL_LIBFile" - - if [ -z "${CEM_LIB_VERSION:+xSETx}" ] || \ - _CheckLibraryUpdates_CEM_ "$CUSTOM_EMAIL_LIBDir" quiet - then - _DownloadCEMLibraryFile_ "update" - fi - else - _DownloadCEMLibraryFile_ "install" - fi - - echo "" - read -p 'Email on Successful Backups? (No=0, Yes=1): ' AMTMEMAILSUCCESS1 - if [ "$AMTMEMAILSUCCESS1" == "" ] || [ -z "$AMTMEMAILSUCCESS1" ]; then AMTMEMAILSUCCESS=0; else AMTMEMAILSUCCESS="$AMTMEMAILSUCCESS1"; fi # Using default value on enter keypress - echo "" - read -p 'Email on Backup Failures? (No=0, Yes=1): ' AMTMEMAILFAILURE1 - if [ "$AMTMEMAILFAILURE1" == "" ] || [ -z "$AMTMEMAILFAILURE1" ]; then AMTMEMAILFAILURE=0; else AMTMEMAILFAILURE="$AMTMEMAILFAILURE1"; fi # Using default value on enter keypress - echo "" - echo -e "Would you like to send a TEST email from BACKUPMON?" - if promptyn "(y/n): "; then - - echo "" - cemIsFormatHTML=true - cemIsVerboseMode=true ## true OR false ## - emailBodyTitle="Testing Email Notification" - emailSubject="TEST: BACKUPMON Email Notification" - tmpEMailBodyFile="/tmp/var/tmp/tmpEMailBody_${scriptFileNTag}.$$.TXT" - - { - printf "This is a TEST to check & verify if sending email notifications is working well from BACKUPMON.\n" - } > "$tmpEMailBodyFile" - - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" "$emailBodyTitle" - - echo "" - read -rsp $'Press any key to acknowledge...\n' -n1 key - - fi - - #If notifications are off, turn off AMTM Email functionality - if [ "$AMTMEMAILSUCCESS" == "0" ] && [ "$AMTMEMAILFAILURE" == "0" ]; then - AMTMEMAIL=0 - fi - - else - AMTMEMAIL=0 - AMTMEMAILSUCCESS=0 - AMTMEMAILFAILURE=0 - fi - - ;; - - 15) # ----------------------------------------------------------------------------------------- - while true; do - clear - logoNM - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Secondary Backup Configuration Options" - echo -e "${CGreen}----------------------------------------------------------------" - echo -en "${InvDkGray}${CWhite} 1 ${CClear}${CCyan}: Enabled/Disabled : ${CGreen}" - if [ "$SECONDARYSTATUS" != "0" ] && [ "$SECONDARYSTATUS" != "1" ]; then SECONDARYSTATUS=0; fi - if [ "$SECONDARYSTATUS" == "0" ]; then - printf "Disabled"; printf "%s\n"; - else printf "Enabled"; printf "%s\n"; fi - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CCyan}: Secondary Target Media Type : ${CGreen}$SECONDARYBACKUPMEDIA" - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - if [ -z "$SECONDARYUSER" ]; then SECONDARYUSER="admin"; fi - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CDkGray}: Secondary Target Username : ${CDkGray}$SECONDARYUSER" - if [ -z "$SECONDARYPWD" ]; then SECONDARYPWD="YWRtaW4K"; fi - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Secondary Target Password (ENC) : ${CDkGray}$SECONDARYPWD" - if [ -z "$SECONDARYUNC" ]; then SECONDARYUNC="\\\\192.168.50.25\\Backups"; fi - if [ "$SECONDARYUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Secondary Target UNC Path : ${CDkGray}"; printf '%s' $SECONDARYUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Secondary Target UNC Path : ${CDkGray}"; echo $SECONDARYUNC | sed -e 's,\\,\\\\,g' - fi - else - if [ -z "$SECONDARYUSER" ]; then SECONDARYUSER="admin"; fi - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CCyan}: Secondary Target Username : ${CGreen}$SECONDARYUSER" - if [ -z "$SECONDARYPWD" ]; then SECONDARYPWD="YWRtaW4K"; fi - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Secondary Target Password (ENC) : ${CGreen}$SECONDARYPWD" - if [ -z "$SECONDARYUNC" ]; then SECONDARYUNC="\\\\192.168.50.25\\Backups"; fi - if [ "$SECONDARYUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Secondary Target UNC Path : ${CGreen}"; printf '%s' $SECONDARYUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Secondary Target UNC Path : ${CGreen}"; echo $SECONDARYUNC | sed -e 's,\\,\\\\,g' - fi - fi - if [ "$SECONDARYUNCDRIVE" == "" ] || [ -z "$SECONDARYUNCDRIVE" ]; then - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Secondary Target Drive Mount Point : ${CWhite}${InvRed}<-- Action Needed! ${CClear}" - else - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Secondary Target Drive Mount Point : ${CGreen}$SECONDARYUNCDRIVE" - fi - if [ -z "$SECONDARYBKDIR" ]; then SECONDARYBKDIR="/router/GT-AX6000-Backup"; fi - echo -e "${InvDkGray}${CWhite} 7 ${CClear}${CCyan}: Secondary Target Directory Path : ${CGreen}$SECONDARYBKDIR" - echo -e "${InvDkGray}${CWhite} 8 ${CClear}${CCyan}: Exclusion File Name : ${CGreen}$SECONDARYEXCLUSION" - echo -en "${InvDkGray}${CWhite} 9 ${CClear}${CCyan}: Backup Frequency? : ${CGreen}" - if [ "$SECONDARYFREQUENCY" == "W" ]; then - printf "Weekly"; printf "%s\n"; - elif [ "$SECONDARYFREQUENCY" == "M" ]; then - printf "Monthly"; printf "%s\n"; - elif [ "$SECONDARYFREQUENCY" == "Y" ]; then - printf "Yearly"; printf "%s\n"; - elif [ "$SECONDARYFREQUENCY" == "P" ]; then - printf "Perpetual"; printf "%s\n"; - else SECONDARYFREQUENCY="M"; - printf "Monthly"; printf "%s\n"; fi - if [ "$SECONDARYFREQUENCY" == "P" ]; then - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge Secondary Backups? : ${CGreen}" - if [ "$SECONDARYPURGE" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - else - echo -en "${InvDkGray}${CWhite} |--${CClear}${CDkGray}- Purge Secondary Backups? : ${CDkGray}" - if [ "$SECONDARYPURGE" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - fi - if [ -z $SECONDARYPURGELIMIT ]; then SECONDARYPURGELIMIT=0; fi - if [ "$SECONDARYFREQUENCY" == "P" ] && [ "$SECONDARYPURGE" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge Older Than (days) : ${CGreen}$SECONDARYPURGELIMIT" - else - echo -e "${InvDkGray}${CWhite} |--${CClear}${CDkGray}- Purge Older Than (days) : ${CDkGray}$SECONDARYPURGELIMIT" - fi - if [ -z "$SECONDARYMODE" ]; then SECONDARYMODE="Basic"; fi - echo -e "${InvDkGray}${CWhite} 10 ${CClear}${CCyan}: Backup/Restore Mode : ${CGreen}$SECONDARYMODE" - echo -e "${InvDkGray}${CWhite} | ${CClear}" - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit Back to Primary Backup Config" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - printf "Selection: ${CClear}" - read -r SECONDARYINPUT - case $SECONDARYINPUT in - 1 ) echo ""; read -p 'Secondary Backup Enabled=1, Disabled=0 (0/1?): ' SECONDARYSTATUS;; - 2 ) echo ""; read -p 'Secondary Target Backup Media (Network=1, USB=2): ' SECONDARYBACKUPMEDIA; if [ "$SECONDARYBACKUPMEDIA" == "1" ]; then SECONDARYBACKUPMEDIA="Network"; SECONDARYUNCDRIVE=""; elif [ "$SECONDARYBACKUPMEDIA" == "2" ]; then SECONDARYBACKUPMEDIA="USB"; SECONDARYUNCDRIVE=""; else SECONDARYBACKUPMEDIA="Network"; fi;; - 3 ) echo ""; read -p 'Secondary Username: ' SECONDARYUSER;; - 4 ) echo ""; if [ "$SECONDARYPWD" == "admin" ]; then echo -e "Old Secondary Password (Unencoded): admin"; else echo -en "Old Secondary Password (Unencoded): "; echo $SECONDARYPWD | openssl enc -d -base64 -A; fi; echo ""; read -rp 'New Secondary Password: ' SECONDARYPWD1; if [ "$SECONDARYPWD1" == "" ] || [ -z "$SECONDARYPWD1" ]; then SECONDARYPWD=`echo "admin" | openssl enc -base64 -A`; else SECONDARYPWD=`echo $SECONDARYPWD1 | openssl enc -base64 -A`; fi;; - 5 ) echo ""; read -rp 'Secondary Target UNC (ex: \\\\192.168.50.25\\Backups ): ' SECONDARYUNC1; SECONDARYUNC="$SECONDARYUNC1"; SECONDARYUNCUPDATED="True";; - 6 ) echo ""; if [ "$SECONDARYBACKUPMEDIA" == "Network" ]; then read -p 'Secondary Target Mount Point (ex: /tmp/mnt/backups ): ' SECONDARYUNCDRIVE; elif [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then SECONDARYUSBTARGET="TRUE"; _GetMountPoint_ "Select a Secondary Target USB Backup Drive Mount Point: "; read -rsp $'Press any key to acknowledge...\n' -n1 key; fi; checkusbexclusion;; - 7 ) echo ""; read -p 'Secondary Target Dir Path (ex: /router/GT-AX6000-Backup ): ' SECONDARYBKDIR; checkusbexclusion;; - 8 ) echo ""; read -p 'Secondary Exclusion File Name (ex: /jffs/addons/backupmon.d/exclusions2.txt ): ' SECONDARYEXCLUSION; if [ "$BACKUPSWAP" == "0" ] && [ "$SECONDARYEXCLUSION" == "" ]; then SECONDARYEXCLUSION="$PFEXCLUSION"; fi;; - 9 ) echo ""; read -p 'Secondary Backup Frequency (Weekly=W, Monthly=M, Yearly=Y, Perpetual=P) (W/M/Y/P?): ' SECONDARYFREQUENCY; SECONDARYFREQUENCY=$(echo "$SECONDARYFREQUENCY" | awk '{print toupper($0)}'); SECONDARYPURGE=0; if [ "$SECONDARYFREQUENCY" == "P" ]; then SECONDARYMODE="Basic"; read -p 'Purge Secondary Backups? (Yes=1/No=0) ' SECONDARYPURGE; read -p 'Secondary Backup Purge Age? (Days/Disabled=0) ' SECONDARYPURGELIMIT; else SECONDARYPURGELIMIT=0; fi;; - 10 ) echo ""; read -p 'Secondary Backup Mode (Basic=0, Advanced=1) (0/1?): ' SECONDARYMODE; if [ "$SECONDARYMODE" == "0" ]; then SECONDARYMODE="Basic"; elif [ "$SECONDARYMODE" == "1" ]; then SECONDARYMODE="Advanced"; else SECONDARYMODE="Basic"; fi; if [ "$SECONDARYFREQUENCY" == "P" ]; then SECONDARYMODE="Basic"; fi;; - [Ee] ) break ;; - "" ) echo -e "\nError: Please use 1 - 10 or e=Exit\n";; - * ) echo -e "\nError: Please use 1 - 10 or e=Exit\n";; - esac - done - ;; - - [Ss]) # ----------------------------------------------------------------------------------------- - echo "" - if [ "$UNCUPDATED" == "False" ]; then - UNC=$(echo $UNC | sed -e 's,\\,\\\\,g') - fi - - if [ "$SECONDARYUNCUPDATED" == "False" ]; then - SECONDARYUNC=$(echo $SECONDARYUNC | sed -e 's,\\,\\\\,g') - fi - - { echo 'BTUSERNAME="'"$BTUSERNAME"'"' - echo 'BTPASSWORD="'"$BTPASSWORD"'"' - echo 'UNC="'"$UNC"'"' - echo 'UNCDRIVE="'"$UNCDRIVE"'"' - echo 'EXTDRIVE="'"$EXTDRIVE"'"' - echo 'EXTLABEL="'"$EXTLABEL"'"' - echo 'BKDIR="'"$BKDIR"'"' - echo 'BACKUPMEDIA="'"$BACKUPMEDIA"'"' - echo 'EXCLUSION="'"$EXCLUSION"'"' - echo 'BACKUPSWAP='$BACKUPSWAP - echo 'SMBVER="'"$SMBVER"'"' - echo 'SCHEDULE='$SCHEDULE - echo 'SCHEDULEHRS='$SCHEDULEHRS - echo 'SCHEDULEMIN='$SCHEDULEMIN - echo 'SCHEDULEMODE="'"$SCHEDULEMODE"'"' - echo 'FREQUENCY="'"$FREQUENCY"'"' - echo 'MODE="'"$MODE"'"' - echo 'PURGE='$PURGE - echo 'PURGELIMIT='$PURGELIMIT - echo 'AMTMEMAIL='$AMTMEMAIL - echo 'AMTMEMAILSUCCESS='$AMTMEMAILSUCCESS - echo 'AMTMEMAILFAILURE='$AMTMEMAILFAILURE - echo 'SECONDARYSTATUS='$SECONDARYSTATUS - echo 'SECONDARYUSER="'"$SECONDARYUSER"'"' - echo 'SECONDARYPWD="'"$SECONDARYPWD"'"' - echo 'SECONDARYUNC="'"$SECONDARYUNC"'"' - echo 'SECONDARYUNCDRIVE="'"$SECONDARYUNCDRIVE"'"' - echo 'SECONDARYBKDIR="'"$SECONDARYBKDIR"'"' - echo 'SECONDARYBACKUPMEDIA="'"$SECONDARYBACKUPMEDIA"'"' - echo 'SECONDARYEXCLUSION="'"$SECONDARYEXCLUSION"'"' - echo 'SECONDARYFREQUENCY="'"$SECONDARYFREQUENCY"'"' - echo 'SECONDARYMODE="'"$SECONDARYMODE"'"' - echo 'SECONDARYPURGE='$SECONDARYPURGE - echo 'SECONDARYPURGELIMIT='$SECONDARYPURGELIMIT - } > $CFGPATH - echo -e "${CGreen}Applying config changes to BACKUPMON..." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Successfully wrote a new config file" >> $LOGFILE - sleep 3 - UNCUPDATED="False" - SECONDARYUNCUPDATED="False" - UNC=$(echo -e "$UNC") - SECONDARYUNC=$(echo -e "$SECONDARYUNC") - return - ;; - - [Ee]) # ----------------------------------------------------------------------------------------- - UNCUPDATED="False" - SECONDARYUNCUPDATED="False" - return - ;; - - esac - done - - else - - # Determine router model - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - - #Create a new config file with default values to get it to a basic running state - { echo 'BTUSERNAME="admin"' - echo 'BTPASSWORD="admin"' - echo 'UNC="\\\\192.168.50.25\\Backups"' - echo 'UNCDRIVE="/tmp/mnt/backups"' - echo 'EXTDRIVE="/tmp/mnt/usbdrive"' - echo 'EXTLABEL="usbdrive"' - echo 'BKDIR="/router/GT-AX6000-Backup"' - echo 'BACKUPMEDIA="Network"' - echo 'EXCLUSION=""' - echo 'BACKUPSWAP=0' - echo 'SMBVER="2.1"' - echo 'SCHEDULE=0' - echo 'SCHEDULEHRS=2' - echo 'SCHEDULEMIN=30' - echo 'SCHEDULEMODE="BackupOnly"' - echo 'FREQUENCY="M"' - echo 'MODE="Basic"' - echo 'PURGE=0' - echo 'PURGELIMIT=0' - echo 'AMTMEMAIL=0' - echo 'AMTMEMAILSUCCESS=0' - echo 'AMTMEMAILFAILURE=0' - echo 'SECONDARYSTATUS=0' - echo 'SECONDARYUSER="admin"' - echo 'SECONDARYPWD="admin"' - echo 'SECONDARYUNC="\\\\192.168.50.25\\SecondaryBackups"' - echo 'SECONDARYUNCDRIVE="/tmp/mnt/secondarybackups"' - echo 'SECONDARYBKDIR="/router/GT-AX6000-2ndBackup"' - echo 'SECONDARYBACKUPMEDIA="Network"' - echo 'SECONDARYEXCLUSION=""' - echo 'SECONDARYFREQUENCY="M"' - echo 'SECONDARYMODE="Basic"' - echo 'SECONDARYPURGE=0' - echo 'SECONDARYPURGELIMIT=0' - } > $CFGPATH - - #Re-run backupmon -config to restart setup process - vconfig - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# testtarget is a function that allows you to play with settings to ensure your configuration works -testtarget () { - -TESTUSER="admin" -TESTPWD="admin" -TESTUNC="\\\\192.168.50.25\\Backups" -TESTUNCDRIVE="/tmp/mnt/testbackups" -TESTBKDIR="/router/test-backup" -TESTBACKUPMEDIA="Network" -TESTUNCUPDATED="False" -TESTSMBVER="2.1" - -while true; do - clear - logoNM - echo "" - echo -e "${CCyan}The Backup Target Network Connection Tester allows you to play with" - echo -e "your connection variables, such as your username/password, network UNC" - echo -e "path, target directories and local backup drive mount paths. If your" - echo -e "network target is configured correctly, this utility will write a test" - echo -e "folder out there, and copy a test file into the test folder in order" - echo -e "to validate that read/write permissions are correct." - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Backup Target Network Connection Tester" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} 1 ${CClear}${CCyan}: Test Target Media Type : ${CGreen}$TESTBACKUPMEDIA" - if [ "$TESTBACKUPMEDIA" == "Network" ]; then - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CCyan}: Test Target Username : ${CGreen}$TESTUSER" - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CCyan}: Test Target Password : ${CGreen}$TESTPWD" - if [ "$TESTUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Test Target UNC Path : ${CGreen}"; printf '%s' $TESTUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Test Target UNC Path : ${CGreen}"; echo $TESTUNC | sed -e 's,\\,\\\\,g' - fi - elif [ "$TESTBACKUPMEDIA" == "USB" ]; then - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CDkGray}: Test Target Username : ${CDkGray}$TESTUSER" - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CDkGray}: Test Target Password : ${CDkGray}$TESTPWD" - if [ "$TESTUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Test Target UNC Path : ${CDkGray}"; printf '%s' $TESTUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Test Target UNC Path : ${CDkGray}"; echo $TESTUNC | sed -e 's,\\,\\\\,g' - fi - fi - echo -e "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Test Target Backup Mount Point : ${CGreen}$TESTUNCDRIVE" - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Test Target Dir Path : ${CGreen}$TESTBKDIR" - echo -e "${InvDkGray}${CWhite} 7 ${CClear}${CCyan}: Test CIFS/SMB Version : ${CGreen}$TESTSMBVER" - echo -e "${InvDkGray}${CWhite} | ${CClear}" - echo -e "${InvDkGray}${CWhite} t ${CClear}${CCyan}: Test your Network Backup Connection" - echo -e "${InvDkGray}${CWhite} p ${CClear}${CCyan}: Import your Primary Backup Settings" - echo -e "${InvDkGray}${CWhite} s ${CClear}${CCyan}: Import your Secondary Backup Settings" - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit Back to Setup + Operations Menu" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - printf "Selection: ${CClear}" - read -r TESTINPUT - case $TESTINPUT in - 1 ) echo ""; read -p 'Test Target Media Type (ex: Network=1 / USB=2) (Choose 1 or 2): ' TESTBACKUPMEDIA; if [ "$TESTBACKUPMEDIA" == "1" ]; then TESTBACKUPMEDIA="Network"; elif [ "$TESTBACKUPMEDIA" == "2" ]; then TESTBACKUPMEDIA="USB"; else TESTBACKUPMEDIA="Network"; fi;; - 2 ) echo ""; read -p 'Test Username: ' TESTUSER;; - 3 ) echo ""; read -rp 'Test Password: ' TESTPWD;; - 4 ) echo ""; read -rp 'Test Target UNC (ex: \\\\192.168.50.25\\Backups ): ' TESTUNC1; if [ -z $TESTUNC1 ]; then TESTUNC="\\\\\\\\192.168.50.25\\\\Backups"; else TESTUNC="$TESTUNC1"; fi; TESTUNCUPDATED="True";; - 5 ) echo ""; if [ "$TESTBACKUPMEDIA" == "Network" ]; then read -p 'Test Target Backup Mount Point (ex: /tmp/mnt/testbackups ): ' TESTUNCDRIVE; elif [ "$TESTBACKUPMEDIA" == "USB" ]; then TESTUSBTARGET="TRUE"; _GetMountPoint_ "Select a Test Target USB Backup Mount Point: "; read -rsp $'Press any key to acknowledge...\n' -n1 key; fi;; - 6 ) echo ""; read -p 'Test Target Dir Path (ex: /router/test-backup ): ' TESTBKDIR;; - 7 ) echo ""; read -p 'Test CIFS/SMB Version (ex: v2.1=1 / v2.0=2 / v1.0=3 / v3.0=4 / v3.02=5) (Choose 1, 2, 3, 4 or 5): ' TESTSMBVER; if [ "$TESTSMBVER" == "1" ]; then TESTSMBVER="2.1"; elif [ "$TESTSMBVER" == "2" ]; then TESTSMBVER="2.0"; elif [ "$TESTSMBVER" == "3" ]; then TESTSMBVER="1.0"; elif [ "$TESTSMBVER" == "4" ]; then TESTSMBVER="3.0"; elif [ "$TESTSMBVER" == "5" ]; then TESTSMBVER="3.02"; else TESTSMBVER="2.1"; fi;; - [Ee] ) break ;; - [Pp] ) TESTUSER=$BTUSERNAME; TESTPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A); TESTUNC=$UNC; TESTUNCDRIVE=$UNCDRIVE; TESTBKDIR=$BKDIR; TESTBACKUPMEDIA=$BACKUPMEDIA; TESTSMBVER=$SMBVER;; - [Ss] ) TESTUSER=$SECONDARYUSER; TESTPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A); TESTUNC=$SECONDARYUNC; TESTUNCDRIVE=$SECONDARYUNCDRIVE; TESTBKDIR=$SECONDARYBKDIR; TESTBACKUPMEDIA=$SECONDARYBACKUPMEDIA; TESTSMBVER=$SMBVER;; - [Tt] ) # Connection test script - if [ "$TESTUNCUPDATED" == "True" ]; then TESTUNC=$(echo -e "$TESTUNC"); fi - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Ping target to see if it's reachable - CNT=0 - TRIES=3 - TARGETIP=$(echo $TESTUNC | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}') - if [ ! -z $TARGETIP ]; then - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - ping -q -c 1 -W 2 $TARGETIP > /dev/null 2>&1 - RC=$? - if [ $RC -eq 0 ]; then # If ping come back successful, then proceed - echo -e "${CGreen}INFO: Backup Target ($TARGETIP) reachable via PING.${CClear}" - break - else - echo -e "${CYellow}WARNING: Unable to PING Backup Target ($TARGETIP). Retrying...${CClear}" - sleep 3 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to PING backup target ($TARGETIP). Please check your configuration/permissions.${CClear}" - break - fi - fi - done - fi - - # Check to see if a local backup drive mount is available, if not, create one. - if ! [ -d $TESTUNCDRIVE ]; then - mkdir -p $TESTUNCDRIVE - chmod 777 $TESTUNCDRIVE - echo -e "${CYellow}WARNING: External test drive mount point not set. Created under: $TESTUNCDRIVE ${CClear}" - sleep 3 - else - echo -e "${CGreen}INFO: External test drive mount point exists. Found under: ${CYellow}$TESTUNCDRIVE ${CClear}" - fi - - # If everything successfully was created, proceed - if ! mount | grep $TESTUNCDRIVE > /dev/null 2>&1; then - - # Check the build to see if modprobe needs to be called - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - if [ "$TESTBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External test drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - mount -t cifs $TESTUNC $TESTUNCDRIVE -o "vers=${TESTSMBVER},username=${TESTUSER},password=${TESTPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Retrying...${CClear}" - sleep 5 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive ($TESTUNCDRIVE). Please check your configuration. Exiting.${CClear}" - FAILURE="TRUE" - break - fi - fi - done - fi - fi - - if [ "$FAILURE" == "TRUE" ]; then - read -rsp $'Press any key to acknowledge...\n' -n1 key - fi - - # If the local mount is connected to the UNC, proceed - if [ -n "`mount | grep $TESTUNCDRIVE`" ]; then - - echo -en "${CGreen}STATUS: External test drive ("; printf "%s" "${TESTUNC}"; echo -en ") mounted successfully under: ${CYellow}$TESTUNCDRIVE ${CClear}"; printf "%s\n" - - # Create the backup directories and daily directories if they do not exist yet - if ! [ -d "${TESTUNCDRIVE}${TESTBKDIR}" ]; then mkdir -p "${TESTUNCDRIVE}${TESTBKDIR}"; echo -e "${CGreen}STATUS: Test Backup Directory successfully created under: ${CYellow}$TESTBKDIR${CClear}"; fi - if ! [ -d "${TESTUNCDRIVE}${TESTBKDIR}/test" ]; then mkdir -p "${TESTUNCDRIVE}${TESTBKDIR}/test"; echo -e "${CGreen}STATUS: Daily Test Backup Subdirectory successfully created under: ${CYellow}$TESTBKDIR/test${CClear}";fi - - #include restore instructions in the backup location - { echo 'TEST FILE' - echo '' - echo 'This is a test file created to ensure you have proper read/write access to your backup directory.' - echo '' - echo 'Please delete this file and associated test directories at your convenience' - } > ${TESTUNCDRIVE}${TESTBKDIR}/Test/testfile.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}testfile.txt${CGreen} to ${CYellow}${TESTUNCDRIVE}${TESTBKDIR}/test${CClear}" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - # Unmount the locally connected mounted drive - unmounttestdrv - read -rsp $'Press any key to acknowledge...\n' -n1 key - - else - - # There's problems with mounting the drive - check paths and permissions! - echo -e "${CRed}ERROR: Failed to run Network Backup Test Script -- Drive mount failed. Please check your configuration!${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - - fi - TESTUNCUPDATED="False" - - ;; - "" ) echo -e "\nError: Please use 1 - 9 or Exit = e\n";; - * ) echo -e "\nError: Please use 1 - 9 or Exit = e\n";; - - esac - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vuninstall is a function that uninstalls and removes all traces of backupmon from your router... -vuninstall () { - clear - logoNM - echo "" - echo -e "${CYellow}Uninstall Utility${CClear}" - echo "" - echo -e "${CCyan}You are about to uninstall BACKUPMON! This action is irreversible." - echo -e "${CCyan}Do you wish to proceed?${CClear}" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CCyan}Are you sure? Please type 'y' to validate you want to proceed.${CClear}" - if promptyn "(y/n): "; then - clear - rm -f -r /jffs/addons/backupmon.d - rm -f /jffs/scripts/backupmon.sh - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - echo "" - echo -e "\n${CGreen}BACKUPMON has been uninstalled...${CClear}" - echo "" - exit 0 - else - echo "" - echo -e "\n${CGreen}Exiting Uninstall Utility...${CClear}" - sleep 1 - return - fi - else - echo "" - echo -e "\n${CGreen}Exiting Uninstall Utility...${CClear}" - sleep 1 - return - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vupdate is a function that provides a UI to check for script updates and allows you to install the latest version... -vupdate () { - updatecheck # Check for the latest version from source repository - clear - logoNM - echo "" - echo -e "${CYellow}Update Utility${CClear}" - echo "" - echo -e "${CCyan}Current Version: ${CYellow}$Version${CClear}" - echo -e "${CCyan}Updated Version: ${CYellow}$DLVersion${CClear}" - echo "" - if [ "$Version" == "$DLVersion" ] - then - echo -e "${CCyan}You are on the latest version! Would you like to download anyways?${CClear}" - echo -e "${CCyan}This will overwrite your local copy with the current build.${CClear}" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CCyan}Downloading BACKUPMON ${CYellow}v$DLVersion${CClear}" - curl --silent --retry 3 "https://raw.githubusercontent.com/ViktorJp/backupmon/master/backupmon-$DLVersion.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh" - echo "" - echo -e "${CCyan}Download successful!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Successfully downloaded and installed BACKUPMON v$DLVersion" >> $LOGFILE - echo "" - read -rsp $'Press any key to restart BACKUPMON...\n' -n1 key - exec /jffs/scripts/backupmon.sh -setup - else - echo "" - echo "" - echo -e "${CGreen}Exiting Update Utility...${CClear}" - sleep 1 - return - fi - else - echo -e "${CCyan}Score! There is a new version out there! Would you like to update?${CClear}" - if promptyn " (y/n): "; then - echo "" - echo -e "\n${CCyan}Downloading BACKUPMON ${CYellow}v$DLVersion${CClear}" - curl --silent --retry 3 "https://raw.githubusercontent.com/ViktorJp/backupmon/master/backupmon-$DLVersion.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh" - echo "" - echo -e "${CCyan}Download successful!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Successfully downloaded and installed BACKUPMON v$DLVersion" >> $LOGFILE - echo "" - read -rsp $'Press any key to restart BACKUPMON...\n' -n1 key - exec /jffs/scripts/backupmon.sh -setup - else - echo "" - echo "" - echo -e "${CGreen}Exiting Update Utility...${CClear}" - sleep 1 - return - fi - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- -# This function checks to see if the source and target are the same, that it throws up a warning to add the backup folder -# to the exclusion file - -checkusbexclusion () -{ - -if [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - BKDIREXCL=$(echo $BKDIR | sed 's/^.\{1\}//') - if grep -q $BKDIREXCL $EXCLUSION; then - echo "" - echo -e "${CGreen}SUCCESS: Primary USB Backup Folder already included in TAR Exclusion File${CCLear}" - sleep 2 - else - echo "" - echo -e "${CRed}WARNING: Primary USB Backup Folder not found in TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}Your settings indicate that your are backing up your USB drive to the same USB drive." - echo -e "While it is possible to continue with this configuration, it is not recommended, as a" - echo -e "failure of your USB drive will result in a complete loss of your backups. Also, by not" - echo -e "exluding your backup folder in your TAR exclusion file, you will be backing up your" - echo -e "backups, which will result in exponential growth of your backup files, and the time it" - echo -e "will take to run your backups. It is recommended to add your backup folder to your TAR" - echo -e "exclusion file now (assuming it is in '/mainfolder/subfolder' format)${CClear}" - echo "" - echo -e "Would you like to exclude your USB backup folder from your regular backups?" - if promptyn " (y/n): "; then - echo -e "$BKDIREXCL/*" >> $EXCLUSION - echo "" - echo -e "\n${CGreen}SUCCESS: Primary USB Backup Folder added to TAR Exclusion File${CCLear}" - sleep 2 - else - echo -e "\n\n${CRed}WARNING: Primary USB Backup Folder not added to TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}You are assuming the risk and responsibility of your USB drive possibly running out" - echo -e "of space due to exponential backup file growth, as well as the ever-increasing time" - echo -e "it will take to run backups. Please consider the risk of loss of all backups if your" - echo -e "USB drive fails. Consider adding your USB backup folder as an exclusion in your TAR" - echo -e "exclusion file to mitigate some of these risks.${CClear}" - echo "" - read -rsp $'Press any key to acknowledge you are taking ownership of this risk...\n' -n1 key - fi - fi -fi - -if [ $SECONDARYSTATUS -eq 1 ]; then - if [ "$EXTDRIVE" == "$SECONDARYUNCDRIVE" ]; then - SECONDARYBKDIREXCL=$(echo $SECONDARYBKDIR | sed 's/^.\{1\}//') - if grep -q $SECONDARYBKDIREXCL $SECONDARYEXCLUSION; then - echo "" - echo -e "${CGreen}SUCCESS: Secondary USB Backup Folder already included in TAR Exclusion File${CCLear}" - sleep 2 - else - echo "" - echo -e "${CRed}WARNING: Secondary USB Backup Folder not found in TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}Your settings indicate that your are backing up your USB drive to the same USB drive." - echo -e "While it is possible to continue with this configuration, it is not recommended, as a" - echo -e "failure of your USB drive will result in a complete loss of your backups. Also, by not" - echo -e "exluding your backup folder in your TAR exclusion file, you will be backing up your" - echo -e "backups, which will result in exponential growth of your backup files, and the time it" - echo -e "will take to run your backups. It is recommended to add your backup folder to your TAR" - echo -e "exclusion file now (assuming it is in '/mainfolder/subfolder' format)${CClear}" - echo "" - echo -e "Would you like to exclude your USB backup folder from your regular backups?" - if promptyn " (y/n): "; then - echo -e "$SECONDARYBKDIREXCL/*" >> $SECONDARYEXCLUSION - echo "" - echo -e "\n${CGreen}SUCCESS: Secondary USB Backup Folder added to TAR Exclusion File${CCLear}" - sleep 2 - else - echo -e "\n\n${CRed}WARNING: Secondary USB Backup Folder not added to TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}You are assuming the risk and responsibility of your USB drive possibly running out" - echo -e "of space due to exponential backup file growth, as well as the ever-increasing time" - echo -e "it will take to run backups. Please consider the risk of loss of all backups if your" - echo -e "USB drive fails. Consider adding your USB backup folder as an exclusion in your TAR" - echo -e "exclusion file to mitigate some of these risks.${CClear}" - echo "" - read -rsp $'Press any key to acknowledge you are taking ownership of this risk...\n' -n1 key - fi - fi - fi -fi - - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# This amazing function was borrowed from none other than @Martinski... a genius approach to filtering and deleting files/folders -# $1 = path, $2 = age, $3 = show/delete -_DeleteFileDirAfterNumberOfDays_ () -{ - local retCode=1 minNumOfDays=1 - if [ $# -eq 0 ] || [ -z "$1" ] || [ -z "$2" ] || \ - { [ ! -f "$1" ] && [ ! -d "$1" ] ; } - then - printf "\nFile or Directory [$1] is *NOT* FOUND.\n" - return 1 - fi - if ! echo "$2" | grep -qE "^[1-9][0-9]*$" || [ "$2" -lt "$minNumOfDays" ] - then - printf "\nNumber of days [$2] is *NOT* VALID.\n" - return 1 - fi - if [ "$(($(date +%s) - $(date +%s -r "$1")))" -gt "$(($2 * 86400))" ] - then - count=$((count+1)) - if [ "$3" == "show" ]; then - printf "$1\n" - elif [ "$3" == "delete" ]; then - if [ -f "$1" ] - then rmOpts="-f" - else rmOpts="-fr" - fi - printf "${CRed}Deleting $1..." - rm $rmOpts "$1" ; retCode="$?" - printf "${CGreen}OK\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Purging backup older than $2 days -> $1" >> $LOGFILE - fi - fi - return "$retCode" -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Also coming to you from @Martinski! The following functions provide a mount point picker, slightly modified for my purposes -_GetMountPointSelectionIndex_() -{ - if [ $# -eq 0 ] || [ -z "$1" ] ; then return 1 ; fi - - local theAllStr="${GRNct}all${NOct}" - local numRegExp="([1-9]|[1-9][0-9])" - local theExitStr="${GRNct}e${NOct}=Exit" - local selectStr promptStr indexNum indexList multiIndexListOK - - if [ "$1" -eq 1 ] - then selectStr="${GRNct}1${NOct}" - else selectStr="${GRNct}1${NOct}-${GRNct}${1}${NOct}" - fi - - if [ $# -lt 2 ] || [ "$2" != "-MULTIOK" ] - then - multiIndexListOK=false - promptStr="Enter selection:[${selectStr}] [${theExitStr}]?" - else - multiIndexListOK=true - promptStr="Enter selection:[${selectStr} | ${theAllStr}] [${theExitStr}]?" - fi - selectionIndex=0 multiIndex=false - - while true - do - printf "${promptStr} " ; read -r userInput - - if [ -z "$userInput" ] || \ - echo "$userInput" | grep -qE "^(e|exit|Exit)$" - then selectionIndex="NONE" ; break ; fi - - if "$multiIndexListOK" && \ - echo "$userInput" | grep -qE "^(all|All)$" - then selectionIndex="ALL" ; break ; fi - - if echo "$userInput" | grep -qE "^${numRegExp}$" && \ - [ "$userInput" -gt 0 ] && [ "$userInput" -le "$1" ] - then selectionIndex="$userInput" ; break ; fi - - if "$multiIndexListOK" && \ - echo "$userInput" | grep -qE "^${numRegExp}\-${numRegExp}[ ]*$" - then - index1st="$(echo "$userInput" | awk -F '-' '{print $1}')" - indexMax="$(echo "$userInput" | awk -F '-' '{print $2}')" - if [ "$index1st" -lt "$indexMax" ] && \ - [ "$index1st" -gt 0 ] && [ "$index1st" -le "$1" ] && \ - [ "$indexMax" -gt 0 ] && [ "$indexMax" -le "$1" ] - then - indexNum="$index1st" - indexList="$indexNum" - while [ "$indexNum" -lt "$indexMax" ] - do - indexNum="$((indexNum+1))" - indexList="${indexList},${indexNum}" - done - userInput="$indexList" - fi - fi - - if "$multiIndexListOK" && \ - echo "$userInput" | grep -qE "^${numRegExp}(,[ ]*${numRegExp}[ ]*)+$" - then - indecesOK=true - indexList="$(echo "$userInput" | sed 's/ //g' | sed 's/,/ /g')" - for theIndex in $indexList - do - if [ "$theIndex" -eq 0 ] || [ "$theIndex" -gt "$1" ] - then indecesOK=false ; break ; fi - done - "$indecesOK" && selectionIndex="$indexList" && multiIndex=true && break - fi - - printf "${REDct}INVALID selection.${NOct}\n" - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -##----------------------------------------## -## Modified by Martinski W. [2023-Nov-08] ## -##----------------------------------------## -_GetMountPointSelection_() -{ - if [ $# -eq 0 ] || [ -z "$1" ] - then printf "\n${REDct}**ERROR**${NOct}: No Parameters.\n" ; return 1 ; fi - - local mounPointCnt mounPointVar="" mounPointTmp="" - local mountPointRegExp="^/dev/sd.* /tmp/mnt/.*" - - mounPointPath="" - mounPointCnt="$(mount | grep -c "$mountPointRegExp")" - if [ "$mounPointCnt" -eq 0 ] - then - printf "\n${REDct}**ERROR**${NOct}: Mount Points for USB-attached drives are *NOT* found.\n" - return 1 - fi - if [ "$mounPointCnt" -eq 1 ] - then - mounPointPath="$(mount | grep "$mountPointRegExp" | awk -F ' ' '{print $3}')" - return 0 - fi - local retCode=0 indexType multiIndex=false selectionIndex=0 - - if [ $# -lt 2 ] || [ "$2" != "-MULTIOK" ] - then indexType="" ; else indexType="$2" ; fi - - printf "\n$1\n" - mounPointCnt=0 - while IFS="$(printf '\n')" read -r mounPointInfo - do - mounPointCnt="$((mounPointCnt + 1))" - mounPointVar="MP_${mounPointCnt}_INFO" - eval "MP_${mounPointCnt}_INFO=$(echo "$mounPointInfo" | sed 's/[(<; >)]/\\&/g')" - printf "${GRNct}%3d${NOct}. " "$mounPointCnt" - eval echo "\$${mounPointVar}" - done <> $LOGFILE - - mkdir -m 755 -p "$CUSTOM_EMAIL_LIBDir" - curl -kLSs --retry 3 --retry-delay 5 --retry-connrefused \ - "${CEM_LIB_URL}/$CUSTOM_EMAIL_LIBName" -o "$CUSTOM_EMAIL_LIBFile" - curlCode="$?" - - if [ "$curlCode" -eq 0 ] && [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - retCode=0 - chmod 755 "$CUSTOM_EMAIL_LIBFile" - . "$CUSTOM_EMAIL_LIBFile" - #printf "\nDone.\n" - else - retCode=1 - echo -e "${CRed}ERROR: Unable to download the shared library script file [$CUSTOM_EMAIL_LIBName].${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to download the shared library script file [$CUSTOM_EMAIL_LIBName]." >> $LOGFILE - fi - return "$retCode" -} - -##----------------------------------------## -## Modified by Martinski W. [2024-Feb-18] ## -##----------------------------------------## -#-----------------------------------------------------------# -# ARG1: The email name/alias to be used as "FROM_NAME" -# ARG2: The email Subject string. -# ARG3: Full path of file containing the email Body text. -# ARG4: The email Body Title string [OPTIONAL]. -#-----------------------------------------------------------# -_SendEMailNotification_() -{ - if [ -z "${amtmIsEMailConfigFileEnabled:+xSETx}" ] - then - echo -e "${CRed}ERROR: Email library script [$CUSTOM_EMAIL_LIBFile] *NOT* FOUND.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Email library script [$CUSTOM_EMAIL_LIBFile] *NOT* FOUND." >> $LOGFILE - return 1 - fi - - if [ $# -lt 3 ] || [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] - then - echo -e "${CRed}ERROR: INSUFFICIENT email parameters${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: INSUFFICIENT email parameters." >> $LOGFILE - return 1 - fi - local retCode emailBodyTitleStr="" - - [ $# -gt 3 ] && [ -n "$4" ] && emailBodyTitleStr="$4" - - FROM_NAME="$1" - _SendEMailNotification_CEM_ "$2" "-F=$3" "$emailBodyTitleStr" - retCode="$?" - - if [ "$retCode" -eq 0 ] - then - echo -e "${CGreen}STATUS: Email notification was sent successfully [$2].${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Email notification was sent successfully [$2]." >> $LOGFILE - - else - echo -e "${CRed}ERROR: Failure to send email notification [Error Code: $retCode][$2].${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Failure to send email notification [$2]." >> $LOGFILE - fi - - return "$retCode" -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# sendmessage is a function that sends an AMTM email based on success/failure during the backup process -# $1 = Success/Failure 0/1 -# $2 = Component - -sendmessage () { - -#If AMTM email functionality is disabled, return back to the function call -if [ "$AMTMEMAIL" == "0" ]; then - return -fi - - #Load, install or update the shared AMTM Email integration library - if [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - . "$CUSTOM_EMAIL_LIBFile" - - if [ -z "${CEM_LIB_VERSION:+xSETx}" ] || \ - _CheckLibraryUpdates_CEM_ "$CUSTOM_EMAIL_LIBDir" quiet - then - _DownloadCEMLibraryFile_ "update" - fi - else - _DownloadCEMLibraryFile_ "install" - fi - - cemIsFormatHTML=false - cemIsVerboseMode=false ## true OR false ## - tmpEMailBodyFile="/tmp/var/tmp/tmpEMailBody_${scriptFileNTag}.$$.TXT" - - #Pick the scenario and send email - - if [ "$2" == "Unable to mount network drive" ]; then - emailSubject="FAILURE: Unable to mount network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to mount the primary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Unable to mount secondary network drive" ]; then - emailSubject="FAILURE: Unable to mount secondary network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to mount the secondary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Unable to unmount network drive" ]; then - emailSubject="FAILURE: Unable to unmount network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to unmount the primary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Unable to unmount secondary network drive" ]; then - emailSubject="FAILURE: Unable to unmount secondary network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to unmount the secondary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Error creating JFFS tar file" ]; then - emailSubject="FAILURE: Error creating JFFS tar file" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to create/write the JFFS tar file.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "JFFS tar file integrity failure" ]; then - emailSubject="FAILURE: JFFS tar file integrity failure" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON experienced a JFFS tar file integrity issue.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Error creating EXT USB tar file" ]; then - emailSubject="FAILURE: Error creating EXT USB tar file" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to create/write the EXT USB tar file.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "EXT USB tar file integrity failure" ]; then - emailSubject="FAILURE: EXT USB tar file integrity failure" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON experienced a EXT USB tar file integrity issue.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Primary Backup completed successfully" ]; then - emailSubject="SUCCESS: Primary Backup completed successfully" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "SUCCESS: BACKUPMON completed a successful primary backup to destination: ${BACKUPMEDIA}\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Secondary Backup completed successfully" ]; then - emailSubject="SUCCESS: Secondary Backup completed successfully" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "SUCCESS: BACKUPMON completed a successful secondary backup to destination: ${BACKUPMEDIA}\n" - printf "\n" - } > "$tmpEMailBodyFile" - fi - - if [ "$1" == "0" ] && [ "$AMTMEMAILSUCCESS" == "1" ]; then - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" - fi - - if [ "$1" == "1" ] && [ "$AMTMEMAILFAILURE" == "1" ]; then - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# purgebackups is a function that allows you to see which backups will be purged before deleting them... -purgebackups () { - - if [ "$PURGE" -eq 0 ]; then - return - fi - - clear - logoNM - echo "" - echo -e "${CYellow}Purge Perpetual Backups Utility${CClear}" - echo "" - echo -e "${CCyan}You are about to purge backups! FUN! This action is irreversible and permanent." - echo -e "${CCyan}But no worries! BACKUPMON will first show you which backups are affected by the" - echo -e "${CYellow}$PURGELIMIT day${CCyan} limit you have configured." - echo "" - echo -e "${CCyan}Do you wish to proceed?${CClear}" - if promptyn "(y/n): "; then - - echo "" - echo -e "\n${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - - # Show a list of valid backups on screen - count=0 - echo -e "${CGreen}STATUS: Perpetual backup folders identified below are older than $PURGELIMIT days:${CRed}" - for FOLDER in $(ls ${UNCDRIVE}${BKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${UNCDRIVE}${BKDIR}/$FOLDER" $PURGELIMIT show - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual backup folders were identified older than $PURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual backup folders older than $PURGELIMIT days were found. Nothing to delete." >> $LOGFILE - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}" - sleep 2 - return - fi - - # Continue with deleting backups permanently - echo "" - echo -e "${CGreen}Would you like to permanently purge these backups?${CClear}" - - if promptyn "(y/n): "; then - echo -e "\n${CRed}" - for FOLDER in $(ls ${UNCDRIVE}${BKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${UNCDRIVE}${BKDIR}/$FOLDER" $PURGELIMIT delete - done - - echo "" - echo -e "${CGreen}STATUS: Perpetual backup folders older than $PURGELIMIT days deleted.${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}\n" - sleep 2 - return - - else - - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}\n" - sleep 2 - return - fi - fi - - else - echo "" - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}" - sleep 2 - return - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# autopurge is a function that allows you to purge backups throught a commandline switch... if you're daring! -autopurge () { - - if [ "$FREQUENCY" != "P" ]; then - echo -e "${CRed}ERROR: Perpetual backups are not configured. Please check your configuration. Exiting.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Perpetual backups are not configured. Please check your configuration." >> $LOGFILE - exit 1 - fi - - if [ "$PURGE" -eq 0 ]; then - return - fi - - echo "" - echo -e "${CGreen}[Auto Purge Primary Backups Commencing]..." - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - - # Continue with deleting backups permanently - count=0 - for FOLDER in $(ls ${UNCDRIVE}${BKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${UNCDRIVE}${BKDIR}/$FOLDER" $PURGELIMIT delete - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual backup folders were identified older than $PURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual backup folders older than $PURGELIMIT days were found. Nothing to delete." >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - return - - else - - echo -e "${CGreen}STATUS: Perpetual backup folders older than $PURGELIMIT days deleted.${CClear}" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - return - fi - - else - - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - return - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# purgebackups is a function that allows you to see which backups will be purged before deleting them... -purgesecondaries () { - - if [ $SECONDARYPURGE -eq 0 ]; then - return - fi - - if [ $SECONDARYSTATUS -eq 0 ]; then - return - fi - - clear - logoNM - echo "" - echo -e "${CYellow}Purge Perpetual Secondary Backups Utility${CClear}" - echo "" - echo -e "${CCyan}You are about to purge secondary backups! FUN! This action is irreversible and" - echo -e "${CCyan}permanent. But no worries! BACKUPMON will first show you which backups are affected" - echo -e "${CCyan}by the ${CYellow}$SECONDARYPURGELIMIT day${CCyan} limit you have configured." - echo "" - echo -e "${CCyan}Do you wish to proceed?${CClear}" - if promptyn "(y/n): "; then - - echo "" - echo -e "\n${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: External Secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External Secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - # Show a list of valid backups on screen - count=0 - echo -e "${CGreen}STATUS: Perpetual secondary backup folders identified below are older than $SECONDARYPURGELIMIT days:${CRed}" - for FOLDER in $(ls ${SECONDARYUNCDRIVE}${SECONDARYBKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$FOLDER" $SECONDARYPURGELIMIT show - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual secondary backup folders were identified older than $SECONDARYPURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual secondary backup folders older than $SECONDARYPURGELIMIT days were found. Nothing to delete." >> $LOGFILE - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}" - sleep 2 - return - fi - - # Continue with deleting backups permanently - echo "" - echo -e "${CGreen}Would you like to permanently purge these secondary backups?${CClear}" - - if promptyn "(y/n): "; then - echo -e "\n${CRed}" - for FOLDER in $(ls ${SECONDARYUNCDRIVE}${SECONDARYBKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$FOLDER" $SECONDARYPURGELIMIT delete - done - - echo "" - echo -e "${CGreen}STATUS: Perpetual secondary backup folders older than $SECONDARYPURGELIMIT days deleted.${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}\n" - sleep 2 - return - - else - - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}\n" - sleep 2 - return - fi - fi - - else - echo "" - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}" - sleep 2 - return - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# autopurgesecondaries is a function that allows you to purge secondary backups throught a commandline switch... if you're daring! -autopurgesecondaries () { - - if [ "$SECONDARYFREQUENCY" != "P" ]; then - echo -e "${CRed}ERROR: Perpetual secondary backups are not configured. Please check your configuration. Exiting.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Perpetual secondary backups are not configured. Please check your configuration." >> $LOGFILE - exit 1 - fi - - if [ $SECONDARYPURGE -eq 0 ]; then - return - fi - - if [ $SECONDARYSTATUS -eq 0 ]; then - return - fi - - echo "" - echo -e "${CGreen}[Auto Purge Secondary Backups Commencing]..." - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: External secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - # Continue with deleting backups permanently - count=0 - for FOLDER in $(ls ${SECONDARYUNCDRIVE}${SECONDARYBKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$FOLDER" $SECONDARYPURGELIMIT delete - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual secondary backup folders were identified older than $SECONDARYPURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual secondary backup folders older than $SECONDARYPURGELIMIT days were found. Nothing to delete." >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - return - - else - - echo -e "${CGreen}STATUS: Perpetual secondary backup folders older than $SECONDARYPURGELIMIT days deleted.${CClear}" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - return - fi - - else - - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - return - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vsetup is a function that sets up, confiures and allows you to launch backupmon on your router... -vsetup () { - - # Check for and add an alias for backupmon - if ! grep -F "sh /jffs/scripts/backupmon.sh" /jffs/configs/profile.add >/dev/null 2>/dev/null; then - echo "alias backupmon=\"sh /jffs/scripts/backupmon.sh\" # backupmon" >> /jffs/configs/profile.add - fi - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}WARNING: BACKUPMON is not configured. Proceding with 1st time setup!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: BACKUPMON is not configured. Proceding with 1st time setup!" >> $LOGFILE - sleep 3 - vconfig - fi - - #Check to see if old conflicting variable names are being used - if [ ! -z "$USERNAME" ]; then - sed -i "s/USERNAME=/BTUSERNAME=/" "/jffs/addons/backupmon.d/backupmon.cfg" - sed -i "s/PASSWORD=/BTPASSWORD=/" "/jffs/addons/backupmon.d/backupmon.cfg" - source $CFGPATH - fi - - updatecheck - - while true; do - clear - logoNM - # Check for updates - if [ "$UpdateNotify" != "0" ]; then - echo -e "${CRed} $UpdateNotify" - fi - echo "" - echo -e "${InvDkGray}${CWhite} Setup + Operations Menu ${CClear}" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Backup Operations" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} bk ${CClear}${CCyan}: Run a Manual Backup" - echo -e "${InvDkGray}${CWhite} rs ${CClear}${CCyan}: Run a Manual Restore" - if [ $PURGE == "1" ]; then - echo -e "${InvDkGray}${CWhite} pg ${CClear}${CCyan}: Purge Perpetual Primary Backups" - else - echo -e "${InvDkGray}${CWhite} pg ${CClear}${CDkGray}: Purge Perpetual Primary Backups" - fi - if [ $SECONDARYPURGE == "1" ] && [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${InvDkGray}${CWhite} ps ${CClear}${CCyan}: Purge Perpetual Secondary Backups" - else - echo -e "${InvDkGray}${CWhite} ps ${CClear}${CDkGray}: Purge Perpetual Secondary Backups" - fi - echo -e "${InvDkGray}${CWhite} ep ${CClear}${CCyan}: Edit your Primary TAR Exclusion File" - if [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${InvDkGray}${CWhite} es ${CClear}${CCyan}: Edit your Secondary TAR Exclusion File" - else - echo -e "${InvDkGray}${CWhite} es ${CClear}${CDkGray}: Edit your Secondary TAR Exclusion File" - fi - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Testing and Diagnostics" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} ts ${CClear}${CCyan}: Test your Network Backup Target" - echo -e "${InvDkGray}${CWhite} te ${CClear}${CCyan}: Test AMTM Email Communications" - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Setup + Configuration" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} sc ${CClear}${CCyan}: Setup and Configure BACKUPMON" - echo -e "${InvDkGray}${CWhite} vl ${CClear}${CCyan}: View logs" - echo -e "${InvDkGray}${CWhite} up ${CClear}${CCyan}: Check for latest updates" - echo -e "${InvDkGray}${CWhite} un ${CClear}${CCyan}: Uninstall" - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - printf "Selection: " - read -r InstallSelection - - # Execute chosen selections - case "$InstallSelection" in - - bk) - clear - #sh /jffs/scripts/backupmon.sh -backup - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - echo "" - echo -e "${CGreen}[Primary Backup Commencing]... " - echo "" - echo -e "${CCyan}Messages:${CClear}" - backup - sendmessage 0 "Primary Backup completed successfully" - secondary #Run secondary backups - if [ $SECONDARYSTATUS -eq 1 ]; then - sendmessage 0 "Secondary Backup completed successfully" - fi - ;; - - rs) - clear - #sh /jffs/scripts/backupmon.sh -restore - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - echo "" - restore - ;; - - pg) - clear - if [ $FREQUENCY == "P" ]; then - purgebackups - fi - ;; - - ps) - clear - if [ $SECONDARYFREQUENCY == "P" ]; then - purgesecondaries - fi - ;; - - sc) - clear - vconfig - ;; - - ts) - clear - testtarget - ;; - - te) - clear - logoNM - echo "" - echo -e "${CCyan}This test assumes that you have AMTM Email set up correctly. If" - echo -e "${CCyan}you still need to configure this feature, open up AMTM -> (em)" - echo -e "${CCyan}to add your email server info, credentials, ports, protocols," - echo -e "${CCyan}and other pertinent info.${CClear}" - echo "" - echo -e "Would you like to send a TEST email from BACKUPMON?" - if promptyn "(y/n): "; then - echo "" - - if [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - . "$CUSTOM_EMAIL_LIBFile" - - if [ -z "${CEM_LIB_VERSION:+xSETx}" ] || \ - _CheckLibraryUpdates_CEM_ "$CUSTOM_EMAIL_LIBDir" quiet - then - echo "" - _DownloadCEMLibraryFile_ "update" - fi - else - echo "" - _DownloadCEMLibraryFile_ "install" - fi - - cemIsFormatHTML=true - cemIsVerboseMode=true ## true OR false ## - emailBodyTitle="Testing Email Notification" - emailSubject="TEST: BACKUPMON Email Notification" - tmpEMailBodyFile="/tmp/var/tmp/tmpEMailBody_${scriptFileNTag}.$$.TXT" - - { - printf "This is a TEST to check & verify if sending email notifications is working well from BACKUPMON.\n" - } > "$tmpEMailBodyFile" - - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" "$emailBodyTitle" - - echo "" - read -rsp $'Press any key to acknowledge...\n' -n1 key - - fi - ;; - - ep) - export TERM=linux - nano +999999 --linenumbers $EXCLUSION - ;; - - es) - if [ $SECONDARYSTATUS -eq 1 ]; then - export TERM=linux - nano +999999 --linenumbers $SECONDARYEXCLUSION - fi - ;; - - vl) - echo "" - vlogs - ;; - - up) - echo "" - vupdate - ;; - - un) - echo "" - vuninstall - ;; - - [Ee]) - echo -e "${CClear}" - exit 0 - ;; - - *) - echo "" - echo -e "${CRed}Invalid choice - Please enter a valid option...${CClear}" - echo "" - sleep 2 - ;; - - esac - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# backup routine by @Jeffrey Young showing a great way to connect to an external network location to dump backups to -backup () { - - # Check to see if a leftover copy of backupmon.cfg is still sitting in /jffs/scripts and delete it - rm -f /jffs/scripts/backupmon.cfg - - # Check to see if a local backup drive mount is available, if not, create one. - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Newly created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Newly created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # Check for the Swap File Exclusion - if [ "$BACKUPSWAP" == "0" ]; then - excludeswap - fi - - # If everything successfully was created, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check the build to see if modprobe needs to be called - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - fi - - # Check to see if EXT USB is backing up to EXT USB - if [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - BKDIREXCL=$(echo $BKDIR | sed 's/^.\{1\}//') - if grep -q $BKDIREXCL $EXCLUSION; then - echo -e "${CGreen}STATUS: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place." >> $LOGFILE - else - echo -e "${CYellow}WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!" >> $LOGFILE - fi - fi - - # If the local mount is connected to the UNC, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) mounted successfully as: $UNCDRIVE ${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) mounted successfully as: $UNCDRIVE" >> $LOGFILE - else - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - fi - - # Create the backup directories and daily directories if they do not exist yet - if ! [ -d "${UNCDRIVE}${BKDIR}" ]; then - mkdir -p "${UNCDRIVE}${BKDIR}" - echo -e "${CGreen}STATUS: Backup Directory successfully created." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Backup Directory successfully created." >> $LOGFILE - fi - - # Create frequency folders by week, month, year or perpetual - if [ $FREQUENCY == "W" ]; then - if ! [ -d "${UNCDRIVE}${BKDIR}/${WDAY}" ] - then mkdir -p "${UNCDRIVE}${BKDIR}/${WDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - elif [ $FREQUENCY == "M" ]; then - if ! [ -d "${UNCDRIVE}${BKDIR}/${MDAY}" ] - then mkdir -p "${UNCDRIVE}${BKDIR}/${MDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - elif [ $FREQUENCY == "Y" ]; then - if ! [ -d "${UNCDRIVE}${BKDIR}/${YDAY}" ] - then mkdir -p "${UNCDRIVE}${BKDIR}/${YDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - elif [ $FREQUENCY == "P" ]; then - PDAY=$(date +"%Y%m%d-%H%M%S") - if ! [ -d "${UNCDRIVE}${BKDIR}/${PDAY}" ]; then - mkdir -p "${UNCDRIVE}${BKDIR}/${PDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - fi - - if [ $MODE == "Basic" ]; then - # Remove old tar files if they exist in the daily folders - if [ $FREQUENCY == "W" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar* - elif [ $FREQUENCY == "M" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar* - elif [ $FREQUENCY == "Y" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar* - elif [ $FREQUENCY == "P" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar* - fi - fi - - if [ $MODE == "Basic" ]; then - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "P" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "P" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - - elif [ $MODE == "Advanced" ]; then - - datelabel=$(date +"%Y%m%d-%H%M%S") - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - fi - - #added copies of the backupmon.sh, backupmon.cfg, exclusions list and NVRAM to backup location for easy copy/restore - cp /jffs/scripts/backupmon.sh ${UNCDRIVE}${BKDIR}/backupmon.sh - echo -e "${CGreen}STATUS: Finished copying ${CYellow}backupmon.sh${CGreen} script to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying backupmon.sh script to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - cp $CFGPATH ${UNCDRIVE}${BKDIR}/backupmon.cfg - echo -e "${CGreen}STATUS: Finished copying ${CYellow}backupmon.cfg${CGreen} file to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying backupmon.cfg file to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - - if ! [ -z $EXCLUSION ]; then - EXCLFILE=$(echo $EXCLUSION | sed 's:.*/::') - cp $EXCLUSION ${UNCDRIVE}${BKDIR}/$EXCLFILE - echo -e "${CGreen}STATUS: Finished copying ${CYellow}$EXCLFILE${CGreen} file to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying $EXCLFILE file to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - fi - - #Please note: the nvram.txt export is for reference only. This file cannot be used to restore from, just to reference from. - nvram show 2>/dev/null > ${UNCDRIVE}${BKDIR}/nvram.txt - echo -e "${CGreen}STATUS: Finished copying reference ${CYellow}nvram.txt${CGreen} extract to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying reference nvram.txt extract to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - - #include restore instructions in the backup location - { echo 'RESTORE INSTRUCTIONS' - echo '' - echo 'IMPORTANT:' - echo 'Asus Router Model:' ${ROUTERMODEL} - echo 'Firmware/Build Number:' ${FWBUILD} - echo 'EXT USB Drive Label Name:' ${EXTLABEL} - echo '' - echo 'WARNING: Do NOT attempt to restore if your Asus Router Model or Firmware/Build Numbers differ from your backups!' - echo '' - echo 'Please ensure your have performed the following before restoring your backups:' - echo '1.) Enable SSH in router UI, and connect via an SSH Terminal (like PuTTY).' - echo '2.) Run "AMTM" and format a new USB drive on your router - label it exactly the same name as before (see above)! Reboot.' - echo '3.) After reboot, SSH back in to AMTM, create your swap file (if required). This action should automatically enable JFFS.' - echo '4.) From the UI, verify JFFS scripting enabled in the router OS, if not, enable and perform another reboot.' - echo '5.) Restore the backupmon.sh & backupmon.cfg files (located under your backup folder) into your /jffs/scripts folder.' - echo '6.) Run "sh backupmon.sh -setup" and ensure that all of the settings are correct before running a restore.' - echo '7.) Run "sh backupmon.sh -restore", pick which backup you want to restore, and confirm before proceeding!' - echo '8.) After the restore finishes, perform another reboot. Everything should be restored as normal!' - } > ${UNCDRIVE}${BKDIR}/instructions.txt - echo -e "${CGreen}STATUS: Finished copying restoration ${CYellow}instructions.txt${CGreen} file to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying restoration instructions.txt file to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - # Unmount the locally connected mounted drive - unmountdrv - - else - - # There's problems with mounting the drive - check paths and permissions! - echo -e "${CRed}ERROR: Failed to run Backup Script -- Drive mount failed. Please check your configuration!${CClear}" - logger "BACKUPMON ERROR: Failed to run Backup Script -- Drive mount failed. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Failed to run Backup Script -- Drive mount failed. Please check your configuration!" >> $LOGFILE - sleep 3 - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# backup routine by @Jeffrey Young showing a great way to connect to an external network location to dump backups to -secondary () { - - if [ $SECONDARYSTATUS -eq 0 ]; then - return - fi - - # Run a secondary backup - echo "" - echo -e "${CGreen}[Secondary Backup Commencing]..." - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Check to see if a local backup drive mount is available, if not, create one. - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: Secondary external mount point not set. Newly created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: Secondary external mount point not set. Newly created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # Check for the Swap File Exclusion - if [ "$BACKUPSWAP" == "0" ]; then - excludeswap - fi - - # If everything successfully was created, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check the build to see if modprobe needs to be called - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - fi - - # Check to see if EXT USB is backing up to EXT USB - if [ "$EXTDRIVE" == "$SECONDARYUNCDRIVE" ]; then - SECONDARYBKDIREXCL=$(echo $SECONDARYBKDIR | sed 's/^.\{1\}//') - if grep -q $SECONDARYBKDIREXCL $SECONDARYEXCLUSION; then - echo -e "${CGreen}STATUS: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place." >> $LOGFILE - else - echo -e "${CYellow}WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!" >> $LOGFILE - fi - fi - - # If the local mount is connected to the UNC, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) mounted successfully as: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) mounted successfully as: $SECONDARYUNCDRIVE" >> $LOGFILE - else - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - fi - - # Create the secondary backup directories and daily directories if they do not exist yet - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" - echo -e "${CGreen}STATUS: Secondary Backup Directory successfully created." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary Backup Directory successfully created." >> $LOGFILE - fi - - # Create frequency folders by week, month, year or perpetual - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - elif [ $SECONDARYFREQUENCY == "P" ]; then - PDAY=$(date +"%Y%m%d-%H%M%S") - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - fi - - if [ $SECONDARYMODE == "Basic" ]; then - # Remove old tar files if they exist in the daily folders - if [ $SECONDARYFREQUENCY == "W" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar* - elif [ $SECONDARYFREQUENCY == "M" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar* - elif [ $SECONDARYFREQUENCY == "Y" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar* - elif [ $SECONDARYFREQUENCY == "P" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar* - fi - fi - - if [ $SECONDARYMODE == "Basic" ]; then - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "P" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting secondary backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting secondary backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "P" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - - elif [ $SECONDARYMODE == "Advanced" ]; then - - datelabel=$(date +"%Y%m%d-%H%M%S") - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting secondary backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting secondary backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - fi - - #added copies of the backupmon.sh, backupmon.cfg, exclusions list and NVRAM to backup location for easy copy/restore - cp /jffs/scripts/backupmon.sh ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/backupmon.sh - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}backupmon.sh${CGreen} script to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of backupmon.sh script to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - cp $CFGPATH ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/backupmon.cfg - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}backupmon.cfg${CGreen} file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of backupmon.cfg file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - - if ! [ -z $SECONDARYEXCLUSION ]; then - EXCLFILE=$(echo $SECONDARYEXCLUSION | sed 's:.*/::') - cp $SECONDARYEXCLUSION ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$EXCLFILE - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}$EXCLFILE${CGreen} file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of $EXCLFILE file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - fi - - #Please note: the nvram.txt export is for reference only. This file cannot be used to restore from, just to reference from. - nvram show 2>/dev/null > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/nvram.txt - echo -e "${CGreen}STATUS: Finished secondary reference copy of ${CYellow}nvram.txt${CGreen} extract to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary reference copy of nvram.txt extract to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - - #include restore instructions in the backup location - { echo 'RESTORE INSTRUCTIONS' - echo '' - echo 'IMPORTANT:' - echo 'Asus Router Model:' ${ROUTERMODEL} - echo 'Firmware/Build Number:' ${FWBUILD} - echo 'EXT USB Drive Label Name:' ${EXTLABEL} - echo '' - echo 'WARNING: Do NOT attempt to restore if your Asus Router Model or Firmware/Build Numbers differ from your backups!' - echo '' - echo 'Please ensure your have performed the following before restoring your backups:' - echo '1.) Enable SSH in router UI, and connect via an SSH Terminal (like PuTTY).' - echo '2.) Run "AMTM" and format a new USB drive on your router - label it exactly the same name as before (see above)! Reboot.' - echo '3.) After reboot, SSH back in to AMTM, create your swap file (if required). This action should automatically enable JFFS.' - echo '4.) From the UI, verify JFFS scripting enabled in the router OS, if not, enable and perform another reboot.' - echo '5.) Restore the backupmon.sh & backupmon.cfg files (located under your backup folder) into your /jffs/scripts folder.' - echo '6.) Run "sh backupmon.sh -setup" and ensure that all of the settings are correct before running a restore.' - echo '7.) Run "sh backupmon.sh -restore", pick which backup you want to restore, and confirm before proceeding!' - echo '8.) After the restore finishes, perform another reboot. Everything should be restored as normal!' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/instructions.txt - echo -e "${CGreen}STATUS: Finished secondary copy of restoration ${CYellow}instructions.txt${CGreen} file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of restoration instructions.txt file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - # Unmount the locally connected mounted drive - unmountsecondarydrv - - else - - # There's problems with mounting the drive - check paths and permissions! - echo -e "${CRed}ERROR: Failed to run Secondary Backup Script -- Drive mount failed. Please check your configuration!${CClear}" - logger "BACKUPMON ERROR: Failed to run Secondary Backup Script -- Drive mount failed. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Failed to run Secondary Backup Script -- Drive mount failed. Please check your configuration!" >> $LOGFILE - sleep 3 - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# restore function is a routine that allows you to pick a backup to be restored -restore () { - - clear - # Notify if a new version awaits - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - - # Display instructions - echo "" - echo -e "${CCyan}Normal Backup starting in 10 seconds. Press ${CGreen}[S]${CCyan}etup or ${CRed}[X]${CCyan} to override and enter ${CRed}RESTORE${CCyan} mode" - echo "" - echo -e "${CGreen}[Restore Backup Commencing]..." - echo "" - echo -e "${CGreen}Please ensure your have performed the following before restoring your backups:" - echo -e "${CGreen}1.) Enable SSH in router UI, and connect via an SSH Terminal (like PuTTY)." - echo -e "${CGreen}2.) Run 'AMTM' and format a new USB drive on your router - label it exactly the same name as before! Reboot." - echo -e "${CYellow} (please refer to your restore instruction.txt file to find your original EXT USB drive label)" - echo -e "${CGreen}3.) After reboot, SSH back in to AMTM, create your swap file (if required). This action should automatically enable JFFS." - echo -e "${CGreen}4.) From the UI, verify JFFS scripting enabled in the router OS, if not, enable and perform another reboot." - echo -e "${CGreen}5.) Restore the backupmon.sh & backupmon.cfg files (located under your backup folder) into your /jffs/scripts folder." - echo -e "${CGreen}6.) Run 'sh backupmon.sh -setup' and ensure that all of the settings are correct before running a restore." - echo -e "${CGreen}7.) Run 'sh backupmon.sh -restore', pick which backup you want to restore, and confirm before proceeding!" - echo -e "${CGreen}8.) After the restore finishes, perform another reboot. Everything should be restored as normal!" - echo "" - if [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${CYellow}Please choose whether you would like to restore from primary or secondary backups? (Primary=P, Secondary=S)" - while true; do - read -p 'Restoration Source (P/S)?: ' RESTOREFROM - case $RESTOREFROM in - [Pp] ) SOURCE="Primary"; echo ""; echo -e "${CGreen}[Primary Backup Source Selected]"; echo ""; break ;; - [Ss] ) SOURCE="Secondary"; echo ""; echo -e "${CGreen}[Secondary Backup Source Selected]"; echo ""; break ;; - "" ) echo -e "\nError: Please use either P or S.\n";; - * ) echo -e "\nError: Please use either P or S.\n";; - esac - done - else - SOURCE="Primary" - fi - - echo -e "${CCyan}Messages:${CClear}" - - if [ "$SOURCE" == "Primary" ]; then - - # Create the local backup drive mount directory - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - - # Show a list of valid backups on screen - echo -e "${CGreen}Available Backup Selections:${CClear}" - ls -ld ${UNCDRIVE}${BKDIR}/*/ - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - - if promptyn "(y/n): "; then - - while true; do - echo "" - echo -e "${CGreen}" - ok=0 - while [ $ok = 0 ] - do - if [ $FREQUENCY == "W" ]; then - echo -e "${CGreen}Enter the Day of the backup you wish to restore? (ex: Mon or Fri) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "M" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 02 or 27) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 2 ] || [ ${#BACKUPDATE1} -lt 2 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 2 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "Y" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 002 or 270) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "P" ]; then - echo -e "${CGreen}Enter the exact folder name of the backup you wish to restore? (ex: 20230909-083422) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 15 ] || [ ${#BACKUPDATE1} -lt 15 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 15 characters for the folder name format"; echo "" - else - ok=1 - fi - fi - done - - if [ -z "$BACKUPDATE1" ]; then - echo "" - echo -e "${CRed}ERROR: Invalid backup set chosen. Exiting script...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Invalid backup set chosen. Exiting script..." >> $LOGFILE - echo "" - exit 1 - else - BACKUPDATE=$BACKUPDATE1 - fi - - if [ $MODE == "Basic" ]; then - if [ -f ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/routerfw.txt ]; then - source ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/routerfw.txt - fi - break - elif [ $MODE == "Advanced" ]; then - echo "" - echo -e "${CGreen}Available Backup Files under:${CClear}" - - ls -lR /${UNCDRIVE}${BKDIR}/$BACKUPDATE - - echo "" - echo -e "${CGreen}Would you like to continue using this backup set?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the JFFS backup you wish to restore?${CClear}" - read ADVJFFS - echo "" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the EXT USB backup you wish to restore?${CClear}" - read ADVUSB - echo "" - fi - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the NVRAM backup you wish to restore?${CClear}" - read ADVNVRAM - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the routerfw.txt file to be referenced?${CClear}" - read ADVRTRFW - if [ -f ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVRTRFW} ]; then - source ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVRTRFW} - fi - break - fi - fi - done - - # Determine router model - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - - if [ ! -z $RESTOREMODEL ]; then - if [ "$ROUTERMODEL" != "$RESTOREMODEL" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router model is different from target router model." - echo -e "${CRed}ERROR: Restorations can only be performed on the same source/target router model or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain source/target routers are the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router model is different from target router model. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router model is different from target router model. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved from a different source router model.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - # Determine mismatched firmware - if [ ! -z $RESTOREBUILD ]; then - if [ "$FWBUILD" != "$RESTOREBUILD" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router firmware/build is different from target router firmware/build." - echo -e "${CRed}ERROR: Restorations can only be performed on the same router firmware/build or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain router firmware/build is the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved with older router firmware/build.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - if [ $MODE == "Basic" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this backup location:" - echo -e "${CBlue}${UNCDRIVE}${BKDIR}/$BACKUPDATE/" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/jffs.tar.gz -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - sleep 1 - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM" >> $LOGFILE - nvram restore ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/nvram.cfg >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - - elif [ $MODE == "Advanced" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this backup location:" - echo -e "${CBlue}${UNCDRIVE}${BKDIR}/$BACKUPDATE/" - echo -e "JFFS filename: $ADVJFFS" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "EXT USB filename: $ADVUSB" - fi - echo -e "NVRAM filename: $ADVNVRAM" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVJFFS} -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVUSB} -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM" >> $LOGFILE - nvram restore ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVNVRAM} >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - fi - - # Unmount the backup drive - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo "" - echo -e "${CClear}" - return - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "${CClear}" - return - - fi - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "${CClear}" - return - - fi - - elif [ "$SOURCE" == "Secondary" ]; then - - # Create the local backup drive mount directory - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: Secondary External drive mount point not set. Created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: Secondary External drive mount point not set. Created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the Secondary UNC - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External secondary network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External secondary network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - # Show a list of valid backups on screen - echo -e "${CGreen}Available Backup Selections:${CClear}" - ls -ld ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/*/ - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - - if promptyn "(y/n): "; then - - while true; do - echo "" - echo -e "${CGreen}" - ok=0 - while [ $ok = 0 ] - do - if [ $SECONDARYFREQUENCY == "W" ]; then - echo -e "${CGreen}Enter the Day of the backup you wish to restore? (ex: Mon or Fri) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "M" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 02 or 27) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 2 ] || [ ${#BACKUPDATE1} -lt 2 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 2 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "Y" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 002 or 270) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "P" ]; then - echo -e "${CGreen}Enter the exact folder name of the backup you wish to restore? (ex: 20230909-083422) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 15 ] || [ ${#BACKUPDATE1} -lt 15 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 15 characters for the folder name format"; echo "" - else - ok=1 - fi - fi - done - - if [ -z "$BACKUPDATE1" ]; then - echo "" - echo -e "${CRed}ERROR: Invalid backup set chosen. Exiting script...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Invalid backup set chosen. Exiting script..." >> $LOGFILE - echo "" - exit 1 - else - BACKUPDATE=$BACKUPDATE1 - fi - - if [ $SECONDARYMODE == "Basic" ]; then - if [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/routerfw.txt ]; then - source ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/routerfw.txt - fi - break - elif [ $SECONDARYMODE == "Advanced" ]; then - echo "" - echo -e "${CGreen}Available Secondary Backup Files under:${CClear}" - - ls -lR /${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$BACKUPDATE - - echo "" - echo -e "${CGreen}Would you like to continue using this secondary backup set?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the JFFS backup you wish to restore?${CClear}" - read ADVJFFS - echo "" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the EXT USB backup you wish to restore?${CClear}" - read ADVUSB - echo "" - fi - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the NVRAM backup you wish to restore?${CClear}" - read ADVNVRAM - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the routerfw.txt file to be referenced?${CClear}" - read ADVRTRFW - if [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVRTRFW} ]; then - source ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVRTRFW} - fi - break - fi - fi - done - - # Determine router model - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - - if [ ! -z $RESTOREMODEL ]; then - if [ "$ROUTERMODEL" != "$RESTOREMODEL" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router model is different from target router model." - echo -e "${CRed}ERROR: Restorations can only be performed on the same source/target router model or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain source/target routers are the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router model is different from target router model. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router model is different from target router model. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved from a different source router model.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - # Determine mismatched firmware - if [ ! -z $RESTOREBUILD ]; then - if [ "$FWBUILD" != "$RESTOREBUILD" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router firmware/build is different from target router firmware/build." - echo -e "${CRed}ERROR: Restorations can only be performed on the same router firmware/build or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain router firmware/build is the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved with older router firmware/build.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - if [ $SECONDARYMODE == "Basic" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a secondary backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this secondary backup location:" - echo -e "${CBlue}${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$BACKUPDATE/" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/jffs.tar.gz -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM" >> $LOGFILE - nvram restore ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/nvram.cfg >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Secondary backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - - elif [ $SECONDARYMODE == "Advanced" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a secondary backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this secondary backup location:" - echo -e "${CBlue}${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$BACKUPDATE/" - echo -e "JFFS filename: $ADVJFFS" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "EXT USB filename: $ADVUSB" - fi - echo -e "NVRAM filename: $ADVNVRAM" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVJFFS} -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVUSB} -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM" >> $LOGFILE - nvram restore ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVNVRAM} >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Secondary backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - fi - - # Unmount the backup drive - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo "" - echo -e "${CClear}" - return - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "${CClear}" - return - - fi - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "${CClear}" - return - - fi - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# unmountdrv is a function to gracefully unmount the drive, and retry for up to 30 seconds -unmountdrv () { - - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -e "${CGreen}STATUS: External USB drive continues to stay mounted.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External USB drive continues to stay mounted." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - umount -l $UNCDRIVE # unmount the local backup drive from the UNC - URC=$? - if [ $URC -eq 0 ]; then # If umount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -e ") unmounted successfully.${CClear}" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) unmounted successfully." >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to unmount from external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to unmount from external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to unmount from external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to unmount from external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to unmount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# unmountsecondarydrv is a function to gracefully unmount the secondary drive, and retry for up to 30 seconds -unmountsecondarydrv () { - - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -e "${CGreen}STATUS: Secondary external USB drive continues to stay mounted.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external USB drive continues to stay mounted." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - umount -l $SECONDARYUNCDRIVE # unmount the local backup drive from the Secondary UNC - URC=$? - if [ $URC -eq 0 ]; then # If umount come back successful, then proceed - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -e ") unmounted successfully.${CClear}" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) unmounted successfully." >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to unmount from secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to unmount from secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to unmount from secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to unmount from secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to unmount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# unmountdrv is a function to gracefully unmount the drive, and retry for up to 30 seconds -unmounttestdrv () { - - if [ "$TESTBACKUPMEDIA" == "USB" ]; then - echo -e "${CGreen}STATUS: Test external USB drive continues to stay mounted.${CClear}" - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - umount -l $TESTUNCDRIVE # unmount the local backup drive from the UNC - URC=$? - if [ $URC -eq 0 ]; then # If umount come back successful, then proceed - echo -en "${CGreen}STATUS: External test tetwork drive ("; printf "%s" "${TESTUNC}"; echo -e ") unmounted successfully.${CClear}" - break - else - echo -e "${CYellow}WARNING: Unable to unmount from external test network drive. Retrying...${CClear}" - sleep 5 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to unmount from external test network drive. Please check your configuration. Exiting.${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - break - fi - fi - done - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# checkplaintxtpwds is a function to check if old plaintext pwds are still in use due to change to new base64 pwd storage change -checkplaintxtpwds () { - - #Check to see if old conflicting variable names are being used - if [ ! -z "$USERNAME" ]; then - sed -i "s/USERNAME=/BTUSERNAME=/" "/jffs/addons/backupmon.d/backupmon.cfg" - sed -i "s/PASSWORD=/BTPASSWORD=/" "/jffs/addons/backupmon.d/backupmon.cfg" - source $CFGPATH - fi - - #echo $PASSWORD | base64 -d > /dev/null 2>&1 - echo "$BTPASSWORD" | openssl enc -d -base64 -A | grep -vqE '[^[:graph:]]' - PRI="$?" - #echo $SECONDARYPWD | base64 -d > /dev/null 2>&1 - echo "$SECONDARYPWD" | openssl enc -d -base64 -A | grep -vqE '[^[:graph:]]' - SEC="$?" - - if [ "$BACKUPMEDIA" == "Network" ]; then - if [ "$PRI" == "1" ]; then - echo -e "${CRed}ERROR: Plaintext passwords are still being used in the config file. Please go under the BACKUPMON setup menu" - echo -e "to reconfigure your primary and/or secondary target backup passwords, and save your config. New changes to the" - echo -e "way passwords are encoded and saved requires your immediate attention!${CClear}" - echo "" - read -rsp $'Press any key to enter setup menu...\n' -n1 key - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Plaintext passwords detected. Please check your configuration!" >> $LOGFILE - vsetup - exit 0 - fi - fi - - if [ "$SECONDARYBACKUPMEDIA" == "Network" ]; then - if [ "$SEC" == "1" ] && [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${CRed}ERROR: Plaintext passwords are still being used in the config file. Please go under the BACKUPMON setup menu" - echo -e "to reconfigure your primary and/or secondary target backup passwords, and save your config. New changes to the" - echo -e "way passwords are encoded and saved requires your immediate attention!${CClear}" - echo "" - read -rsp $'Press any key to enter setup menu...\n' -n1 key - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Plaintext passwords detected. Please check your configuration!" >> $LOGFILE - vsetup - exit 0 - fi - fi - -} - - -# ------------------------------------------------------------------------------------------------------------------------- - -# excludeswap is a function to write a swap file exlusion file, or to add to an existing exlusions file -excludeswap () { - -# First check to see if the swap file exlusion file exists, if not, create it. Thanks to @ScottW for the ideas! - -swapname=$(cat /proc/swaps | awk 'NR==2 {print $1}' | sed 's|.*/||') >/dev/null 2>&1 - -if [ ! -f $PFEXCLUSION ]; then - - if [ ! -z $swapname ] || [ $swapname != "" ]; then - { echo $swapname - } > $PFEXCLUSION - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Page File Backup Exclusion File created" >> $LOGFILE - else - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Page File does not exist" >> $LOGFILE - fi - -fi - -# Check to see if the exclusion file/path has been defined, if not, use the pagefile exclusion file in its place - -if [ "$BACKUPSWAP" == "0" ]; then - - if [ -z "$EXCLUSION" ] || [ "$EXCLUSION" == "" ]; then - EXCLUSION="$PFEXCLUSION" - fi - - if [ -z "$SECONDARYEXCLUSION" ] || [ "$SECONDARYEXCLUSION" == "" ]; then - SECONDARYEXCLUSION="$PFEXCLUSION" - fi - - # Check to see if an exlusion file is in place, and make sure the swap has been added to it. - - if ! grep -q -F "$swapname" $EXCLUSION; then - echo "$swapname" >> $EXCLUSION - fi - - if ! grep -q -F "$swapname" $SECONDARYEXCLUSION; then - echo "$swapname" >> $SECONDARYEXCLUSION - fi - -fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- -# Begin Main Program -# ------------------------------------------------------------------------------------------------------------------------- - -#DEBUG=; set -x # uncomment/comment to enable/disable debug mode -#{ # uncomment/comment to enable/disable debug mode - -# Create the necessary folder/file structure for BACKUPMON under /jffs/addons -if [ ! -d "/jffs/addons/backupmon.d" ]; then - mkdir -p "/jffs/addons/backupmon.d" -fi - -# Check for and add an alias for BACKUPMON -if ! grep -F "sh /jffs/scripts/backupmon.sh" /jffs/configs/profile.add >/dev/null 2>/dev/null; then - echo "alias backupmon=\"sh /jffs/scripts/backupmon.sh\" # backupmon" >> /jffs/configs/profile.add -fi - -# Determine router model -[ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - -#Get FW Version for inclusion in instructions.txt and to check before a restore -FWVER=$(nvram get firmver | tr -d '.') -BUILDNO=$(nvram get buildno) -EXTENDNO=$(nvram get extendno) -if [ -z $EXTENDNO ]; then EXTENDNO=0; fi -FWBUILD=$FWVER"."$BUILDNO"_"$EXTENDNO - -# Check to see if EXT drive exists -USBPRODUCT="$(nvram get usb_path1_product)" -EXTLABEL="$(_CheckForMountPointAndVolumeLabel_)" -LABELSIZE=$(echo $EXTLABEL | sed 's/ //g' | wc -m) - -# If there's no label or product, there's no EXT USB Drive, else the label might be blank -if [ -z "$EXTLABEL" ] && [ -z "$USBPRODUCT" ]; then - EXTLABEL="NOTFOUND" -elif [ $LABELSIZE -le 1 ]; then - clear - echo -e "${CYellow}WARNING: External USB Drive Label Name is not sufficient, or unable to detect default sda drive label." - echo "" - echo -e "${CRed}BACKUPMON MAY NOT FUNCTION CORRECTLY IN THIS SCENARIO${CClear}" - echo "" - echo -e "${CYellow}Should your drive be without a label, please give it a value, other than blank. Omit any spaces." - echo -e "Example: EXTUSB, or SAMSUNG-SSD... etc.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: External USB Drive Label Name is not sufficient, or unable to detect default sda drive label. Please investigate." >> $LOGFILE - echo "" - echo -e "${CGreen}[Continuing in 10 seconds]..." - sleep 10 -fi - -# Check and see if any commandline option is being used -if [ $# -eq 0 ] - then - clear - sh /jffs/scripts/backupmon.sh -noswitch - exit 0 -fi - -# Check and see if an invalid commandline option is being used -if [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "-setup" ] || [ "$1" == "-backup" ] || [ "$1" == "-restore" ] || [ "$1" == "-noswitch" ] || [ "$1" == "-purge" ] - then - clear - else - clear - echo "" - echo " BACKUPMON v$Version" - echo "" - echo " Exiting due to invalid commandline options!" - echo " (run 'backupmon -h' for help)" - echo "" - echo -e "${CClear}" - exit 0 -fi - -# Check to see if the help option is being called -if [ "$1" == "-h" ] || [ "$1" == "-help" ] - then - clear - echo "" - echo " BACKUPMON v$Version Commandline Option Usage:" - echo "" - echo " backupmon -h | -help" - echo " backupmon -setup" - echo " backupmon -backup" - echo " backupmon -restore" - echo " backupmon -purge" - echo "" - echo " -h | -help (this output)" - echo " -setup (displays the setup menu)" - echo " -backup (runs the normal backup procedures)" - echo " -restore (initiates the restore procedures)" - echo " -purge (auto purges perpetual backup folders)" - echo "" - echo -e "${CClear}" - exit 0 -fi - -# Check to see if a second command is being passed to remove color -if [ "$2" == "-bw" ] - then - blackwhite -fi - -# Check to see if the restore option is being called -if [ "$1" == "-restore" ] - then - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 0 - fi - checkplaintxtpwds #Check for plaintext passwords - restore #Run the restore routine - trimlogs #Trim the logs - echo -e "${CClear}" - exit 0 -fi - -# Check to see if the setup option is being called -if [ "$1" == "-setup" ] - then - vsetup -fi - -# Check to see if the purge option is being called -if [ "$1" == "-purge" ] - then - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 0 - fi - checkplaintxtpwds #Check for plaintext passwords - autopurge #Purge primary backups - autopurgesecondaries #Purge secondary backups - trimlogs #Trim the logs - echo "" - exit 0 -fi - -# Check to see if the backup option is being called -if [ "$1" == "-backup" ] - then - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 0 - fi - checkplaintxtpwds - BSWITCH="True" -fi - -# Check to see if the backup option is being called -if [ "$1" == "-noswitch" ] - then - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 1 - fi - checkplaintxtpwds - BSWITCH="False" -fi - -# Check for the Swap File Exclusion -if [ "$BACKUPSWAP" == "0" ]; then - excludeswap -fi - -updatecheck - -clear -# Check for updates -if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" -else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" -fi - -echo "" -echo -e "${CCyan}Normal Backup starting in 10 seconds. Press ${CGreen}[S]${CCyan}etup or ${CRed}[X]${CCyan} to override and enter ${CRed}RESTORE${CCyan} mode" -echo "" - -echo -e "${CCyan}Asus Router Model: ${CGreen}${ROUTERMODEL}" -echo -e "${CCyan}Firmware/Build Number: ${CGreen}${FWBUILD}" -echo -e "${CCyan}External USB Drive Mount Path: ${CGreen}${EXTDRIVE}" -if [ $FREQUENCY == "W" ]; then FREQEXPANDED="Weekly"; fi -if [ $FREQUENCY == "M" ]; then FREQEXPANDED="Monthly"; fi -if [ $FREQUENCY == "Y" ]; then FREQEXPANDED="Yearly"; fi -if [ $FREQUENCY == "P" ]; then FREQEXPANDED="Perpetual"; fi - -if [ "$BACKUPMEDIA" == "USB" ]; then - echo -e "${CCyan}Backing up to ${CGreen}USB${CCyan} mounted to ${CGreen}${UNCDRIVE}" -else - echo -en "${CCyan}Backing up to ${CGreen}"; printf "%s" "${UNC}"; echo -e "${CCyan} mounted to ${CGreen}${UNCDRIVE}" -fi -echo -e "${CCyan}Backup directory location: ${CGreen}${BKDIR}" -echo -e "${CCyan}Frequency: ${CGreen}$FREQEXPANDED" -echo -e "${CCyan}Mode: ${CGreen}$MODE" -echo "" - -# If the -backup switch is used then bypass the counter for immediate backup -if [ "$BSWITCH" == "False" ]; then - # Run a 10sec timer - i=0 - while [ $i -ne 10 ] - do - preparebar 51 "|" - progressbaroverride $i 10 "" "s" "Standard" - i=$(($i+1)) - done -fi - -# Run a normal backup -echo -e "${CGreen}[Primary Backup Commencing]... " -echo "" -echo -e "${CCyan}Messages:${CClear}" - -checkplaintxtpwds #Check for plaintext passwords -backup #Run primary backups -sendmessage 0 "Primary Backup completed successfully" -secondary #Run secondary backups -if [ $SECONDARYSTATUS -eq 1 ]; then - sendmessage 0 "Secondary Backup completed successfully" -fi - -if [ $PURGE -eq 1 ] && [ "$BSWITCH" == "True" ]; then - autopurge #Run autopurge on primary backups -fi - -if [ $SECONDARYPURGE -eq 1 ] && [ "$BSWITCH" == "True" ]; then - autopurgesecondaries #Run autopurge on secondary backups -fi - -trimlogs #Trim the logs - -BSWITCH="False" -echo -e "${CClear}" -exit 0 - -#} #2>&1 | tee $LOG | logger -t $(basename $0)[$$] # uncomment/comment to enable/disable debug mode diff --git a/backupmon_dev.sh b/backupmon_dev.sh deleted file mode 100644 index a5995e7..0000000 --- a/backupmon_dev.sh +++ /dev/null @@ -1,5669 +0,0 @@ -#!/bin/sh - -# Original functional backup script by: @Jeffrey Young, August 9, 2023 -# BACKUPMON v1.5.7 heavily modified and restore functionality added by @Viktor Jaep, 2023 -# -# BACKUPMON is a shell script that provides backup and restore capabilities for your Asus-Merlin firmware router's JFFS and -# external USB drive environments. By creating a network share off a NAS, server, or other device, BACKUPMON can point to -# this location, and perform a daily backup to this mounted drive. To perform daily, unattended backups, simply add a -# statement to your cron schedule, and launch backupmon.sh at any time you wish. During a situation of need to restore a -# backup after a catastrophic event with either your router or attached USB storage, simply copy the backupmon.sh & .cfg -# files over to a newly formatted /jffs/scripts folder, ensuring that your external USB storage was formatted with the same -# exact name (which is retrievable from the instructions.txt in your backup folder), and perform the restore by running the -# "backupmon.sh -restore" command, selecting the backup you want to use, and going through the prompts to complete the -# restoration of both your /jffs and external USB drive environments. -# -# Please use the 'backupmon.sh -setup' command to configure the necessary parameters that match your environment the best! - -# Variable list -- please do not change any of these -Version="1.5.7" # Current version -Beta=0 # Beta release Y/N -CFGPATH="/jffs/addons/backupmon.d/backupmon.cfg" # Path to the backupmon config file -DLVERPATH="/jffs/addons/backupmon.d/version.txt" # Path to the backupmon version file -LOGFILE="/jffs/addons/backupmon.d/backupmon.log" # Path to the local logfile -PFEXCLUSION="/jffs/addons/backupmon.d/pfexclusion.txt" # Path to pagefile exclusion file -WDAY="$(date +%a)" # Current day # of the week -MDAY="$(date +%d)" # Current day # of the month -YDAY="$(date +%j)" # Current day # of the year -EXTDRIVE="/tmp/mnt/$(nvram get usb_path_sda1_label)" # Grabbing the default External USB Drive path -EXTLABEL="$(nvram get usb_path_sda1_label)" # Grabbing the default External USB Label name -UNCUPDATED="False" # Tracking if the UNC was updated or not -SECONDARYUNCUPDATED="False" # Tracking if the Secondary UNC was updated or not -UpdateNotify=0 # Tracking whether a new update is available -BSWITCH="False" # Tracking -backup switch to eliminate timer -USBSOURCE="FALSE" # Tracking switch -USBTARGET="FALSE" # Tracking switch -SECONDARYUSBTARGET="FALSE" # Tracking switch -TESTUSBTARGET="FALSE" # Tracking switch - -# Default Config variables -BTUSERNAME="admin" -BTPASSWORD="YWRtaW4K" -UNC="\\\\192.168.50.25\\Backups" -UNCDRIVE="/tmp/mnt/backups" -BKDIR="/router/GT-AX6000-Backup" -BACKUPMEDIA="Network" -EXCLUSION="" -BACKUPSWAP=0 -SMBVER="2.1" -SCHEDULE=0 -SCHEDULEHRS=2 -SCHEDULEMIN=30 -SCHEDULEMODE="BackupOnly" -FREQUENCY="M" -MODE="Basic" -PURGE=0 -PURGELIMIT=0 -AMTMEMAIL=0 -AMTMEMAILSUCCESS=0 -AMTMEMAILFAILURE=0 -SECONDARYSTATUS=0 -SECONDARYUSER="admin" -SECONDARYPWD="YWRtaW4K" -SECONDARYUNC="\\\\192.168.50.25\\SecondaryBackups" -SECONDARYUNCDRIVE="/tmp/mnt/secondarybackups" -SECONDARYBKDIR="/router/GT-AX6000-2ndBackup" -SECONDARYBACKUPMEDIA="Network" -SECONDARYEXCLUSION="" -SECONDARYFREQUENCY="M" -SECONDARYMODE="Basic" -SECONDARYPURGE=0 -SECONDARYPURGELIMIT=0 - -#AMTM Email Notification Variables -readonly scriptFileName="${0##*/}" -readonly scriptFileNTag="${scriptFileName%.*}" -readonly CEM_LIB_TAG="master" -readonly CEM_LIB_URL="https://raw.githubusercontent.com/Martinski4GitHub/CustomMiscUtils/${CEM_LIB_TAG}/EMail" -readonly CUSTOM_EMAIL_LIBDir="/jffs/addons/shared-libs" -readonly CUSTOM_EMAIL_LIBName="CustomEMailFunctions.lib.sh" -readonly CUSTOM_EMAIL_LIBFile="${CUSTOM_EMAIL_LIBDir}/$CUSTOM_EMAIL_LIBName" - -# Color variables -CBlack="\e[1;30m" -InvBlack="\e[1;40m" -CRed="\e[1;31m" -InvRed="\e[1;41m" -CGreen="\e[1;32m" -InvGreen="\e[1;42m" -CDkGray="\e[1;90m" -InvDkGray="\e[1;100m" -InvLtGray="\e[1;47m" -CYellow="\e[1;33m" -InvYellow="\e[1;43m" -CBlue="\e[1;34m" -InvBlue="\e[1;44m" -CMagenta="\e[1;35m" -CCyan="\e[1;36m" -InvCyan="\e[1;46m" -CWhite="\e[1;37m" -InvWhite="\e[1;107m" -CClear="\e[0m" - -#Preferred standard router binaries path -export PATH="/sbin:/bin:/usr/sbin:/usr/bin:$PATH" - -# ------------------------------------------------------------------------------------------------------------------------- -# Functions -# ------------------------------------------------------------------------------------------------------------------------- - -# LogoNM is a function that displays the BACKUPMON script name in a cool ASCII font without menu options -logoNM () { - echo -e "${CYellow} ____ ___ ________ ____ ______ __ _______ _ __" - echo -e " / __ )/ | / ____/ //_/ / / / __ \/ |/ / __ \/ | / /" - echo -e " / __ / /| |/ / / ,< / / / / /_/ / /|_/ / / / / |/ /" - echo -e " / /_/ / ___ / /___/ /| / /_/ / ____/ / / / /_/ / /| /" - echo -e " /_____/_/ |_\____/_/ |_\____/_/ /_/ /_/\____/_/ |_/ ${CGreen}v$Version${CYellow}${CClear}" -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Promptyn is a simple function that accepts y/n input -promptyn () { # No defaults, just y or n - while true; do - read -p "[y/n]? " -n 1 -r yn - case "${yn}" in - [Yy]* ) return 0 ;; - [Nn]* ) return 1 ;; - * ) echo -e "\nPlease answer y or n.";; - esac - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# blackwhite is a simple function that removes all color attributes -blackwhite () { -# Color variables -CBlack="" -InvBlack="" -CRed="" -InvRed="" -CGreen="" -InvGreen="" -CDkGray="" -InvDkGray="" -InvLtGray="" -CYellow="" -InvYellow="" -CBlue="" -InvBlue="" -CMagenta="" -CCyan="" -InvCyan="" -CWhite="" -InvWhite="" -CClear="" - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Preparebar and Progressbaroverride is a script that provides a nice progressbar to show script activity -preparebar () { - # $1 - bar length - # $2 - bar char - barlen=$1 - barspaces=$(printf "%*s" "$1") - barchars=$(printf "%*s" "$1" | tr ' ' "$2") -} - -progressbaroverride () { - - insertspc=" " - - if [ $1 -eq -1 ]; then - printf "\r $barspaces\r" - else - barch=$(($1*barlen/$2)) - barsp=$((barlen-barch)) - progr=$((100*$1/$2)) - fi - - if [ ! -z $6 ]; then AltNum=$6; else AltNum=$1; fi - - printf " ${CWhite}${InvDkGray}$AltNum${4} / ${progr}%%${CClear} ${CGreen}[ e=Exit / Selection? ${InvGreen} ${CClear}${CGreen}]\r${CClear}" "$barchars" "$barspaces" - - # Borrowed this wonderful keypress capturing mechanism from @Eibgrad... thank you! :) - key_press=''; read -rsn1 -t 1 key_press < "$(tty 0>&2)" - - if [ $key_press ]; then - case $key_press in - [Xx]) echo ""; echo ""; sleep 1; restore;; - [Ss]) (vsetup); source $CFGPATH; echo ""; sleep 1; exit 0;; - [Ee]) # Exit gracefully - echo "" - echo -e "${CClear}" - exit 0 - ;; - esac - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# updatecheck is a function that downloads the latest update version file, and compares it with what's currently installed -updatecheck () { - - # Download the latest version file from the source repository - curl --silent --retry 3 "https://raw.githubusercontent.com/ViktorJp/backupmon/master/version.txt" -o "/jffs/addons/backupmon.d/version.txt" - - if [ -f $DLVERPATH ] - then - # Read in its contents for the current version file - DLVersion=$(cat $DLVERPATH) - - # Compare the new version with the old version and log it - if [ "$Beta" == "1" ]; then # Check if Dev/Beta Mode is enabled and disable notification message - UpdateNotify=0 - elif [ "$DLVersion" != "$Version" ]; then - UpdateNotify="Update available: v$Version -> v$DLVersion" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: A new update (v$DLVersion) is available to download" >> $LOGFILE - else - UpdateNotify=0 - fi - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vlogs is a function that calls the nano text editor to view the BACKUPMON log file -vlogs () { - -export TERM=linux -nano +999999 --linenumbers $LOGFILE - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Trimlogs is a function that forces the logs down to a certain number of rows to give you some history -trimlogs () { - - CURRLOGSIZE=$(wc -l $LOGFILE | awk '{ print $1 }' ) # Determine the number of rows in the log - - if [ $CURRLOGSIZE -gt 5000 ] # If it's bigger than the max allowed, tail/trim it! - then - echo "$(tail -5000 $LOGFILE)" > $LOGFILE - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vconfig is a function that guides you through the various configuration options for backupmon -vconfig () { - - if [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - fi - - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - - if [ -z $SECONDARYPURGE ]; then SECONDARYPURGE=0; fi - - # Determine router model - if [ -z "$ROUTERMODEL" ]; then - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - fi - - # Check for the Swap File Exclusion - if [ "$BACKUPSWAP" == "0" ]; then - excludeswap - fi - - CHANGES=0 #track notification to save your changes - - while true; do - clear - logoNM - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Primary Backup Configuration Options" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} ${CClear}${CCyan}: Source Router Model : "${CGreen}$ROUTERMODEL - echo -e "${InvDkGray}${CWhite} ${CClear}${CCyan}: Source Router Firmware/Build : "${CGreen}$FWBUILD - echo -e "${InvDkGray}${CWhite} 1 ${CClear}${CCyan}: Source EXT USB Drive Mount Point : "${CGreen}$EXTDRIVE - - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CCyan}: Backup Target Media Type : "${CGreen}$BACKUPMEDIA - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CDkGray}: Backup Target Username : "${CDkGray}$BTUSERNAME - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Backup Target Password (ENC) : "${CDkGray}$BTPASSWORD - if [ "$UNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Backup Target UNC Path : "${CDkGray};printf '%s' $UNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Backup Target UNC Path : "${CDkGray}; echo $UNC | sed -e 's,\\,\\\\,g' - fi - else - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CCyan}: Backup Target Username : "${CGreen}$BTUSERNAME - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Backup Target Password (ENC) : "${CGreen}$BTPASSWORD - if [ "$UNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Backup Target UNC Path : "${CGreen};printf '%s' $UNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Backup Target UNC Path : "${CGreen}; echo $UNC | sed -e 's,\\,\\\\,g' - fi - fi - - if [ "$UNCDRIVE" == "" ] || [ -z "$UNCDRIVE" ]; then - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Backup Target Mount Point : ${CWhite}${InvRed}<-- Action Needed! ${CClear}" - else - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Backup Target Mount Point : "${CGreen}$UNCDRIVE - fi - - echo -e "${InvDkGray}${CWhite} 7 ${CClear}${CCyan}: Backup Target Directory Path : "${CGreen}$BKDIR - - echo -e "${InvDkGray}${CWhite} 8 ${CClear}${CCyan}: Backup Exclusion File Name : "${CGreen}$EXCLUSION - - echo -en "${InvDkGray}${CWhite} 9 ${CClear}${CCyan}: Backup Swap File : ${CGreen}" - if [ "$BACKUPSWAP" == "0" ]; then - printf "No"; printf "%s\n"; - elif [ "$BACKUPSWAP" == "1" ]; then - printf "Yes"; printf "%s\n";fi - - echo -e "${InvDkGray}${CWhite} 10 ${CClear}${CCyan}: Backup CIFS/SMB Version : "${CGreen}$SMBVER - - echo -en "${InvDkGray}${CWhite} 11 ${CClear}${CCyan}: Backup Frequency? : ${CGreen}" - if [ "$FREQUENCY" == "W" ]; then - printf "Weekly"; printf "%s\n"; - elif [ "$FREQUENCY" == "M" ]; then - printf "Monthly"; printf "%s\n"; - elif [ "$FREQUENCY" == "Y" ]; then - printf "Yearly"; printf "%s\n"; - elif [ "$FREQUENCY" == "P" ]; then - printf "Perpetual"; printf "%s\n"; fi - if [ "$FREQUENCY" == "P" ]; then - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge Backups? : ${CGreen}" - if [ "$PURGE" == "0" ]; then - printf "No"; printf "%s\n"; - elif [ "$PURGE" == "1" ]; then - printf "Yes"; printf "%s\n";fi - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge older than (days): : ${CGreen}" - if [ "$PURGELIMIT" == "0" ]; then - printf "N/A"; printf "%s\n"; - else - printf $PURGELIMIT; printf "%s\n"; - fi - else - echo -e "${InvDkGray}${CWhite} |--${CClear}${CDkGray}- Purge Backups? : ${CDkGray}No" - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- Purge older than (days): : ${CDkGray}N/A" - fi - - echo -e "${InvDkGray}${CWhite} 12 ${CClear}${CCyan}: Backup/Restore Mode : "${CGreen}$MODE - - echo -en "${InvDkGray}${CWhite} 13 ${CClear}${CCyan}: Schedule Backups? : ${CGreen}" - if [ "$SCHEDULE" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - if [ "$SCHEDULE" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Time: : ${CGreen}$SCHEDULEHRS:$SCHEDULEMIN" - else - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- Time: : ${CDkGray}$SCHEDULEHRS:$SCHEDULEMIN" - fi - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Scheduled Backup Mode : ${CGreen}" - if [ "$SCHEDULEMODE" == "BackupOnly" ]; then - printf "Backup Only"; printf "%s\n"; - elif [ "$SCHEDULEMODE" == "BackupAutoPurge" ]; then - printf "Backup + Autopurge"; printf "%s\n"; fi - - echo -en "${InvDkGray}${CWhite} 14 ${CClear}${CCyan}: AMTM Email Notifications? : ${CGreen}" - if [ "$AMTMEMAIL" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - if [ "$AMTMEMAILSUCCESS" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- On Success? : ${CGreen}Yes" - else - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- On Success? : ${CDkGray}No" - fi - if [ "$AMTMEMAILFAILURE" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- On Failure? : ${CGreen}Yes" - else - echo -e "${InvDkGray}${CWhite} | ${CClear}${CDkGray}- On Failure? : ${CDkGray}No" - fi - - echo -en "${InvDkGray}${CWhite} 15 ${CClear}${CCyan}: Secondary Backup Config Options : "${CGreen}$SECONDARY - if [ "$SECONDARYSTATUS" != "0" ] && [ "$SECONDARYSTATUS" != "1" ]; then SECONDARYSTATUS=0; fi - if [ "$SECONDARYSTATUS" == "0" ]; then - printf "Disabled"; printf "%s\n"; - else printf "Enabled"; printf "%s\n"; fi - - echo -e "${InvDkGray}${CWhite} | ${CClear}" - if [ $CHANGES -eq 0 ]; then - echo -e "${InvDkGray}${CWhite} s ${CClear}${CCyan}: Save Config & Exit" - else - echo -e "${InvDkGray}${CWhite} s ${CClear}${CCyan}: Save Config & Exit ${CWhite}${InvRed}<-- Save your changes! ${CClear}" - fi - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit & Discard Changes" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - CHANGES=1 - printf "Selection: " - read -r ConfigSelection - - # Execute chosen selections - case "$ConfigSelection" in - - 1) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}1. Please choose the SOURCE Mount Point of your attached external USB Drive that" - echo -e "${CCyan}contains data that you want to have backed up. In most cases, whatever is" - echo -e "${CCyan}attached to your sda1 partition should be selected. Should there be only one" - echo -e "${CCyan}mount point available, it will be automatically selected." - printf "${CYellow}Recommended Mount Point = ${CClear}" - _GetDefaultUSBMountPoint_ - USBSOURCE="TRUE" - _GetMountPoint_ "Select an EXT USB Drive Mount Point: " - read -rsp $'Press any key to acknowledge...\n' -n1 key - checkusbexclusion - ;; - - 2) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}2. What is the TARGET Backup Media Type? This is the type of device that you" - echo -e "${CCyan}want your backups copied to. Please indicate whether the media is a network" - echo -e "${CCyan}device (accessible via UNC path), or a local USB device (connected to router)." - echo -e "${CCyan}PLEASE NOTE: If the USB option is chosen, there will be no need to complete" - echo -e "${CCyan}further information for the Target UNC, username or password, and will be" - echo -e "${CCyan}grayed out." - echo -e "${CYellow}(Network=1, USB=2) (Default = 1)" - echo -e "${CClear}" - while true; do - read -p 'Media Type (1/2)?: ' BACKUPMEDIA - case $BACKUPMEDIA in - [1] ) BACKUPMEDIA="Network"; break ;; - [2] ) BACKUPMEDIA="USB"; break ;; - "" ) echo -e "\nError: Please use either 1 or 2\n";; - * ) echo -e "\nError: Please use either 1 or 2\n";; - esac - done - - if [ "$BACKUPMEDIA" == "Network" ] && [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - UNCDRIVE="" - fi - - if [ "$BACKUPMEDIA" == "USB" ] && [ "$EXTDRIVE" != "$UNCDRIVE" ]; then - UNCDRIVE="" - fi - - ;; - - 3) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}3. What is the TARGET Network Backup Username?" - echo -e "${CYellow}(Default = admin)" - echo -e "${CClear}" - read -p 'Username: ' BTUSERNAME1 - if [ "$BTUSERNAME1" == "" ] || [ -z "$BTUSERNAME1" ]; then BTUSERNAME="admin"; else BTUSERNAME="$BTUSERNAME1"; fi # Using default value on enter keypress - ;; - - 4) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}4. What is the TARGET Network Backup Password?" - echo -e "${CYellow}(Default = admin)" - echo -e "${CClear}" - if [ $BTPASSWORD == "admin" ]; then - echo -e "${CGreen}Old Password (Unencoded): admin" - else - echo -en "${CGreen}Old Password (Unencoded): "; echo "$BTPASSWORD" | openssl enc -d -base64 -A - fi - echo "" - read -rp 'New Password: ' BTPASSWORD1 - if [ "$BTPASSWORD1" == "" ] || [ -z "$BTPASSWORD1" ]; then BTPASSWORD=`echo "admin" | openssl enc -base64 -A`; else BTPASSWORD=`echo $BTPASSWORD1 | openssl enc -base64 -A`; fi # Using default value on enter keypress - ;; - - 5) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}5. What is the TARGET Backup UNC Path? This is the path of a local network" - echo -e "${CCyan}backup device that has a share made available for backups to be pushed to." - echo -e "${CCyan}Please note: Use proper notation for the network path by starting with" - echo -en "${CCyan}4 backslashes "; printf "%s" "(\\\\\\\\)"; echo -en " and using 2 backslashes "; printf "%s" "(\\\\)"; echo -e " between any additional" - echo -e "${CCyan}folders. Example below:" - echo -en "${CYellow}"; printf "%s" "(Default = \\\\\\\\192.168.50.25\\\\Backups)" - echo -e "${CClear}" - read -rp 'Target Backup UNC Path: ' UNC1 - if [ "$UNC1" == "" ] || [ -z "$UNC1" ]; then UNC="\\\\\\\\192.168.50.25\\\\Backups"; else UNC="$UNC1"; fi # Using default value on enter keypress - UNCUPDATED="True" - ;; - - 6) # ----------------------------------------------------------------------------------------- - - if [ "$BACKUPMEDIA" == "Network" ]; then - echo "" - echo -e "${CCyan}6. What would you like to name the TARGET Network Backup Drive Mount Point? This" - echo -e "${CCyan}mount path will be created for you, and is the local path on your router" - echo -e "${CCyan}typically located under /tmp/mnt which provides a physical directory that is" - echo -e "${CCyan}mounted to the network backup location. Please note: Use proper notation for the" - echo -e "${CCyan}path by using single forward slashes between directories. Example below:" - echo -e "${CYellow}(Default = /tmp/mnt/backups)" - echo -e "${CClear}" - read -p 'Target Network Backup Drive Mount Point: ' UNCDRIVE1 - if [ "$UNCDRIVE1" == "" ] || [ -z "$UNCDRIVE1" ]; then UNCDRIVE="/tmp/mnt/backups"; else UNCDRIVE="$UNCDRIVE1"; fi # Using default value on enter keypress - if [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - UNCDRIVE="" - echo "" - echo -e "${CYellow} WARNING: Your TARGET Network Backup Drive Mount Point cannot be named the" - echo -e "${CYellow} same as your SOURCE External USB Drive Mount. Please choose a mount point" - echo -e "${CYellow} name that is unique for this network target.${CClear}\n" - read -rsp $'Press any key to acknowledge...\n' -n1 key - fi - - elif [ "$BACKUPMEDIA" == "USB" ]; then - echo "" - echo -e "${CCyan}6. Please choose the TARGET USB Backup Drive Mount Point assigned to your external" - echo -e "${CCyan}USB Drive where you want backups to be stored. Should there be only one drive" - echo -e "${CCyan}available, it will be automatically selected. PLEASE NOTE: It is highly recommended" - echo -e "${CCyan}not to use the same USB drive to both be a SOURCE and TARGET for backups.${CClear}" - USBTARGET="TRUE" - _GetMountPoint_ "Select a Target USB Backup Drive Mount Point: " - read -rsp $'Press any key to acknowledge...\n' -n1 key - checkusbexclusion - fi - ;; - - 7) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}7. What is the TARGET Backup Directory Path? This is the path that is created" - echo -e "${CCyan}on your network backup location in order to store and order the backups by day." - echo -e "${CCyan}Please note: Use proper notation for the path by using single forward slashes" - echo -e "${CCyan}between directories. Example below:" - echo -e "${CYellow}(Default = /router/GT-AX6000-Backup)" - echo -e "${CClear}" - read -p 'Target Backup Directory Path: ' BKDIR1 - if [ "$BKDIR1" == "" ] || [ -z "$BKDIR1" ]; then BKDIR="/router/GT-AX6000-Backup"; else BKDIR="$BKDIR1"; fi # Using default value on enter keypress - checkusbexclusion - ;; - - 8) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}8. Would you like to use a Backup Exclusion File Name? This file contains a" - echo -e "${CCyan}list of certain files that you want to exclude from the backup, such as your" - echo -e "${CCyan}swap file." - echo "" - echo -e "${CYellow}WARNING: If you do not use an Exclusion file with the necessary entries to" - echo -e "${CYellow}exlude your swap file (or others), your backup size and time it takes to" - echo -e "${CYellow}complete the backup will increase greatly. Examples of what to include in" - echo -e "${CYellow}the exlusions.txt file below entered in a simple list format:" - echo "" - echo -e "${CYellow}myswap.swp" - echo -e "${CYellow}entware/var/log/*" - echo -e "${CYellow}skynet/skynet.log" - echo "" - echo -e "${CCyan}Please note: Use proper notation for the path to this file by using single" - echo -e "${CCyan}forward slashes between directories. Example below:" - echo -e "${CYellow}(Example = /jffs/addons/backupmon.d/exclusions.txt) (Default = Leave Blank)" - echo -e "${CClear}" - read -p 'Backup Exclusion Path + File Name: ' EXCLUSION1 - if [ "$EXCLUSION1" == "" ] || [ -z "$EXCLUSION1" ]; then EXCLUSION=""; else EXCLUSION="$EXCLUSION1"; fi # Using default value on enter keypress - if [ "$BACKUPSWAP" == "0" ] && [ "$EXCLUSION" == "" ]; then EXCLUSION="$PFEXCLUSION"; fi - ;; - - 9) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}9. Would you like to back up your Swap File? This file usually ranges in the" - echo -e "${CCyan}1GB, 2GB or 4GB range. It is not a file that is required to be backed up, and" - echo -e "${CCyan}may cause issues when restoring backups. Due to the size, it will also" - echo -e "${CCyan}substantially increase backup target size and time it takes to run backups." - echo -e "${CYellow}NOTE: It is highly recommended to leave this disabled." - echo "" - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Backup Swap? (0/1): ' SWAP1 - if [ "$SWAP1" == "" ] || [ -z "$SWAP1" ]; then BACKUPSWAP=0; else BACKUPSWAP="$SWAP1"; fi # Using default value on enter keypress - - if [ "$BACKUPSWAP" == "1" ]; then - swapname=$(cat /proc/swaps | awk 'NR==2 {print $1}' | sed 's|.*/||') >/dev/null 2>&1 - sed -i -e '/'$swapname'/d' $EXCLUSION >/dev/null 2>&1 - sed -i -e '/'$swapname'/d' $SECONDARYEXCLUSION >/dev/null 2>&1 - fi - ;; - - 10) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}10. What version of the CIFS/SMB protocol would you like to use? This protocol" - echo -e "${CCyan}is used by BACKUPMON to connect to other network devices in order to transfer" - echo -e "${CCyan}files and backups from source to target. While BACKUPMON supports the latest" - echo -e "${CCyan}SMB protocol available (v3.02), you can choose older versions for backwards" - echo -e "${CCyan}compatibility purposes, for example, if the target hardware is not able to" - echo -e "${CCyan}support a more recent version." - echo -e "${CYellow}(v2.1=1, v2.0=2, v1.0=3, v3.0=4, v3.02=5) (Default = 1)" - echo -e "${CClear}" - while true; do - read -p 'CIFS/SMB Version (1/2/3/4/5)?: ' SMBVER - case $SMBVER in - [1] ) SMBVER="2.1"; break ;; - [2] ) SMBVER="2.0"; break ;; - [3] ) SMBVER="1.0"; break ;; - [4] ) SMBVER="3.0"; break ;; - [5] ) SMBVER="3.02"; break ;; - "" ) echo -e "\nError: Please use either 1, 2, 3, 4 or 5\n";; - * ) echo -e "\nError: Please use either 1, 2, 3, 4 or 5\n";; - esac - done - ;; - - - 11) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}11. What backup frequency would you like BACKUPMON to run daily backup jobs each" - echo -e "${CCyan}day? There are 4 different choices -- Weekly, Monthly, Yearly and Perpetual." - echo -e "${CCyan}Backup folders based on the week, month, year, or perpetual are created under" - echo -e "${CCyan}your network share. Explained below:" - echo "" - echo -e "${CYellow}WEEKLY:" - echo -e "${CGreen}7 different folders for each day of the week are created (ex: Mon, Tue... Sun)." - echo "" - echo -e "${CYellow}MONTHLY:" - echo -e "${CGreen}31 different folders for each day are created (ex: 01, 02, 03... 30, 31)." - echo "" - echo -e "${CYellow}YEARLY:" - echo -e "${CGreen}365 different folders are created for each day (ex: 001, 002, 003... 364, 365)." - echo "" - echo -e "${CYellow}PERPETUAL:" - echo -e "${CGreen}A unique backup folder is created each time it runs based on the date-time" - echo -e "${CGreen}(ex: 20230909-084322). NOTE: When using the Perpetual backup frequency option," - echo -e "${CGreen}you may only use BASIC mode." - echo "" - echo -e "${CYellow}(Weekly=W, Monthly=M, Yearly=Y, Perpetual=P) (Default = M)" - echo -e "${CClear}" - while true; do - read -p 'Frequency (W/M/Y/P)?: ' FREQUENCY - case $FREQUENCY in - [Ww] ) FREQUENCY="W"; PURGE=0; PURGELIMIT=0; break ;; - [Mm] ) FREQUENCY="M"; PURGE=0; PURGELIMIT=0; break ;; - [Yy] ) FREQUENCY="Y"; PURGE=0; PURGELIMIT=0; break ;; - [Pp] ) FREQUENCY="P"; MODE="Basic" break ;; - "" ) echo -e "\nError: Please use either M, W, Y or P\n";; - * ) echo -e "\nError: Please use either M, W, Y or P\n";; - esac - done - - if [ $FREQUENCY == "P" ]; then - echo "" - echo -e "${CCyan}11a. Would you like to purge perpetual backups after a certain age? This can help" - echo -e "${CCyan}trim your backups and reclaim disk space, but also gives you more flexibility on" - echo -e "${CCyan}the length of time you can keep your backups. Purging backups can be run manually" - echo -e "${CCyan}from the setup menu, and gives you the ability to see which backups will be purged" - echo -e "${CCyan}before they are deleted permanently. It will also run automatically when calling" - echo -e "${CCyan}BACKUPMON with the -backup switch. If you run 'sh backupmon.sh -backup', it will" - echo -e "${CCyan}complete a backup, and then run an auto purge based on your criteria. Running" - echo -e "${CCyan}'sh backupmon.sh' without the -backup switch will run a normal backup without an" - echo -e "${CCyan}auto purge, even if purge is enabled below." - echo "" - echo -e "${CCyan}PLEASE NOTE: If there are any backups you wish to save permanently, please move" - echo -e "${CCyan}these to a SAFE, separate folder that BACKUPMON does not interact with." - echo "" - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Purge Backups? (0/1): ' PURGE1 - if [ "$PURGE1" == "" ] || [ -z "$PURGE1" ]; then PURGE=0; else PURGE="$PURGE1"; fi # Using default value on enter keypress - - if [ "$PURGE" == "0" ]; then - PURGELIMIT=0 - elif [ "$PURGE" == "1" ]; then - - echo "" - echo -e "${CCyan}11b. How many days would you like to keep your perpetual backups? Example: 90" - echo -e "${CCyan}Note that all perpetual backups older than 90 days would be permanently deleted." - echo "" - echo -e "${CCyan}PLEASE NOTE: If there are any backups you wish to save permanently, please move" - echo -e "${CCyan}these to a SAFE, separate folder that BACKUPMON does not interact with." - echo "" - echo -e "${CYellow}(Default = 90)" - echo -e "${CClear}" - read -p 'Backup Age? (in days): ' PURGELIMIT1 - if [ "$PURGELIMIT1" == "" ] || [ -z "$PURGELIMIT1" ]; then PURGELIMIT=0; else PURGELIMIT="$PURGELIMIT1"; fi # Using default value on enter keypress - - else - PURGE=0 - PURGELIMIT=0 - fi - fi - - ;; - - 12) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}12. What mode of operation would you like BACKUPMON to run in? You have 2 different" - echo -e "${CCyan}choices -- Basic or Advanced. Choose wisely! These are the differences:" - echo "" - echo -e "${CYellow}BASIC:" - echo -e "${CGreen}- Only backs up one backup set per daily folder" - echo -e "${CGreen}- Backup file names have standard names based on jffs and USB drive label names" - echo -e "${CGreen}- Self-prunes the daily backup folders by deleting contents before backing up new set" - echo -e "${CGreen}- Will overwrite daily backups, even if multiple are made on the same day" - echo -e "${CGreen}- Restore more automated, and only required to pick which day to restore from" - echo "" - echo -e "${CYellow}ADVANCED:" - echo -e "${CGreen}- Backs up multiple daily backup sets per daily folder" - echo -e "${CGreen}- Backup file names contain extra unique date and time identifiers" - echo -e "${CGreen}- Keeps all daily backups forever, and no longer self-prunes" - echo -e "${CGreen}- Will not overwrite daily backups, even if multiple are made on the same day" - echo -e "${CGreen}- Restore more tedious, and required to type exact backup file names before restore" - echo "" - echo -e "${CYellow}NOTE: When choosing BASIC mode while using 'Perpetual Frequency', your daily backup" - echo -e "${CYellow}folders will not self-prune or overwrite, even if multiple backups are made on the" - echo -e "${CYellow}same day." - echo "" - echo -e "${CYellow}(Basic-0, Advanced=1) (Default = 0)" - echo -e "${CClear}" - while true; do - read -p 'Mode (0/1)?: ' MODE1 - case $MODE1 in - [0] ) MODE="Basic"; break ;; - [1] ) if [ $FREQUENCY == "P" ]; then MODE="Basic"; else MODE="Advanced"; fi; break ;; - "" ) echo -e "\nError: Please use either 0 or 1\n";; - * ) echo -e "\nError: Please use either 0 or 1\n";; - esac - done - ;; - - 13) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}13. Would you like BACKUPMON to automatically run at a scheduled time each day?" - echo -e "${CCyan}Please note: This will place a cru command into your 'services-start' file that" - echo -e "${CCyan}is located under your /jffs/scripts folder. Each time your router reboots, this" - echo -e "${CCyan}command will automatically be added as a CRON job to run your backup." - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Schedule BACKUPMON?: ' SCHEDULE1 - if [ "$SCHEDULE1" == "" ] || [ -z "$SCHEDULE1" ]; then SCHEDULE=0; else SCHEDULE="$SCHEDULE1"; fi # Using default value on enter keypress - - if [ "$SCHEDULE" == "0" ]; then - - if [ -f /jffs/scripts/services-start ]; then - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - fi - - elif [ "$SCHEDULE" == "1" ]; then - - echo "" - echo -e "${CCyan}12a. What time would you like BACKUPMON to automatically run each day? Please" - echo -e "${CCyan}note: You will be asked for the hours and minutes in separate prompts. Use 24hr" - echo -e "${CCyan}format for the hours. (Ex: 17 hrs / 15 min = 17:15 or 5:15pm)" - echo -e "${CYellow}(Default = 2 hrs / 30 min = 02:30 or 2:30am)" - echo -e "${CClear}" - read -p 'Schedule HOURS?: ' SCHEDULEHRS1 - if [ "$SCHEDULEHRS1" == "" ] || [ -z "$SCHEDULEHRS1" ]; then SCHEDULEHRS=2; else SCHEDULEHRS="$SCHEDULEHRS1"; fi # Using default value on enter keypress - read -p 'Schedule MINUTES?: ' SCHEDULEMIN1 - if [ "$SCHEDULEMIN1" == "" ] || [ -z "$SCHEDULEMIN1" ]; then SCHEDULEMIN=30; else SCHEDULEMIN="$SCHEDULEMIN1"; fi # Using default value on enter keypress - - if [ "$FREQUENCY" == "P" ]; then - echo "" - echo -e "${CCyan}12b. When running a scheduled job each day, would you like BACKUPMON to only run" - echo -e "${CCyan}backups, or would you like it to run backups and have it automatically purge" - echo -e "${CCyan}old backups outside your specified age range immediately following? If you don't" - echo -e "${CCyan}want to run backups with autopurge, you will be responsible for manually running" - echo -e "${CCyan}backup purges using the config menu, or manually from the file system itself." - echo -e "${CCyan}Please note: This option is only available when having the Perpetual Backup" - echo -e "${CCyan}Frequency selected." - echo -e "${CYellow}(Backups Only=1, Backups+Autopurge=2) (Default = 1)" - echo -e "${CClear}" - while true; do - read -p 'Backup/Purge Functionality (1/2)?: ' SCHEDULEMODE - case $SCHEDULEMODE in - [1] ) SCHEDULEMODE="BackupOnly"; break ;; - [2] ) SCHEDULEMODE="BackupAutoPurge"; break ;; - "" ) echo -e "\nError: Please use either 1 or 2\n";; - * ) echo -e "\nError: Please use either 1 or 2\n";; - esac - done - fi - - if [ "$SCHEDULEMODE" == "BackupOnly" ]; then - if [ -f /jffs/scripts/services-start ]; then - - if ! grep -q -F "sh /jffs/scripts/backupmon.sh" /jffs/scripts/services-start; then - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh" - else - #delete and re-add if it already exists in case there's a time change - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh" - fi - - else - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh"'"' >> /jffs/scripts/services-start - chmod 755 /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh" - fi - - echo "" - echo -e "${CGreen}[Modifiying SERVICES-START file]..." - sleep 2 - echo -e "[Modifying CRON jobs]..." - sleep 2 - - elif [ "$SCHEDULEMODE" == "BackupAutoPurge" ]; then - if [ -f /jffs/scripts/services-start ]; then - - if ! grep -q -F "sh /jffs/scripts/backupmon.sh" /jffs/scripts/services-start; then - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup" - else - #delete and re-add if it already exists in case there's a time change - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup"'"' >> /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup" - fi - - else - echo 'cru a RunBackupMon "'"$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup"'"' >> /jffs/scripts/services-start - chmod 755 /jffs/scripts/services-start - cru a RunBackupMon "$SCHEDULEMIN $SCHEDULEHRS * * * sh /jffs/scripts/backupmon.sh -backup" - fi - - echo "" - echo -e "${CGreen}[Modifiying SERVICES-START file]..." - sleep 2 - echo -e "[Modifying CRON jobs]..." - sleep 2 - - fi - - else - SCHEDULE=0 - SCHEDULEHRS=2 - SCHEDULEMIN=30 - fi - ;; - - 14) # ----------------------------------------------------------------------------------------- - echo "" - echo -e "${CCyan}14. Would you like BACKUPMON to send you email notifications on backup success" - echo -e "${CCyan}or failure, or both? Please note: This does require that AMTM email has been" - echo -e "${CCyan}set up successfully under AMTM -> em (email settings). Once you are able to" - echo -e "${CCyan}send and receive test emails, you may utilize this functionality in BACKUPMON." - echo -e "${CCyan}Additionally, this functionality will download an AMTM email interface library" - echo -e "${CCyan}courtesy of @Martinski, and will be located under a new common library folder" - echo -e "${CCyan}called: /jffs/addons/shared-libs." - echo -e "${CYellow}(No=0, Yes=1) (Default = 0)" - echo -e "${CClear}" - read -p 'Enable BACKUPMON Email Notifications? (0/1): ' AMTMEMAIL1 - if [ "$AMTMEMAIL1" == "" ] || [ -z "$AMTMEMAIL1" ]; then AMTMEMAIL=0; else AMTMEMAIL="$AMTMEMAIL1"; fi # Using default value on enter keypress - - if [ "$AMTMEMAIL" == "1" ]; then - - if [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - . "$CUSTOM_EMAIL_LIBFile" - - if [ -z "${CEM_LIB_VERSION:+xSETx}" ] || \ - _CheckLibraryUpdates_CEM_ "$CUSTOM_EMAIL_LIBDir" quiet - then - _DownloadCEMLibraryFile_ "update" - fi - else - _DownloadCEMLibraryFile_ "install" - fi - - echo "" - read -p 'Email on Successful Backups? (No=0, Yes=1): ' AMTMEMAILSUCCESS1 - if [ "$AMTMEMAILSUCCESS1" == "" ] || [ -z "$AMTMEMAILSUCCESS1" ]; then AMTMEMAILSUCCESS=0; else AMTMEMAILSUCCESS="$AMTMEMAILSUCCESS1"; fi # Using default value on enter keypress - echo "" - read -p 'Email on Backup Failures? (No=0, Yes=1): ' AMTMEMAILFAILURE1 - if [ "$AMTMEMAILFAILURE1" == "" ] || [ -z "$AMTMEMAILFAILURE1" ]; then AMTMEMAILFAILURE=0; else AMTMEMAILFAILURE="$AMTMEMAILFAILURE1"; fi # Using default value on enter keypress - echo "" - echo -e "Would you like to send a TEST email from BACKUPMON?" - if promptyn "(y/n): "; then - - echo "" - cemIsFormatHTML=true - cemIsVerboseMode=true ## true OR false ## - emailBodyTitle="Testing Email Notification" - emailSubject="TEST: BACKUPMON Email Notification" - tmpEMailBodyFile="/tmp/var/tmp/tmpEMailBody_${scriptFileNTag}.$$.TXT" - - { - printf "This is a TEST to check & verify if sending email notifications is working well from BACKUPMON.\n" - } > "$tmpEMailBodyFile" - - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" "$emailBodyTitle" - - echo "" - read -rsp $'Press any key to acknowledge...\n' -n1 key - - fi - - #If notifications are off, turn off AMTM Email functionality - if [ "$AMTMEMAILSUCCESS" == "0" ] && [ "$AMTMEMAILFAILURE" == "0" ]; then - AMTMEMAIL=0 - fi - - else - AMTMEMAIL=0 - AMTMEMAILSUCCESS=0 - AMTMEMAILFAILURE=0 - fi - - ;; - - 15) # ----------------------------------------------------------------------------------------- - while true; do - clear - logoNM - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Secondary Backup Configuration Options" - echo -e "${CGreen}----------------------------------------------------------------" - echo -en "${InvDkGray}${CWhite} 1 ${CClear}${CCyan}: Enabled/Disabled : ${CGreen}" - if [ "$SECONDARYSTATUS" != "0" ] && [ "$SECONDARYSTATUS" != "1" ]; then SECONDARYSTATUS=0; fi - if [ "$SECONDARYSTATUS" == "0" ]; then - printf "Disabled"; printf "%s\n"; - else printf "Enabled"; printf "%s\n"; fi - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CCyan}: Secondary Target Media Type : ${CGreen}$SECONDARYBACKUPMEDIA" - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - if [ -z "$SECONDARYUSER" ]; then SECONDARYUSER="admin"; fi - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CDkGray}: Secondary Target Username : ${CDkGray}$SECONDARYUSER" - if [ -z "$SECONDARYPWD" ]; then SECONDARYPWD="YWRtaW4K"; fi - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Secondary Target Password (ENC) : ${CDkGray}$SECONDARYPWD" - if [ -z "$SECONDARYUNC" ]; then SECONDARYUNC="\\\\192.168.50.25\\Backups"; fi - if [ "$SECONDARYUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Secondary Target UNC Path : ${CDkGray}"; printf '%s' $SECONDARYUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CDkGray}: Secondary Target UNC Path : ${CDkGray}"; echo $SECONDARYUNC | sed -e 's,\\,\\\\,g' - fi - else - if [ -z "$SECONDARYUSER" ]; then SECONDARYUSER="admin"; fi - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CCyan}: Secondary Target Username : ${CGreen}$SECONDARYUSER" - if [ -z "$SECONDARYPWD" ]; then SECONDARYPWD="YWRtaW4K"; fi - echo -e "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Secondary Target Password (ENC) : ${CGreen}$SECONDARYPWD" - if [ -z "$SECONDARYUNC" ]; then SECONDARYUNC="\\\\192.168.50.25\\Backups"; fi - if [ "$SECONDARYUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Secondary Target UNC Path : ${CGreen}"; printf '%s' $SECONDARYUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Secondary Target UNC Path : ${CGreen}"; echo $SECONDARYUNC | sed -e 's,\\,\\\\,g' - fi - fi - if [ "$SECONDARYUNCDRIVE" == "" ] || [ -z "$SECONDARYUNCDRIVE" ]; then - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Secondary Target Drive Mount Point : ${CWhite}${InvRed}<-- Action Needed! ${CClear}" - else - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Secondary Target Drive Mount Point : ${CGreen}$SECONDARYUNCDRIVE" - fi - if [ -z "$SECONDARYBKDIR" ]; then SECONDARYBKDIR="/router/GT-AX6000-Backup"; fi - echo -e "${InvDkGray}${CWhite} 7 ${CClear}${CCyan}: Secondary Target Directory Path : ${CGreen}$SECONDARYBKDIR" - echo -e "${InvDkGray}${CWhite} 8 ${CClear}${CCyan}: Exclusion File Name : ${CGreen}$SECONDARYEXCLUSION" - echo -en "${InvDkGray}${CWhite} 9 ${CClear}${CCyan}: Backup Frequency? : ${CGreen}" - if [ "$SECONDARYFREQUENCY" == "W" ]; then - printf "Weekly"; printf "%s\n"; - elif [ "$SECONDARYFREQUENCY" == "M" ]; then - printf "Monthly"; printf "%s\n"; - elif [ "$SECONDARYFREQUENCY" == "Y" ]; then - printf "Yearly"; printf "%s\n"; - elif [ "$SECONDARYFREQUENCY" == "P" ]; then - printf "Perpetual"; printf "%s\n"; - else SECONDARYFREQUENCY="M"; - printf "Monthly"; printf "%s\n"; fi - if [ "$SECONDARYFREQUENCY" == "P" ]; then - echo -en "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge Secondary Backups? : ${CGreen}" - if [ "$SECONDARYPURGE" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - else - echo -en "${InvDkGray}${CWhite} |--${CClear}${CDkGray}- Purge Secondary Backups? : ${CDkGray}" - if [ "$SECONDARYPURGE" == "0" ]; then - printf "No"; printf "%s\n"; - else printf "Yes"; printf "%s\n"; fi - fi - if [ -z $SECONDARYPURGELIMIT ]; then SECONDARYPURGELIMIT=0; fi - if [ "$SECONDARYFREQUENCY" == "P" ] && [ "$SECONDARYPURGE" == "1" ]; then - echo -e "${InvDkGray}${CWhite} |--${CClear}${CCyan}- Purge Older Than (days) : ${CGreen}$SECONDARYPURGELIMIT" - else - echo -e "${InvDkGray}${CWhite} |--${CClear}${CDkGray}- Purge Older Than (days) : ${CDkGray}$SECONDARYPURGELIMIT" - fi - if [ -z "$SECONDARYMODE" ]; then SECONDARYMODE="Basic"; fi - echo -e "${InvDkGray}${CWhite} 10 ${CClear}${CCyan}: Backup/Restore Mode : ${CGreen}$SECONDARYMODE" - echo -e "${InvDkGray}${CWhite} | ${CClear}" - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit Back to Primary Backup Config" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - printf "Selection: ${CClear}" - read -r SECONDARYINPUT - case $SECONDARYINPUT in - 1 ) echo ""; read -p 'Secondary Backup Enabled=1, Disabled=0 (0/1?): ' SECONDARYSTATUS;; - 2 ) echo ""; read -p 'Secondary Target Backup Media (Network=1, USB=2): ' SECONDARYBACKUPMEDIA; if [ "$SECONDARYBACKUPMEDIA" == "1" ]; then SECONDARYBACKUPMEDIA="Network"; SECONDARYUNCDRIVE=""; elif [ "$SECONDARYBACKUPMEDIA" == "2" ]; then SECONDARYBACKUPMEDIA="USB"; SECONDARYUNCDRIVE=""; else SECONDARYBACKUPMEDIA="Network"; fi;; - 3 ) echo ""; read -p 'Secondary Username: ' SECONDARYUSER;; - 4 ) echo ""; if [ "$SECONDARYPWD" == "admin" ]; then echo -e "Old Secondary Password (Unencoded): admin"; else echo -en "Old Secondary Password (Unencoded): "; echo $SECONDARYPWD | openssl enc -d -base64 -A; fi; echo ""; read -rp 'New Secondary Password: ' SECONDARYPWD1; if [ "$SECONDARYPWD1" == "" ] || [ -z "$SECONDARYPWD1" ]; then SECONDARYPWD=`echo "admin" | openssl enc -base64 -A`; else SECONDARYPWD=`echo $SECONDARYPWD1 | openssl enc -base64 -A`; fi;; - 5 ) echo ""; read -rp 'Secondary Target UNC (ex: \\\\192.168.50.25\\Backups ): ' SECONDARYUNC1; SECONDARYUNC="$SECONDARYUNC1"; SECONDARYUNCUPDATED="True";; - 6 ) echo ""; if [ "$SECONDARYBACKUPMEDIA" == "Network" ]; then read -p 'Secondary Target Mount Point (ex: /tmp/mnt/backups ): ' SECONDARYUNCDRIVE; elif [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then SECONDARYUSBTARGET="TRUE"; _GetMountPoint_ "Select a Secondary Target USB Backup Drive Mount Point: "; read -rsp $'Press any key to acknowledge...\n' -n1 key; fi; checkusbexclusion;; - 7 ) echo ""; read -p 'Secondary Target Dir Path (ex: /router/GT-AX6000-Backup ): ' SECONDARYBKDIR; checkusbexclusion;; - 8 ) echo ""; read -p 'Secondary Exclusion File Name (ex: /jffs/addons/backupmon.d/exclusions2.txt ): ' SECONDARYEXCLUSION; if [ "$BACKUPSWAP" == "0" ] && [ "$SECONDARYEXCLUSION" == "" ]; then SECONDARYEXCLUSION="$PFEXCLUSION"; fi;; - 9 ) echo ""; read -p 'Secondary Backup Frequency (Weekly=W, Monthly=M, Yearly=Y, Perpetual=P) (W/M/Y/P?): ' SECONDARYFREQUENCY; SECONDARYFREQUENCY=$(echo "$SECONDARYFREQUENCY" | awk '{print toupper($0)}'); SECONDARYPURGE=0; if [ "$SECONDARYFREQUENCY" == "P" ]; then SECONDARYMODE="Basic"; read -p 'Purge Secondary Backups? (Yes=1/No=0) ' SECONDARYPURGE; read -p 'Secondary Backup Purge Age? (Days/Disabled=0) ' SECONDARYPURGELIMIT; else SECONDARYPURGELIMIT=0; fi;; - 10 ) echo ""; read -p 'Secondary Backup Mode (Basic=0, Advanced=1) (0/1?): ' SECONDARYMODE; if [ "$SECONDARYMODE" == "0" ]; then SECONDARYMODE="Basic"; elif [ "$SECONDARYMODE" == "1" ]; then SECONDARYMODE="Advanced"; else SECONDARYMODE="Basic"; fi; if [ "$SECONDARYFREQUENCY" == "P" ]; then SECONDARYMODE="Basic"; fi;; - [Ee] ) break ;; - "" ) echo -e "\nError: Please use 1 - 10 or e=Exit\n";; - * ) echo -e "\nError: Please use 1 - 10 or e=Exit\n";; - esac - done - ;; - - [Ss]) # ----------------------------------------------------------------------------------------- - echo "" - if [ "$UNCUPDATED" == "False" ]; then - UNC=$(echo $UNC | sed -e 's,\\,\\\\,g') - fi - - if [ "$SECONDARYUNCUPDATED" == "False" ]; then - SECONDARYUNC=$(echo $SECONDARYUNC | sed -e 's,\\,\\\\,g') - fi - - { echo 'BTUSERNAME="'"$BTUSERNAME"'"' - echo 'BTPASSWORD="'"$BTPASSWORD"'"' - echo 'UNC="'"$UNC"'"' - echo 'UNCDRIVE="'"$UNCDRIVE"'"' - echo 'EXTDRIVE="'"$EXTDRIVE"'"' - echo 'EXTLABEL="'"$EXTLABEL"'"' - echo 'BKDIR="'"$BKDIR"'"' - echo 'BACKUPMEDIA="'"$BACKUPMEDIA"'"' - echo 'EXCLUSION="'"$EXCLUSION"'"' - echo 'BACKUPSWAP='$BACKUPSWAP - echo 'SMBVER="'"$SMBVER"'"' - echo 'SCHEDULE='$SCHEDULE - echo 'SCHEDULEHRS='$SCHEDULEHRS - echo 'SCHEDULEMIN='$SCHEDULEMIN - echo 'SCHEDULEMODE="'"$SCHEDULEMODE"'"' - echo 'FREQUENCY="'"$FREQUENCY"'"' - echo 'MODE="'"$MODE"'"' - echo 'PURGE='$PURGE - echo 'PURGELIMIT='$PURGELIMIT - echo 'AMTMEMAIL='$AMTMEMAIL - echo 'AMTMEMAILSUCCESS='$AMTMEMAILSUCCESS - echo 'AMTMEMAILFAILURE='$AMTMEMAILFAILURE - echo 'SECONDARYSTATUS='$SECONDARYSTATUS - echo 'SECONDARYUSER="'"$SECONDARYUSER"'"' - echo 'SECONDARYPWD="'"$SECONDARYPWD"'"' - echo 'SECONDARYUNC="'"$SECONDARYUNC"'"' - echo 'SECONDARYUNCDRIVE="'"$SECONDARYUNCDRIVE"'"' - echo 'SECONDARYBKDIR="'"$SECONDARYBKDIR"'"' - echo 'SECONDARYBACKUPMEDIA="'"$SECONDARYBACKUPMEDIA"'"' - echo 'SECONDARYEXCLUSION="'"$SECONDARYEXCLUSION"'"' - echo 'SECONDARYFREQUENCY="'"$SECONDARYFREQUENCY"'"' - echo 'SECONDARYMODE="'"$SECONDARYMODE"'"' - echo 'SECONDARYPURGE='$SECONDARYPURGE - echo 'SECONDARYPURGELIMIT='$SECONDARYPURGELIMIT - } > $CFGPATH - echo -e "${CGreen}Applying config changes to BACKUPMON..." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Successfully wrote a new config file" >> $LOGFILE - sleep 3 - UNCUPDATED="False" - SECONDARYUNCUPDATED="False" - UNC=$(echo -e "$UNC") - SECONDARYUNC=$(echo -e "$SECONDARYUNC") - return - ;; - - [Ee]) # ----------------------------------------------------------------------------------------- - UNCUPDATED="False" - SECONDARYUNCUPDATED="False" - return - ;; - - esac - done - - else - - # Determine router model - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - - #Create a new config file with default values to get it to a basic running state - { echo 'BTUSERNAME="admin"' - echo 'BTPASSWORD="admin"' - echo 'UNC="\\\\192.168.50.25\\Backups"' - echo 'UNCDRIVE="/tmp/mnt/backups"' - echo 'EXTDRIVE="/tmp/mnt/usbdrive"' - echo 'EXTLABEL="usbdrive"' - echo 'BKDIR="/router/GT-AX6000-Backup"' - echo 'BACKUPMEDIA="Network"' - echo 'EXCLUSION=""' - echo 'BACKUPSWAP=0' - echo 'SMBVER="2.1"' - echo 'SCHEDULE=0' - echo 'SCHEDULEHRS=2' - echo 'SCHEDULEMIN=30' - echo 'SCHEDULEMODE="BackupOnly"' - echo 'FREQUENCY="M"' - echo 'MODE="Basic"' - echo 'PURGE=0' - echo 'PURGELIMIT=0' - echo 'AMTMEMAIL=0' - echo 'AMTMEMAILSUCCESS=0' - echo 'AMTMEMAILFAILURE=0' - echo 'SECONDARYSTATUS=0' - echo 'SECONDARYUSER="admin"' - echo 'SECONDARYPWD="admin"' - echo 'SECONDARYUNC="\\\\192.168.50.25\\SecondaryBackups"' - echo 'SECONDARYUNCDRIVE="/tmp/mnt/secondarybackups"' - echo 'SECONDARYBKDIR="/router/GT-AX6000-2ndBackup"' - echo 'SECONDARYBACKUPMEDIA="Network"' - echo 'SECONDARYEXCLUSION=""' - echo 'SECONDARYFREQUENCY="M"' - echo 'SECONDARYMODE="Basic"' - echo 'SECONDARYPURGE=0' - echo 'SECONDARYPURGELIMIT=0' - } > $CFGPATH - - #Re-run backupmon -config to restart setup process - vconfig - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# testtarget is a function that allows you to play with settings to ensure your configuration works -testtarget () { - -TESTUSER="admin" -TESTPWD="admin" -TESTUNC="\\\\192.168.50.25\\Backups" -TESTUNCDRIVE="/tmp/mnt/testbackups" -TESTBKDIR="/router/test-backup" -TESTBACKUPMEDIA="Network" -TESTUNCUPDATED="False" -TESTSMBVER="2.1" - -while true; do - clear - logoNM - echo "" - echo -e "${CCyan}The Backup Target Network Connection Tester allows you to play with" - echo -e "your connection variables, such as your username/password, network UNC" - echo -e "path, target directories and local backup drive mount paths. If your" - echo -e "network target is configured correctly, this utility will write a test" - echo -e "folder out there, and copy a test file into the test folder in order" - echo -e "to validate that read/write permissions are correct." - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Backup Target Network Connection Tester" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} 1 ${CClear}${CCyan}: Test Target Media Type : ${CGreen}$TESTBACKUPMEDIA" - if [ "$TESTBACKUPMEDIA" == "Network" ]; then - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CCyan}: Test Target Username : ${CGreen}$TESTUSER" - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CCyan}: Test Target Password : ${CGreen}$TESTPWD" - if [ "$TESTUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Test Target UNC Path : ${CGreen}"; printf '%s' $TESTUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CCyan}: Test Target UNC Path : ${CGreen}"; echo $TESTUNC | sed -e 's,\\,\\\\,g' - fi - elif [ "$TESTBACKUPMEDIA" == "USB" ]; then - echo -e "${InvDkGray}${CWhite} 2 ${CClear}${CDkGray}: Test Target Username : ${CDkGray}$TESTUSER" - echo -e "${InvDkGray}${CWhite} 3 ${CClear}${CDkGray}: Test Target Password : ${CDkGray}$TESTPWD" - if [ "$TESTUNCUPDATED" == "True" ]; then - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Test Target UNC Path : ${CDkGray}"; printf '%s' $TESTUNC; printf "%s\n" - else - echo -en "${InvDkGray}${CWhite} 4 ${CClear}${CDkGray}: Test Target UNC Path : ${CDkGray}"; echo $TESTUNC | sed -e 's,\\,\\\\,g' - fi - fi - echo -e "${InvDkGray}${CWhite} 5 ${CClear}${CCyan}: Test Target Backup Mount Point : ${CGreen}$TESTUNCDRIVE" - echo -e "${InvDkGray}${CWhite} 6 ${CClear}${CCyan}: Test Target Dir Path : ${CGreen}$TESTBKDIR" - echo -e "${InvDkGray}${CWhite} 7 ${CClear}${CCyan}: Test CIFS/SMB Version : ${CGreen}$TESTSMBVER" - echo -e "${InvDkGray}${CWhite} | ${CClear}" - echo -e "${InvDkGray}${CWhite} t ${CClear}${CCyan}: Test your Network Backup Connection" - echo -e "${InvDkGray}${CWhite} p ${CClear}${CCyan}: Import your Primary Backup Settings" - echo -e "${InvDkGray}${CWhite} s ${CClear}${CCyan}: Import your Secondary Backup Settings" - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit Back to Setup + Operations Menu" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - printf "Selection: ${CClear}" - read -r TESTINPUT - case $TESTINPUT in - 1 ) echo ""; read -p 'Test Target Media Type (ex: Network=1 / USB=2) (Choose 1 or 2): ' TESTBACKUPMEDIA; if [ "$TESTBACKUPMEDIA" == "1" ]; then TESTBACKUPMEDIA="Network"; elif [ "$TESTBACKUPMEDIA" == "2" ]; then TESTBACKUPMEDIA="USB"; else TESTBACKUPMEDIA="Network"; fi;; - 2 ) echo ""; read -p 'Test Username: ' TESTUSER;; - 3 ) echo ""; read -rp 'Test Password: ' TESTPWD;; - 4 ) echo ""; read -rp 'Test Target UNC (ex: \\\\192.168.50.25\\Backups ): ' TESTUNC1; if [ -z $TESTUNC1 ]; then TESTUNC="\\\\\\\\192.168.50.25\\\\Backups"; else TESTUNC="$TESTUNC1"; fi; TESTUNCUPDATED="True";; - 5 ) echo ""; if [ "$TESTBACKUPMEDIA" == "Network" ]; then read -p 'Test Target Backup Mount Point (ex: /tmp/mnt/testbackups ): ' TESTUNCDRIVE; elif [ "$TESTBACKUPMEDIA" == "USB" ]; then TESTUSBTARGET="TRUE"; _GetMountPoint_ "Select a Test Target USB Backup Mount Point: "; read -rsp $'Press any key to acknowledge...\n' -n1 key; fi;; - 6 ) echo ""; read -p 'Test Target Dir Path (ex: /router/test-backup ): ' TESTBKDIR;; - 7 ) echo ""; read -p 'Test CIFS/SMB Version (ex: v2.1=1 / v2.0=2 / v1.0=3 / v3.0=4 / v3.02=5) (Choose 1, 2, 3, 4 or 5): ' TESTSMBVER; if [ "$TESTSMBVER" == "1" ]; then TESTSMBVER="2.1"; elif [ "$TESTSMBVER" == "2" ]; then TESTSMBVER="2.0"; elif [ "$TESTSMBVER" == "3" ]; then TESTSMBVER="1.0"; elif [ "$TESTSMBVER" == "4" ]; then TESTSMBVER="3.0"; elif [ "$TESTSMBVER" == "5" ]; then TESTSMBVER="3.02"; else TESTSMBVER="2.1"; fi;; - [Ee] ) break ;; - [Pp] ) TESTUSER=$BTUSERNAME; TESTPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A); TESTUNC=$UNC; TESTUNCDRIVE=$UNCDRIVE; TESTBKDIR=$BKDIR; TESTBACKUPMEDIA=$BACKUPMEDIA; TESTSMBVER=$SMBVER;; - [Ss] ) TESTUSER=$SECONDARYUSER; TESTPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A); TESTUNC=$SECONDARYUNC; TESTUNCDRIVE=$SECONDARYUNCDRIVE; TESTBKDIR=$SECONDARYBKDIR; TESTBACKUPMEDIA=$SECONDARYBACKUPMEDIA; TESTSMBVER=$SMBVER;; - [Tt] ) # Connection test script - if [ "$TESTUNCUPDATED" == "True" ]; then TESTUNC=$(echo -e "$TESTUNC"); fi - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Ping target to see if it's reachable - CNT=0 - TRIES=3 - TARGETIP=$(echo $TESTUNC | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}') - if [ ! -z $TARGETIP ]; then - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - ping -q -c 1 -W 2 $TARGETIP > /dev/null 2>&1 - RC=$? - if [ $RC -eq 0 ]; then # If ping come back successful, then proceed - echo -e "${CGreen}INFO: Backup Target ($TARGETIP) reachable via PING.${CClear}" - break - else - echo -e "${CYellow}WARNING: Unable to PING Backup Target ($TARGETIP). Retrying...${CClear}" - sleep 3 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to PING backup target ($TARGETIP). Please check your configuration/permissions.${CClear}" - break - fi - fi - done - fi - - # Check to see if a local backup drive mount is available, if not, create one. - if ! [ -d $TESTUNCDRIVE ]; then - mkdir -p $TESTUNCDRIVE - chmod 777 $TESTUNCDRIVE - echo -e "${CYellow}WARNING: External test drive mount point not set. Created under: $TESTUNCDRIVE ${CClear}" - sleep 3 - else - echo -e "${CGreen}INFO: External test drive mount point exists. Found under: ${CYellow}$TESTUNCDRIVE ${CClear}" - fi - - # If everything successfully was created, proceed - if ! mount | grep $TESTUNCDRIVE > /dev/null 2>&1; then - - # Check the build to see if modprobe needs to be called - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - if [ "$TESTBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External test drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - mount -t cifs $TESTUNC $TESTUNCDRIVE -o "vers=${TESTSMBVER},username=${TESTUSER},password=${TESTPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Retrying...${CClear}" - sleep 5 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive ($TESTUNCDRIVE). Please check your configuration. Exiting.${CClear}" - FAILURE="TRUE" - break - fi - fi - done - fi - fi - - if [ "$FAILURE" == "TRUE" ]; then - read -rsp $'Press any key to acknowledge...\n' -n1 key - fi - - # If the local mount is connected to the UNC, proceed - if [ -n "`mount | grep $TESTUNCDRIVE`" ]; then - - echo -en "${CGreen}STATUS: External test drive ("; printf "%s" "${TESTUNC}"; echo -en ") mounted successfully under: ${CYellow}$TESTUNCDRIVE ${CClear}"; printf "%s\n" - - # Create the backup directories and daily directories if they do not exist yet - if ! [ -d "${TESTUNCDRIVE}${TESTBKDIR}" ]; then mkdir -p "${TESTUNCDRIVE}${TESTBKDIR}"; echo -e "${CGreen}STATUS: Test Backup Directory successfully created under: ${CYellow}$TESTBKDIR${CClear}"; fi - if ! [ -d "${TESTUNCDRIVE}${TESTBKDIR}/test" ]; then mkdir -p "${TESTUNCDRIVE}${TESTBKDIR}/test"; echo -e "${CGreen}STATUS: Daily Test Backup Subdirectory successfully created under: ${CYellow}$TESTBKDIR/test${CClear}";fi - - #include restore instructions in the backup location - { echo 'TEST FILE' - echo '' - echo 'This is a test file created to ensure you have proper read/write access to your backup directory.' - echo '' - echo 'Please delete this file and associated test directories at your convenience' - } > ${TESTUNCDRIVE}${TESTBKDIR}/Test/testfile.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}testfile.txt${CGreen} to ${CYellow}${TESTUNCDRIVE}${TESTBKDIR}/test${CClear}" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - # Unmount the locally connected mounted drive - unmounttestdrv - read -rsp $'Press any key to acknowledge...\n' -n1 key - - else - - # There's problems with mounting the drive - check paths and permissions! - echo -e "${CRed}ERROR: Failed to run Network Backup Test Script -- Drive mount failed. Please check your configuration!${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - - fi - TESTUNCUPDATED="False" - - ;; - "" ) echo -e "\nError: Please use 1 - 9 or Exit = e\n";; - * ) echo -e "\nError: Please use 1 - 9 or Exit = e\n";; - - esac - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vuninstall is a function that uninstalls and removes all traces of backupmon from your router... -vuninstall () { - clear - logoNM - echo "" - echo -e "${CYellow}Uninstall Utility${CClear}" - echo "" - echo -e "${CCyan}You are about to uninstall BACKUPMON! This action is irreversible." - echo -e "${CCyan}Do you wish to proceed?${CClear}" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CCyan}Are you sure? Please type 'y' to validate you want to proceed.${CClear}" - if promptyn "(y/n): "; then - clear - rm -f -r /jffs/addons/backupmon.d - rm -f /jffs/scripts/backupmon.sh - sed -i -e '/backupmon.sh/d' /jffs/scripts/services-start - cru d RunBackupMon - echo "" - echo -e "\n${CGreen}BACKUPMON has been uninstalled...${CClear}" - echo "" - exit 0 - else - echo "" - echo -e "\n${CGreen}Exiting Uninstall Utility...${CClear}" - sleep 1 - return - fi - else - echo "" - echo -e "\n${CGreen}Exiting Uninstall Utility...${CClear}" - sleep 1 - return - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vupdate is a function that provides a UI to check for script updates and allows you to install the latest version... -vupdate () { - updatecheck # Check for the latest version from source repository - clear - logoNM - echo "" - echo -e "${CYellow}Update Utility${CClear}" - echo "" - echo -e "${CCyan}Current Version: ${CYellow}$Version${CClear}" - echo -e "${CCyan}Updated Version: ${CYellow}$DLVersion${CClear}" - echo "" - if [ "$Version" == "$DLVersion" ] - then - echo -e "${CCyan}You are on the latest version! Would you like to download anyways?${CClear}" - echo -e "${CCyan}This will overwrite your local copy with the current build.${CClear}" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CCyan}Downloading BACKUPMON ${CYellow}v$DLVersion${CClear}" - curl --silent --retry 3 "https://raw.githubusercontent.com/ViktorJp/backupmon/master/backupmon-$DLVersion.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh" - echo "" - echo -e "${CCyan}Download successful!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Successfully downloaded and installed BACKUPMON v$DLVersion" >> $LOGFILE - echo "" - read -rsp $'Press any key to restart BACKUPMON...\n' -n1 key - exec /jffs/scripts/backupmon.sh -setup - else - echo "" - echo "" - echo -e "${CGreen}Exiting Update Utility...${CClear}" - sleep 1 - return - fi - else - echo -e "${CCyan}Score! There is a new version out there! Would you like to update?${CClear}" - if promptyn " (y/n): "; then - echo "" - echo -e "\n${CCyan}Downloading BACKUPMON ${CYellow}v$DLVersion${CClear}" - curl --silent --retry 3 "https://raw.githubusercontent.com/ViktorJp/backupmon/master/backupmon-$DLVersion.sh" -o "/jffs/scripts/backupmon.sh" && chmod 755 "/jffs/scripts/backupmon.sh" - echo "" - echo -e "${CCyan}Download successful!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Successfully downloaded and installed BACKUPMON v$DLVersion" >> $LOGFILE - echo "" - read -rsp $'Press any key to restart BACKUPMON...\n' -n1 key - exec /jffs/scripts/backupmon.sh -setup - else - echo "" - echo "" - echo -e "${CGreen}Exiting Update Utility...${CClear}" - sleep 1 - return - fi - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- -# This function checks to see if the source and target are the same, that it throws up a warning to add the backup folder -# to the exclusion file - -checkusbexclusion () -{ - -if [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - BKDIREXCL=$(echo $BKDIR | sed 's/^.\{1\}//') - if grep -q $BKDIREXCL $EXCLUSION; then - echo "" - echo -e "${CGreen}SUCCESS: Primary USB Backup Folder already included in TAR Exclusion File${CCLear}" - sleep 2 - else - echo "" - echo -e "${CRed}WARNING: Primary USB Backup Folder not found in TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}Your settings indicate that your are backing up your USB drive to the same USB drive." - echo -e "While it is possible to continue with this configuration, it is not recommended, as a" - echo -e "failure of your USB drive will result in a complete loss of your backups. Also, by not" - echo -e "exluding your backup folder in your TAR exclusion file, you will be backing up your" - echo -e "backups, which will result in exponential growth of your backup files, and the time it" - echo -e "will take to run your backups. It is recommended to add your backup folder to your TAR" - echo -e "exclusion file now (assuming it is in '/mainfolder/subfolder' format)${CClear}" - echo "" - echo -e "Would you like to exclude your USB backup folder from your regular backups?" - if promptyn " (y/n): "; then - echo -e "$BKDIREXCL/*" >> $EXCLUSION - echo "" - echo -e "\n${CGreen}SUCCESS: Primary USB Backup Folder added to TAR Exclusion File${CCLear}" - sleep 2 - else - echo -e "\n\n${CRed}WARNING: Primary USB Backup Folder not added to TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}You are assuming the risk and responsibility of your USB drive possibly running out" - echo -e "of space due to exponential backup file growth, as well as the ever-increasing time" - echo -e "it will take to run backups. Please consider the risk of loss of all backups if your" - echo -e "USB drive fails. Consider adding your USB backup folder as an exclusion in your TAR" - echo -e "exclusion file to mitigate some of these risks.${CClear}" - echo "" - read -rsp $'Press any key to acknowledge you are taking ownership of this risk...\n' -n1 key - fi - fi -fi - -if [ $SECONDARYSTATUS -eq 1 ]; then - if [ "$EXTDRIVE" == "$SECONDARYUNCDRIVE" ]; then - SECONDARYBKDIREXCL=$(echo $SECONDARYBKDIR | sed 's/^.\{1\}//') - if grep -q $SECONDARYBKDIREXCL $SECONDARYEXCLUSION; then - echo "" - echo -e "${CGreen}SUCCESS: Secondary USB Backup Folder already included in TAR Exclusion File${CCLear}" - sleep 2 - else - echo "" - echo -e "${CRed}WARNING: Secondary USB Backup Folder not found in TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}Your settings indicate that your are backing up your USB drive to the same USB drive." - echo -e "While it is possible to continue with this configuration, it is not recommended, as a" - echo -e "failure of your USB drive will result in a complete loss of your backups. Also, by not" - echo -e "exluding your backup folder in your TAR exclusion file, you will be backing up your" - echo -e "backups, which will result in exponential growth of your backup files, and the time it" - echo -e "will take to run your backups. It is recommended to add your backup folder to your TAR" - echo -e "exclusion file now (assuming it is in '/mainfolder/subfolder' format)${CClear}" - echo "" - echo -e "Would you like to exclude your USB backup folder from your regular backups?" - if promptyn " (y/n): "; then - echo -e "$SECONDARYBKDIREXCL/*" >> $SECONDARYEXCLUSION - echo "" - echo -e "\n${CGreen}SUCCESS: Secondary USB Backup Folder added to TAR Exclusion File${CCLear}" - sleep 2 - else - echo -e "\n\n${CRed}WARNING: Secondary USB Backup Folder not added to TAR Exclusion File${CClear}" - echo "" - echo -e "${CCyan}You are assuming the risk and responsibility of your USB drive possibly running out" - echo -e "of space due to exponential backup file growth, as well as the ever-increasing time" - echo -e "it will take to run backups. Please consider the risk of loss of all backups if your" - echo -e "USB drive fails. Consider adding your USB backup folder as an exclusion in your TAR" - echo -e "exclusion file to mitigate some of these risks.${CClear}" - echo "" - read -rsp $'Press any key to acknowledge you are taking ownership of this risk...\n' -n1 key - fi - fi - fi -fi - - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# This amazing function was borrowed from none other than @Martinski... a genius approach to filtering and deleting files/folders -# $1 = path, $2 = age, $3 = show/delete -_DeleteFileDirAfterNumberOfDays_ () -{ - local retCode=1 minNumOfDays=1 - if [ $# -eq 0 ] || [ -z "$1" ] || [ -z "$2" ] || \ - { [ ! -f "$1" ] && [ ! -d "$1" ] ; } - then - printf "\nFile or Directory [$1] is *NOT* FOUND.\n" - return 1 - fi - if ! echo "$2" | grep -qE "^[1-9][0-9]*$" || [ "$2" -lt "$minNumOfDays" ] - then - printf "\nNumber of days [$2] is *NOT* VALID.\n" - return 1 - fi - if [ "$(($(date +%s) - $(date +%s -r "$1")))" -gt "$(($2 * 86400))" ] - then - count=$((count+1)) - if [ "$3" == "show" ]; then - printf "$1\n" - elif [ "$3" == "delete" ]; then - if [ -f "$1" ] - then rmOpts="-f" - else rmOpts="-fr" - fi - printf "${CRed}Deleting $1..." - rm $rmOpts "$1" ; retCode="$?" - printf "${CGreen}OK\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Purging backup older than $2 days -> $1" >> $LOGFILE - fi - fi - return "$retCode" -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# Also coming to you from @Martinski! The following functions provide a mount point picker, slightly modified for my purposes -_GetMountPointSelectionIndex_() -{ - if [ $# -eq 0 ] || [ -z "$1" ] ; then return 1 ; fi - - local theAllStr="${GRNct}all${NOct}" - local numRegExp="([1-9]|[1-9][0-9])" - local theExitStr="${GRNct}e${NOct}=Exit" - local selectStr promptStr indexNum indexList multiIndexListOK - - if [ "$1" -eq 1 ] - then selectStr="${GRNct}1${NOct}" - else selectStr="${GRNct}1${NOct}-${GRNct}${1}${NOct}" - fi - - if [ $# -lt 2 ] || [ "$2" != "-MULTIOK" ] - then - multiIndexListOK=false - promptStr="Enter selection:[${selectStr}] [${theExitStr}]?" - else - multiIndexListOK=true - promptStr="Enter selection:[${selectStr} | ${theAllStr}] [${theExitStr}]?" - fi - selectionIndex=0 multiIndex=false - - while true - do - printf "${promptStr} " ; read -r userInput - - if [ -z "$userInput" ] || \ - echo "$userInput" | grep -qE "^(e|exit|Exit)$" - then selectionIndex="NONE" ; break ; fi - - if "$multiIndexListOK" && \ - echo "$userInput" | grep -qE "^(all|All)$" - then selectionIndex="ALL" ; break ; fi - - if echo "$userInput" | grep -qE "^${numRegExp}$" && \ - [ "$userInput" -gt 0 ] && [ "$userInput" -le "$1" ] - then selectionIndex="$userInput" ; break ; fi - - if "$multiIndexListOK" && \ - echo "$userInput" | grep -qE "^${numRegExp}\-${numRegExp}[ ]*$" - then - index1st="$(echo "$userInput" | awk -F '-' '{print $1}')" - indexMax="$(echo "$userInput" | awk -F '-' '{print $2}')" - if [ "$index1st" -lt "$indexMax" ] && \ - [ "$index1st" -gt 0 ] && [ "$index1st" -le "$1" ] && \ - [ "$indexMax" -gt 0 ] && [ "$indexMax" -le "$1" ] - then - indexNum="$index1st" - indexList="$indexNum" - while [ "$indexNum" -lt "$indexMax" ] - do - indexNum="$((indexNum+1))" - indexList="${indexList},${indexNum}" - done - userInput="$indexList" - fi - fi - - if "$multiIndexListOK" && \ - echo "$userInput" | grep -qE "^${numRegExp}(,[ ]*${numRegExp}[ ]*)+$" - then - indecesOK=true - indexList="$(echo "$userInput" | sed 's/ //g' | sed 's/,/ /g')" - for theIndex in $indexList - do - if [ "$theIndex" -eq 0 ] || [ "$theIndex" -gt "$1" ] - then indecesOK=false ; break ; fi - done - "$indecesOK" && selectionIndex="$indexList" && multiIndex=true && break - fi - - printf "${REDct}INVALID selection.${NOct}\n" - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -##----------------------------------------## -## Modified by Martinski W. [2023-Nov-08] ## -##----------------------------------------## -_GetMountPointSelection_() -{ - if [ $# -eq 0 ] || [ -z "$1" ] - then printf "\n${REDct}**ERROR**${NOct}: No Parameters.\n" ; return 1 ; fi - - local mounPointCnt mounPointVar="" mounPointTmp="" - local mountPointRegExp="^/dev/sd.* /tmp/mnt/.*" - - mounPointPath="" - mounPointCnt="$(mount | grep -c "$mountPointRegExp")" - if [ "$mounPointCnt" -eq 0 ] - then - printf "\n${REDct}**ERROR**${NOct}: Mount Points for USB-attached drives are *NOT* found.\n" - return 1 - fi - if [ "$mounPointCnt" -eq 1 ] - then - mounPointPath="$(mount | grep "$mountPointRegExp" | awk -F ' ' '{print $3}')" - return 0 - fi - local retCode=0 indexType multiIndex=false selectionIndex=0 - - if [ $# -lt 2 ] || [ "$2" != "-MULTIOK" ] - then indexType="" ; else indexType="$2" ; fi - - printf "\n$1\n" - mounPointCnt=0 - while IFS="$(printf '\n')" read -r mounPointInfo - do - mounPointCnt="$((mounPointCnt + 1))" - mounPointVar="MP_${mounPointCnt}_INFO" - eval "MP_${mounPointCnt}_INFO=$(echo "$mounPointInfo" | sed 's/[(<; >)]/\\&/g')" - printf "${GRNct}%3d${NOct}. " "$mounPointCnt" - eval echo "\$${mounPointVar}" - done <> $LOGFILE - - mkdir -m 755 -p "$CUSTOM_EMAIL_LIBDir" - curl -kLSs --retry 3 --retry-delay 5 --retry-connrefused \ - "${CEM_LIB_URL}/$CUSTOM_EMAIL_LIBName" -o "$CUSTOM_EMAIL_LIBFile" - curlCode="$?" - - if [ "$curlCode" -eq 0 ] && [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - retCode=0 - chmod 755 "$CUSTOM_EMAIL_LIBFile" - . "$CUSTOM_EMAIL_LIBFile" - #printf "\nDone.\n" - else - retCode=1 - echo -e "${CRed}ERROR: Unable to download the shared library script file [$CUSTOM_EMAIL_LIBName].${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to download the shared library script file [$CUSTOM_EMAIL_LIBName]." >> $LOGFILE - fi - return "$retCode" -} - -#-----------------------------------------------------------# -# ARG1: The email name/alias to be used as "FROM_NAME" -# ARG2: The email Subject string. -# ARG3: Full path of file containing the email Body text. -# ARG4: The email Body Title string [OPTIONAL]. -#-----------------------------------------------------------# -_SendEMailNotification_() -{ - - if [ -z "${amtmIsEMailConfigFileEnabled:+xSETx}" ] - then - echo -e "${CRed}ERROR: Email library script [$CUSTOM_EMAIL_LIBFile] *NOT* FOUND.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Email library script [$CUSTOM_EMAIL_LIBFile] *NOT* FOUND." >> $LOGFILE - return 1 - fi - - if [ $# -lt 3 ] || [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] - then - echo -e "${CRed}ERROR: INSUFFICIENT email parameters${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: INSUFFICIENT email parameters." >> $LOGFILE - return 1 - fi - local retCode emailBodyTitleStr="" - - [ $# -gt 3 ] && [ -n "$4" ] && emailBodyTitleStr="$4" - - FROM_NAME="$1" - _SendEMailNotification_CEM_ "$2" "-F=$3" "$emailBodyTitleStr" - retCode="$?" - - if [ "$retCode" -eq 0 ] - then - echo -e "${CGreen}STATUS: Email notification was sent successfully [$2].${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Email notification was sent successfully [$2]." >> $LOGFILE - else - echo -e "${CRed}ERROR: Failure to send email notification [Error Code: $retCode][$2].${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Failure to send email notification [$2]." >> $LOGFILE - fi - - return "$retCode" -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# sendmessage is a function that sends an AMTM email based on success/failure during the backup process -# $1 = Success/Failure 0/1 -# $2 = Component - -sendmessage () { - -#If AMTM email functionality is disabled, return back to the function call -if [ "$AMTMEMAIL" == "0" ]; then - return -fi - - #Load, install or update the shared AMTM Email integration library - if [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - . "$CUSTOM_EMAIL_LIBFile" - - if [ -z "${CEM_LIB_VERSION:+xSETx}" ] || \ - _CheckLibraryUpdates_CEM_ "$CUSTOM_EMAIL_LIBDir" quiet - then - _DownloadCEMLibraryFile_ "update" - fi - else - _DownloadCEMLibraryFile_ "install" - fi - - cemIsFormatHTML=true - cemIsVerboseMode=false - tmpEMailBodyFile="/tmp/var/tmp/tmpEMailBody_${scriptFileNTag}.$$.TXT" - - #Pick the scenario and send email - - if [ "$2" == "Unable to mount network drive" ]; then - emailSubject="FAILURE: Unable to mount network drive" - emailBodyTitle="FAILURE: Unable to mount network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to mount the primary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Unable to mount secondary network drive" ]; then - emailSubject="FAILURE: Unable to mount secondary network drive" - emailBodyTitle="FAILURE: Unable to mount secondary network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to mount the secondary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Unable to unmount network drive" ]; then - emailSubject="FAILURE: Unable to unmount network drive" - emailBodyTitle="FAILURE: Unable to unmount network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to unmount the primary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Unable to unmount secondary network drive" ]; then - emailSubject="FAILURE: Unable to unmount secondary network drive" - emailBodyTitle="FAILURE: Unable to unmount secondary network drive" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to unmount the secondary network drive.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Error creating JFFS tar file" ]; then - emailSubject="FAILURE: Error creating JFFS tar file" - emailBodyTitle="FAILURE: Error creating JFFS tar file" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to create/write the JFFS tar file.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "JFFS tar file integrity failure" ]; then - emailSubject="FAILURE: JFFS tar file integrity failure" - emailBodyTitle="FAILURE: JFFS tar file integrity failure" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON experienced a JFFS tar file integrity issue.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Error creating EXT USB tar file" ]; then - emailSubject="FAILURE: Error creating EXT USB tar file" - emailBodyTitle="FAILURE: Error creating EXT USB tar file" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON was unable to create/write the EXT USB tar file.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "EXT USB tar file integrity failure" ]; then - emailSubject="FAILURE: EXT USB tar file integrity failure" - emailBodyTitle="FAILURE: EXT USB tar file integrity failure" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "FAILURE: BACKUPMON experienced a EXT USB tar file integrity issue.\n" - printf "Please check your network environment and configuration.\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Primary Backup completed successfully" ]; then - emailSubject="SUCCESS: Primary Backup completed successfully" - emailBodyTitle="SUCCESS: Primary Backup completed successfully" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "SUCCESS: BACKUPMON completed a successful primary backup to destination: ${BACKUPMEDIA}\n" - printf "\n" - } > "$tmpEMailBodyFile" - elif [ "$2" == "Secondary Backup completed successfully" ]; then - emailSubject="SUCCESS: Secondary Backup completed successfully" - emailBodyTitle="SUCCESS: Secondary Backup completed successfully" - { - printf "Date/Time: $(date +'%b %d %Y %X')\n" - printf "Asus Router Model: ${ROUTERMODEL}\n" - printf "Firmware/Build Number: ${FWBUILD}\n" - printf "EXT USB Drive Label Name: ${EXTLABEL}\n" - printf "\n" - printf "SUCCESS: BACKUPMON completed a successful secondary backup to destination: ${BACKUPMEDIA}\n" - printf "\n" - } > "$tmpEMailBodyFile" - fi - - if [ "$1" == "0" ] && [ "$AMTMEMAILSUCCESS" == "1" ]; then - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" "$emailBodyTitle" - fi - - if [ "$1" == "1" ] && [ "$AMTMEMAILFAILURE" == "1" ]; then - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" "$emailBodyTitle" - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# purgebackups is a function that allows you to see which backups will be purged before deleting them... -purgebackups () { - - if [ "$PURGE" -eq 0 ]; then - return - fi - - clear - logoNM - echo "" - echo -e "${CYellow}Purge Perpetual Backups Utility${CClear}" - echo "" - echo -e "${CCyan}You are about to purge backups! FUN! This action is irreversible and permanent." - echo -e "${CCyan}But no worries! BACKUPMON will first show you which backups are affected by the" - echo -e "${CYellow}$PURGELIMIT day${CCyan} limit you have configured." - echo "" - echo -e "${CCyan}Do you wish to proceed?${CClear}" - if promptyn "(y/n): "; then - - echo "" - echo -e "\n${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - - # Show a list of valid backups on screen - count=0 - echo -e "${CGreen}STATUS: Perpetual backup folders identified below are older than $PURGELIMIT days:${CRed}" - for FOLDER in $(ls ${UNCDRIVE}${BKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${UNCDRIVE}${BKDIR}/$FOLDER" $PURGELIMIT show - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual backup folders were identified older than $PURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual backup folders older than $PURGELIMIT days were found. Nothing to delete." >> $LOGFILE - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}" - sleep 2 - return - fi - - # Continue with deleting backups permanently - echo "" - echo -e "${CGreen}Would you like to permanently purge these backups?${CClear}" - - if promptyn "(y/n): "; then - echo -e "\n${CRed}" - for FOLDER in $(ls ${UNCDRIVE}${BKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${UNCDRIVE}${BKDIR}/$FOLDER" $PURGELIMIT delete - done - - echo "" - echo -e "${CGreen}STATUS: Perpetual backup folders older than $PURGELIMIT days deleted.${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}\n" - sleep 2 - return - - else - - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}\n" - sleep 2 - return - fi - fi - - else - echo "" - echo -e "\n${CGreen}Exiting Purge Perpetual Backups Utility...${CClear}" - sleep 2 - return - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# autopurge is a function that allows you to purge backups throught a commandline switch... if you're daring! -autopurge () { - - if [ "$FREQUENCY" != "P" ]; then - echo -e "${CRed}ERROR: Perpetual backups are not configured. Please check your configuration. Exiting.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Perpetual backups are not configured. Please check your configuration." >> $LOGFILE - exit 1 - fi - - if [ "$PURGE" -eq 0 ]; then - return - fi - - echo "" - echo -e "${CGreen}[Auto Purge Primary Backups Commencing]..." - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - - # Continue with deleting backups permanently - count=0 - for FOLDER in $(ls ${UNCDRIVE}${BKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${UNCDRIVE}${BKDIR}/$FOLDER" $PURGELIMIT delete - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual backup folders were identified older than $PURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual backup folders older than $PURGELIMIT days were found. Nothing to delete." >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - return - - else - - echo -e "${CGreen}STATUS: Perpetual backup folders older than $PURGELIMIT days deleted.${CClear}" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - return - fi - - else - - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - return - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# purgebackups is a function that allows you to see which backups will be purged before deleting them... -purgesecondaries () { - - if [ $SECONDARYPURGE -eq 0 ]; then - return - fi - - if [ $SECONDARYSTATUS -eq 0 ]; then - return - fi - - clear - logoNM - echo "" - echo -e "${CYellow}Purge Perpetual Secondary Backups Utility${CClear}" - echo "" - echo -e "${CCyan}You are about to purge secondary backups! FUN! This action is irreversible and" - echo -e "${CCyan}permanent. But no worries! BACKUPMON will first show you which backups are affected" - echo -e "${CCyan}by the ${CYellow}$SECONDARYPURGELIMIT day${CCyan} limit you have configured." - echo "" - echo -e "${CCyan}Do you wish to proceed?${CClear}" - if promptyn "(y/n): "; then - - echo "" - echo -e "\n${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: External Secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External Secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - # Show a list of valid backups on screen - count=0 - echo -e "${CGreen}STATUS: Perpetual secondary backup folders identified below are older than $SECONDARYPURGELIMIT days:${CRed}" - for FOLDER in $(ls ${SECONDARYUNCDRIVE}${SECONDARYBKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$FOLDER" $SECONDARYPURGELIMIT show - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual secondary backup folders were identified older than $SECONDARYPURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual secondary backup folders older than $SECONDARYPURGELIMIT days were found. Nothing to delete." >> $LOGFILE - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}" - sleep 2 - return - fi - - # Continue with deleting backups permanently - echo "" - echo -e "${CGreen}Would you like to permanently purge these secondary backups?${CClear}" - - if promptyn "(y/n): "; then - echo -e "\n${CRed}" - for FOLDER in $(ls ${SECONDARYUNCDRIVE}${SECONDARYBKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$FOLDER" $SECONDARYPURGELIMIT delete - done - - echo "" - echo -e "${CGreen}STATUS: Perpetual secondary backup folders older than $SECONDARYPURGELIMIT days deleted.${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}\n" - sleep 2 - return - - else - - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}\n" - sleep 2 - return - fi - fi - - else - echo "" - echo -e "\n${CGreen}Exiting Purge Perpetual Secondary Backups Utility...${CClear}" - sleep 2 - return - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# autopurgesecondaries is a function that allows you to purge secondary backups throught a commandline switch... if you're daring! -autopurgesecondaries () { - - if [ "$SECONDARYFREQUENCY" != "P" ]; then - echo -e "${CRed}ERROR: Perpetual secondary backups are not configured. Please check your configuration. Exiting.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Perpetual secondary backups are not configured. Please check your configuration." >> $LOGFILE - exit 1 - fi - - if [ $SECONDARYPURGE -eq 0 ]; then - return - fi - - if [ $SECONDARYSTATUS -eq 0 ]; then - return - fi - - echo "" - echo -e "${CGreen}[Auto Purge Secondary Backups Commencing]..." - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Create the local backup drive mount directory - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: External secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External secondary drive mount point not set. Created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - # Continue with deleting backups permanently - count=0 - for FOLDER in $(ls ${SECONDARYUNCDRIVE}${SECONDARYBKDIR} -1) - do - _DeleteFileDirAfterNumberOfDays_ "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$FOLDER" $SECONDARYPURGELIMIT delete - done - - # If there are no valid backups within range, display a message and exit - if [ $count -eq 0 ]; then - echo -e "${CYellow}INFO: No perpetual secondary backup folders were identified older than $SECONDARYPURGELIMIT days.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: No perpetual secondary backup folders older than $SECONDARYPURGELIMIT days were found. Nothing to delete." >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - return - - else - - echo -e "${CGreen}STATUS: Perpetual secondary backup folders older than $SECONDARYPURGELIMIT days deleted.${CClear}" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - return - fi - - else - - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - return - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# vsetup is a function that sets up, confiures and allows you to launch backupmon on your router... -vsetup () { - - # Check for and add an alias for backupmon - if ! grep -F "sh /jffs/scripts/backupmon.sh" /jffs/configs/profile.add >/dev/null 2>/dev/null; then - echo "alias backupmon=\"sh /jffs/scripts/backupmon.sh\" # backupmon" >> /jffs/configs/profile.add - fi - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}WARNING: BACKUPMON is not configured. Proceding with 1st time setup!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: BACKUPMON is not configured. Proceding with 1st time setup!" >> $LOGFILE - sleep 3 - vconfig - fi - - #Check to see if old conflicting variable names are being used - if [ ! -z "$USERNAME" ]; then - sed -i "s/USERNAME=/BTUSERNAME=/" "/jffs/addons/backupmon.d/backupmon.cfg" - sed -i "s/PASSWORD=/BTPASSWORD=/" "/jffs/addons/backupmon.d/backupmon.cfg" - source $CFGPATH - fi - - updatecheck - - while true; do - clear - logoNM - # Check for updates - if [ "$UpdateNotify" != "0" ]; then - echo -e "${CRed} $UpdateNotify" - fi - echo "" - echo -e "${InvDkGray}${CWhite} Setup + Operations Menu ${CClear}" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Backup Operations" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} bk ${CClear}${CCyan}: Run a Manual Backup" - echo -e "${InvDkGray}${CWhite} rs ${CClear}${CCyan}: Run a Manual Restore" - if [ $PURGE == "1" ]; then - echo -e "${InvDkGray}${CWhite} pg ${CClear}${CCyan}: Purge Perpetual Primary Backups" - else - echo -e "${InvDkGray}${CWhite} pg ${CClear}${CDkGray}: Purge Perpetual Primary Backups" - fi - if [ $SECONDARYPURGE == "1" ] && [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${InvDkGray}${CWhite} ps ${CClear}${CCyan}: Purge Perpetual Secondary Backups" - else - echo -e "${InvDkGray}${CWhite} ps ${CClear}${CDkGray}: Purge Perpetual Secondary Backups" - fi - echo -e "${InvDkGray}${CWhite} ep ${CClear}${CCyan}: Edit your Primary TAR Exclusion File" - if [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${InvDkGray}${CWhite} es ${CClear}${CCyan}: Edit your Secondary TAR Exclusion File" - else - echo -e "${InvDkGray}${CWhite} es ${CClear}${CDkGray}: Edit your Secondary TAR Exclusion File" - fi - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Testing + Diagnostics Operations" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} ts ${CClear}${CCyan}: Test your Network Backup Target" - echo -e "${InvDkGray}${CWhite} te ${CClear}${CCyan}: Test AMTM Email Communications" - echo "" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${CGreen}Setup + Configuration" - echo -e "${CGreen}----------------------------------------------------------------" - echo -e "${InvDkGray}${CWhite} sc ${CClear}${CCyan}: Setup and Configure BACKUPMON" - echo -e "${InvDkGray}${CWhite} vl ${CClear}${CCyan}: View logs" - echo -e "${InvDkGray}${CWhite} up ${CClear}${CCyan}: Check for latest updates" - echo -e "${InvDkGray}${CWhite} un ${CClear}${CCyan}: Uninstall" - echo -e "${InvDkGray}${CWhite} e ${CClear}${CCyan}: Exit" - echo -e "${CGreen}----------------------------------------------------------------" - echo "" - printf "Selection: " - read -r InstallSelection - - # Execute chosen selections - case "$InstallSelection" in - - bk) - clear - #sh /jffs/scripts/backupmon.sh -backup - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - echo "" - echo -e "${CGreen}[Primary Backup Commencing]... " - echo "" - echo -e "${CCyan}Messages:${CClear}" - backup - sendmessage 0 "Primary Backup completed successfully" - secondary #Run secondary backups - if [ $SECONDARYSTATUS -eq 1 ]; then - sendmessage 0 "Secondary Backup completed successfully" - fi - ;; - - rs) - clear - #sh /jffs/scripts/backupmon.sh -restore - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - echo "" - restore - ;; - - pg) - clear - if [ $FREQUENCY == "P" ]; then - purgebackups - fi - ;; - - ps) - clear - if [ $SECONDARYFREQUENCY == "P" ]; then - purgesecondaries - fi - ;; - - sc) - clear - vconfig - ;; - - ts) - clear - testtarget - ;; - - te) - clear - logoNM - echo "" - echo -e "${CCyan}This test assumes that you have AMTM Email set up correctly. If" - echo -e "${CCyan}you still need to configure this feature, open up AMTM -> (em)" - echo -e "${CCyan}to add your email server info, credentials, ports, protocols," - echo -e "${CCyan}and other pertinent info.${CClear}" - echo "" - echo -e "Would you like to send a TEST email from BACKUPMON?" - if promptyn "(y/n): "; then - echo "" - - if [ -f "$CUSTOM_EMAIL_LIBFile" ] - then - . "$CUSTOM_EMAIL_LIBFile" - - if [ -z "${CEM_LIB_VERSION:+xSETx}" ] || \ - _CheckLibraryUpdates_CEM_ "$CUSTOM_EMAIL_LIBDir" quiet - then - echo "" - _DownloadCEMLibraryFile_ "update" - fi - else - echo "" - _DownloadCEMLibraryFile_ "install" - fi - - cemIsFormatHTML=true - cemIsVerboseMode=true - emailBodyTitle="Testing Email Notification" - emailSubject="TEST: BACKUPMON Email Notification" - tmpEMailBodyFile="/tmp/var/tmp/tmpEMailBody_${scriptFileNTag}.$$.TXT" - - { - printf "This is a TEST to check & verify if sending email notifications is working well from BACKUPMON.\n" - } > "$tmpEMailBodyFile" - - _SendEMailNotification_ "BACKUPMON v$Version" "$emailSubject" "$tmpEMailBodyFile" "$emailBodyTitle" - - echo "" - read -rsp $'Press any key to acknowledge...\n' -n1 key - - fi - ;; - - ep) - export TERM=linux - nano +999999 --linenumbers $EXCLUSION - ;; - - es) - if [ $SECONDARYSTATUS -eq 1 ]; then - export TERM=linux - nano +999999 --linenumbers $SECONDARYEXCLUSION - fi - ;; - - vl) - echo "" - vlogs - ;; - - up) - echo "" - vupdate - ;; - - un) - echo "" - vuninstall - ;; - - [Ee]) - echo -e "${CClear}" - exit 0 - ;; - - *) - echo "" - echo -e "${CRed}Invalid choice - Please enter a valid option...${CClear}" - echo "" - sleep 2 - ;; - - esac - done -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# backup routine by @Jeffrey Young showing a great way to connect to an external network location to dump backups to -backup () { - - # Check to see if a leftover copy of backupmon.cfg is still sitting in /jffs/scripts and delete it - rm -f /jffs/scripts/backupmon.cfg - - # Check to see if a local backup drive mount is available, if not, create one. - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Newly created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Newly created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # Check for the Swap File Exclusion - if [ "$BACKUPSWAP" == "0" ]; then - excludeswap - fi - - # If everything successfully was created, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check the build to see if modprobe needs to be called - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - fi - - # Check to see if EXT USB is backing up to EXT USB - if [ "$EXTDRIVE" == "$UNCDRIVE" ]; then - BKDIREXCL=$(echo $BKDIR | sed 's/^.\{1\}//') - if grep -q $BKDIREXCL $EXCLUSION; then - echo -e "${CGreen}STATUS: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place." >> $LOGFILE - else - echo -e "${CYellow}WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!" >> $LOGFILE - fi - fi - - # If the local mount is connected to the UNC, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) mounted successfully as: $UNCDRIVE ${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) mounted successfully as: $UNCDRIVE" >> $LOGFILE - else - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - fi - - # Create the backup directories and daily directories if they do not exist yet - if ! [ -d "${UNCDRIVE}${BKDIR}" ]; then - mkdir -p "${UNCDRIVE}${BKDIR}" - echo -e "${CGreen}STATUS: Backup Directory successfully created." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Backup Directory successfully created." >> $LOGFILE - fi - - # Create frequency folders by week, month, year or perpetual - if [ $FREQUENCY == "W" ]; then - if ! [ -d "${UNCDRIVE}${BKDIR}/${WDAY}" ] - then mkdir -p "${UNCDRIVE}${BKDIR}/${WDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - elif [ $FREQUENCY == "M" ]; then - if ! [ -d "${UNCDRIVE}${BKDIR}/${MDAY}" ] - then mkdir -p "${UNCDRIVE}${BKDIR}/${MDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - elif [ $FREQUENCY == "Y" ]; then - if ! [ -d "${UNCDRIVE}${BKDIR}/${YDAY}" ] - then mkdir -p "${UNCDRIVE}${BKDIR}/${YDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - elif [ $FREQUENCY == "P" ]; then - PDAY=$(date +"%Y%m%d-%H%M%S") - if ! [ -d "${UNCDRIVE}${BKDIR}/${PDAY}" ]; then - mkdir -p "${UNCDRIVE}${BKDIR}/${PDAY}" - echo -e "${CGreen}STATUS: Daily Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Backup Directory successfully created." >> $LOGFILE - fi - fi - - if [ $MODE == "Basic" ]; then - # Remove old tar files if they exist in the daily folders - if [ $FREQUENCY == "W" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar* - elif [ $FREQUENCY == "M" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar* - elif [ $FREQUENCY == "Y" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar* - elif [ $FREQUENCY == "P" ]; then - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar* - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg* - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt* - [ -f ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar* ] && rm ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar* - fi - fi - - if [ $MODE == "Basic" ]; then - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "P" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${PDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${PDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "P" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - - elif [ $MODE == "Advanced" ]; then - - datelabel=$(date +"%Y%m%d-%H%M%S") - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${WDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${WDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${MDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${MDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -X $EXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}JFFS${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up JFFS to ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}NVRAM${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up NVRAM to ${UNCDRIVE}${BKDIR}/${YDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished copying ${CYellow}routerfw.txt${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying routerfw.txt to ${UNCDRIVE}${BKDIR}/${YDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $FREQUENCY == "W" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "M" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $FREQUENCY == "Y" ]; then - if ! [ -z $EXCLUSION ]; then - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $EXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished backing up ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished backing up EXT Drive in $timertotal sec to ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for ${UNCDRIVE}${BKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - fi - - #added copies of the backupmon.sh, backupmon.cfg, exclusions list and NVRAM to backup location for easy copy/restore - cp /jffs/scripts/backupmon.sh ${UNCDRIVE}${BKDIR}/backupmon.sh - echo -e "${CGreen}STATUS: Finished copying ${CYellow}backupmon.sh${CGreen} script to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying backupmon.sh script to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - cp $CFGPATH ${UNCDRIVE}${BKDIR}/backupmon.cfg - echo -e "${CGreen}STATUS: Finished copying ${CYellow}backupmon.cfg${CGreen} file to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying backupmon.cfg file to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - - if ! [ -z $EXCLUSION ]; then - EXCLFILE=$(echo $EXCLUSION | sed 's:.*/::') - cp $EXCLUSION ${UNCDRIVE}${BKDIR}/$EXCLFILE - echo -e "${CGreen}STATUS: Finished copying ${CYellow}$EXCLFILE${CGreen} file to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying $EXCLFILE file to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - fi - - #Please note: the nvram.txt export is for reference only. This file cannot be used to restore from, just to reference from. - nvram show 2>/dev/null > ${UNCDRIVE}${BKDIR}/nvram.txt - echo -e "${CGreen}STATUS: Finished copying reference ${CYellow}nvram.txt${CGreen} extract to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying reference nvram.txt extract to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - - #include restore instructions in the backup location - { echo 'RESTORE INSTRUCTIONS' - echo '' - echo 'IMPORTANT:' - echo 'Asus Router Model:' ${ROUTERMODEL} - echo 'Firmware/Build Number:' ${FWBUILD} - echo 'EXT USB Drive Label Name:' ${EXTLABEL} - echo '' - echo 'WARNING: Do NOT attempt to restore if your Asus Router Model or Firmware/Build Numbers differ from your backups!' - echo '' - echo 'Please ensure your have performed the following before restoring your backups:' - echo '1.) Enable SSH in router UI, and connect via an SSH Terminal (like PuTTY).' - echo '2.) Run "AMTM" and format a new USB drive on your router - label it exactly the same name as before (see above)! Reboot.' - echo '3.) After reboot, SSH back in to AMTM, create your swap file (if required). This action should automatically enable JFFS.' - echo '4.) From the UI, verify JFFS scripting enabled in the router OS, if not, enable and perform another reboot.' - echo '5.) Restore the backupmon.sh & backupmon.cfg files (located under your backup folder) into your /jffs/scripts folder.' - echo '6.) Run "sh backupmon.sh -setup" and ensure that all of the settings are correct before running a restore.' - echo '7.) Run "sh backupmon.sh -restore", pick which backup you want to restore, and confirm before proceeding!' - echo '8.) After the restore finishes, perform another reboot. Everything should be restored as normal!' - } > ${UNCDRIVE}${BKDIR}/instructions.txt - echo -e "${CGreen}STATUS: Finished copying restoration ${CYellow}instructions.txt${CGreen} file to ${UNCDRIVE}${BKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished copying restoration instructions.txt file to ${UNCDRIVE}${BKDIR}" >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - # Unmount the locally connected mounted drive - unmountdrv - - else - - # There's problems with mounting the drive - check paths and permissions! - echo -e "${CRed}ERROR: Failed to run Backup Script -- Drive mount failed. Please check your configuration!${CClear}" - logger "BACKUPMON ERROR: Failed to run Backup Script -- Drive mount failed. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Failed to run Backup Script -- Drive mount failed. Please check your configuration!" >> $LOGFILE - sleep 3 - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# backup routine by @Jeffrey Young showing a great way to connect to an external network location to dump backups to -secondary () { - - if [ $SECONDARYSTATUS -eq 0 ]; then - return - fi - - # Run a secondary backup - echo "" - echo -e "${CGreen}[Secondary Backup Commencing]..." - echo "" - echo -e "${CCyan}Messages:${CClear}" - - # Check to see if a local backup drive mount is available, if not, create one. - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: Secondary external mount point not set. Newly created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: Secondary external mount point not set. Newly created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # Check for the Swap File Exclusion - if [ "$BACKUPSWAP" == "0" ]; then - excludeswap - fi - - # If everything successfully was created, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check the build to see if modprobe needs to be called - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - fi - - # Check to see if EXT USB is backing up to EXT USB - if [ "$EXTDRIVE" == "$SECONDARYUNCDRIVE" ]; then - SECONDARYBKDIREXCL=$(echo $SECONDARYBKDIR | sed 's/^.\{1\}//') - if grep -q $SECONDARYBKDIREXCL $SECONDARYEXCLUSION; then - echo -e "${CGreen}STATUS: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is in place." >> $LOGFILE - else - echo -e "${CYellow}WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: **High Risk** -> EXT USB is backing up to EXT USB. TAR exclusion is missing!" >> $LOGFILE - fi - fi - - # If the local mount is connected to the UNC, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) mounted successfully as: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) mounted successfully as: $SECONDARYUNCDRIVE" >> $LOGFILE - else - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - fi - - # Create the secondary backup directories and daily directories if they do not exist yet - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" - echo -e "${CGreen}STATUS: Secondary Backup Directory successfully created." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary Backup Directory successfully created." >> $LOGFILE - fi - - # Create frequency folders by week, month, year or perpetual - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - elif [ $SECONDARYFREQUENCY == "P" ]; then - PDAY=$(date +"%Y%m%d-%H%M%S") - if ! [ -d "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}" ]; then - mkdir -p "${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}" - echo -e "${CGreen}STATUS: Daily Secondary Backup Directory successfully created.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Daily Secondary Backup Directory successfully created." >> $LOGFILE - fi - fi - - if [ $SECONDARYMODE == "Basic" ]; then - # Remove old tar files if they exist in the daily folders - if [ $SECONDARYFREQUENCY == "W" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar* - elif [ $SECONDARYFREQUENCY == "M" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar* - elif [ $SECONDARYFREQUENCY == "Y" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar* - elif [ $SECONDARYFREQUENCY == "P" ]; then - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt* - [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar* ] && rm ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar* - fi - fi - - if [ $SECONDARYMODE == "Basic" ]; then - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "P" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/jffs.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/nvram.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/routerfw.txt" >> $LOGFILE - sleep 1 - - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting secondary backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting secondary backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "P" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${PDAY}/${EXTLABEL}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - - elif [ $SECONDARYMODE == "Advanced" ]; then - - datelabel=$(date +"%Y%m%d-%H%M%S") - # If a TAR exclusion file exists, use it for the /jffs backup - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C /jffs . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz -C /jffs . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary JFFS tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary JFFS tar file." >> $LOGFILE - sendmessage 1 "Error creating JFFS tar file" - echo -e "\n" - exit 1 - fi - - logger "BACKUPMON INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}JFFS${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of JFFS to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in Secondary JFFS tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in Secondary JFFS tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "JFFS tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/jffs-${datelabel}.tar.gz" >> $LOGFILE - fi - - #Save a copy of the NVRAM - nvram save ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg >/dev/null 2>&1 - logger "BACKUPMON INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}NVRAM${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of NVRAM to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/nvram-${datelabel}.cfg" >> $LOGFILE - sleep 1 - - #include current router model/firmware/build info in the backup location - { echo 'RESTOREMODEL="'"$ROUTERMODEL"'"' - echo 'RESTOREBUILD="'"$FWBUILD"'"' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw-${datelabel}.txt - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}routerfw.txt${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw-${datelabel}.txt.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of routerfw.txt to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/routerfw-${datelabel}.txt" >> $LOGFILE - sleep 1 - fi - - # If a TAR exclusion file exists, use it for the USB drive backup - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}STATUS: Starting secondary backup of ${CYellow}EXT Drive${CGreen} on $(date). Please stand by...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Starting secondary backup of EXT Drive on $(date)" >> $LOGFILE - timerstart=$(date +%s) - if [ $SECONDARYFREQUENCY == "W" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${WDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "M" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${MDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - - elif [ $SECONDARYFREQUENCY == "Y" ]; then - if ! [ -z $SECONDARYEXCLUSION ]; then - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -X $SECONDARYEXCLUSION -C $EXTDRIVE . >/dev/null - else - tar -zcf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz -C $EXTDRIVE . >/dev/null - fi - TE=$? - if [ $TE -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected creating secondary EXT Drive tar file. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected creating secondary EXT Drive tar file." >> $LOGFILE - sendmessage 1 "Error creating EXT USB tar file" - echo -e "\n" - exit 1 - fi - - timerend=$(date +%s); timertotal=$(( timerend - timerstart )) - logger "BACKUPMON INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" - echo -e "${CGreen}STATUS: Finished secondary backup of ${CYellow}EXT Drive${CGreen} in ${CYellow}$timertotal sec${CGreen} to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary backup of EXT Drive in $timertotal sec to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - sleep 1 - - #Verify file integrity - tar -tzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz >/dev/null - TI=$? - if [ $TI -ne 0 ]; then - echo -e "${CRed}ERROR: Errors detected in secondary EXT Drive tar file integrity. Exiting Script!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Errors detected in secondary EXT Drive tar file integrity. Exiting." >> $LOGFILE - sendmessage 1 "EXT USB tar file integrity failure" - echo -e "\n" - exit 1 - elif [ $TI -eq 0 ]; then - echo -e "${CGreen}STATUS: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished integrity check for secondary ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${YDAY}/${EXTLABEL}-${datelabel}.tar.gz" >> $LOGFILE - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping backup." - logger "BACKUPMON WARNING: External USB drive not found. Skipping backup." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping backup." >> $LOGFILE - fi - fi - - #added copies of the backupmon.sh, backupmon.cfg, exclusions list and NVRAM to backup location for easy copy/restore - cp /jffs/scripts/backupmon.sh ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/backupmon.sh - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}backupmon.sh${CGreen} script to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of backupmon.sh script to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - cp $CFGPATH ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/backupmon.cfg - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}backupmon.cfg${CGreen} file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of backupmon.cfg file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - - if ! [ -z $SECONDARYEXCLUSION ]; then - EXCLFILE=$(echo $SECONDARYEXCLUSION | sed 's:.*/::') - cp $SECONDARYEXCLUSION ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$EXCLFILE - echo -e "${CGreen}STATUS: Finished secondary copy of ${CYellow}$EXCLFILE${CGreen} file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of $EXCLFILE file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - fi - - #Please note: the nvram.txt export is for reference only. This file cannot be used to restore from, just to reference from. - nvram show 2>/dev/null > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/nvram.txt - echo -e "${CGreen}STATUS: Finished secondary reference copy of ${CYellow}nvram.txt${CGreen} extract to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary reference copy of nvram.txt extract to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - - #include restore instructions in the backup location - { echo 'RESTORE INSTRUCTIONS' - echo '' - echo 'IMPORTANT:' - echo 'Asus Router Model:' ${ROUTERMODEL} - echo 'Firmware/Build Number:' ${FWBUILD} - echo 'EXT USB Drive Label Name:' ${EXTLABEL} - echo '' - echo 'WARNING: Do NOT attempt to restore if your Asus Router Model or Firmware/Build Numbers differ from your backups!' - echo '' - echo 'Please ensure your have performed the following before restoring your backups:' - echo '1.) Enable SSH in router UI, and connect via an SSH Terminal (like PuTTY).' - echo '2.) Run "AMTM" and format a new USB drive on your router - label it exactly the same name as before (see above)! Reboot.' - echo '3.) After reboot, SSH back in to AMTM, create your swap file (if required). This action should automatically enable JFFS.' - echo '4.) From the UI, verify JFFS scripting enabled in the router OS, if not, enable and perform another reboot.' - echo '5.) Restore the backupmon.sh & backupmon.cfg files (located under your backup folder) into your /jffs/scripts folder.' - echo '6.) Run "sh backupmon.sh -setup" and ensure that all of the settings are correct before running a restore.' - echo '7.) Run "sh backupmon.sh -restore", pick which backup you want to restore, and confirm before proceeding!' - echo '8.) After the restore finishes, perform another reboot. Everything should be restored as normal!' - } > ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/instructions.txt - echo -e "${CGreen}STATUS: Finished secondary copy of restoration ${CYellow}instructions.txt${CGreen} file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Finished secondary copy of restoration instructions.txt file to ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}" >> $LOGFILE - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - # Unmount the locally connected mounted drive - unmountsecondarydrv - - else - - # There's problems with mounting the drive - check paths and permissions! - echo -e "${CRed}ERROR: Failed to run Secondary Backup Script -- Drive mount failed. Please check your configuration!${CClear}" - logger "BACKUPMON ERROR: Failed to run Secondary Backup Script -- Drive mount failed. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Failed to run Secondary Backup Script -- Drive mount failed. Please check your configuration!" >> $LOGFILE - sleep 3 - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# restore function is a routine that allows you to pick a backup to be restored -restore () { - - clear - # Notify if a new version awaits - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - - # Display instructions - echo "" - echo -e "${CCyan}Normal Backup starting in 10 seconds. Press ${CGreen}[S]${CCyan}etup or ${CRed}[X]${CCyan} to override and enter ${CRed}RESTORE${CCyan} mode" - echo "" - echo -e "${CGreen}[Restore Backup Commencing]..." - echo "" - echo -e "${CGreen}Please ensure your have performed the following before restoring your backups:" - echo -e "${CGreen}1.) Enable SSH in router UI, and connect via an SSH Terminal (like PuTTY)." - echo -e "${CGreen}2.) Run 'AMTM' and format a new USB drive on your router - label it exactly the same name as before! Reboot." - echo -e "${CYellow} (please refer to your restore instruction.txt file to find your original EXT USB drive label)" - echo -e "${CGreen}3.) After reboot, SSH back in to AMTM, create your swap file (if required). This action should automatically enable JFFS." - echo -e "${CGreen}4.) From the UI, verify JFFS scripting enabled in the router OS, if not, enable and perform another reboot." - echo -e "${CGreen}5.) Restore the backupmon.sh & backupmon.cfg files (located under your backup folder) into your /jffs/scripts folder." - echo -e "${CGreen}6.) Run 'sh backupmon.sh -setup' and ensure that all of the settings are correct before running a restore." - echo -e "${CGreen}7.) Run 'sh backupmon.sh -restore', pick which backup you want to restore, and confirm before proceeding!" - echo -e "${CGreen}8.) After the restore finishes, perform another reboot. Everything should be restored as normal!" - echo "" - if [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${CYellow}Please choose whether you would like to restore from primary or secondary backups? (Primary=P, Secondary=S)" - while true; do - read -p 'Restoration Source (P/S)?: ' RESTOREFROM - case $RESTOREFROM in - [Pp] ) SOURCE="Primary"; echo ""; echo -e "${CGreen}[Primary Backup Source Selected]"; echo ""; break ;; - [Ss] ) SOURCE="Secondary"; echo ""; echo -e "${CGreen}[Secondary Backup Source Selected]"; echo ""; break ;; - "" ) echo -e "\nError: Please use either P or S.\n";; - * ) echo -e "\nError: Please use either P or S.\n";; - esac - done - else - SOURCE="Primary" - fi - - echo -e "${CCyan}Messages:${CClear}" - - if [ "$SOURCE" == "Primary" ]; then - - # Create the local backup drive mount directory - if ! [ -d $UNCDRIVE ]; then - mkdir -p $UNCDRIVE - chmod 777 $UNCDRIVE - echo -e "${CYellow}WARNING: External drive mount point not set. Created under: $UNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External drive mount point not set. Created under: $UNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $UNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the UNC - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: External drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCPWD=$(echo $BTPASSWORD | openssl enc -d -base64 -A) - mount -t cifs $UNC $UNCDRIVE -o "vers=${SMBVER},username=${BTUSERNAME},password=${UNENCPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -en ") mounted successfully under: $UNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) mounted successfully under: $UNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $UNCDRIVE`" ]; then - - # Show a list of valid backups on screen - echo -e "${CGreen}Available Backup Selections:${CClear}" - ls -ld ${UNCDRIVE}${BKDIR}/*/ - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - - if promptyn "(y/n): "; then - - while true; do - echo "" - echo -e "${CGreen}" - ok=0 - while [ $ok = 0 ] - do - if [ $FREQUENCY == "W" ]; then - echo -e "${CGreen}Enter the Day of the backup you wish to restore? (ex: Mon or Fri) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "M" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 02 or 27) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 2 ] || [ ${#BACKUPDATE1} -lt 2 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 2 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "Y" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 002 or 270) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "P" ]; then - echo -e "${CGreen}Enter the exact folder name of the backup you wish to restore? (ex: 20230909-083422) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountdrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 15 ] || [ ${#BACKUPDATE1} -lt 15 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 15 characters for the folder name format"; echo "" - else - ok=1 - fi - fi - done - - if [ -z "$BACKUPDATE1" ]; then - echo "" - echo -e "${CRed}ERROR: Invalid backup set chosen. Exiting script...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Invalid backup set chosen. Exiting script..." >> $LOGFILE - echo "" - exit 1 - else - BACKUPDATE=$BACKUPDATE1 - fi - - if [ $MODE == "Basic" ]; then - if [ -f ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/routerfw.txt ]; then - source ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/routerfw.txt - fi - break - elif [ $MODE == "Advanced" ]; then - echo "" - echo -e "${CGreen}Available Backup Files under:${CClear}" - - ls -lR /${UNCDRIVE}${BKDIR}/$BACKUPDATE - - echo "" - echo -e "${CGreen}Would you like to continue using this backup set?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the JFFS backup you wish to restore?${CClear}" - read ADVJFFS - echo "" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the EXT USB backup you wish to restore?${CClear}" - read ADVUSB - echo "" - fi - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the NVRAM backup you wish to restore?${CClear}" - read ADVNVRAM - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the routerfw.txt file to be referenced?${CClear}" - read ADVRTRFW - if [ -f ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVRTRFW} ]; then - source ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVRTRFW} - fi - break - fi - fi - done - - # Determine router model - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - - if [ ! -z $RESTOREMODEL ]; then - if [ "$ROUTERMODEL" != "$RESTOREMODEL" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router model is different from target router model." - echo -e "${CRed}ERROR: Restorations can only be performed on the same source/target router model or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain source/target routers are the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router model is different from target router model. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router model is different from target router model. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved from a different source router model.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - # Determine mismatched firmware - if [ ! -z $RESTOREBUILD ]; then - if [ "$FWBUILD" != "$RESTOREBUILD" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router firmware/build is different from target router firmware/build." - echo -e "${CRed}ERROR: Restorations can only be performed on the same router firmware/build or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain router firmware/build is the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved with older router firmware/build.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - if [ $MODE == "Basic" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this backup location:" - echo -e "${CBlue}${UNCDRIVE}${BKDIR}/$BACKUPDATE/" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/jffs.tar.gz -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - sleep 1 - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM" >> $LOGFILE - nvram restore ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/nvram.cfg >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - - elif [ $MODE == "Advanced" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this backup location:" - echo -e "${CBlue}${UNCDRIVE}${BKDIR}/$BACKUPDATE/" - echo -e "JFFS filename: $ADVJFFS" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "EXT USB filename: $ADVUSB" - fi - echo -e "NVRAM filename: $ADVNVRAM" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVJFFS} -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE" >> $LOGFILE - tar -xzf ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVUSB} -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM" >> $LOGFILE - nvram restore ${UNCDRIVE}${BKDIR}/${BACKUPDATE}/${ADVNVRAM} >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - fi - - # Unmount the backup drive - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo "" - echo -e "${CClear}" - return - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "${CClear}" - return - - fi - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountdrv - - echo -e "${CClear}" - return - - fi - - elif [ "$SOURCE" == "Secondary" ]; then - - # Create the local backup drive mount directory - if ! [ -d $SECONDARYUNCDRIVE ]; then - mkdir -p $SECONDARYUNCDRIVE - chmod 777 $SECONDARYUNCDRIVE - echo -e "${CYellow}WARNING: Secondary External drive mount point not set. Created under: $SECONDARYUNCDRIVE ${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: Secondary External drive mount point not set. Created under: $SECONDARYUNCDRIVE" >> $LOGFILE - sleep 3 - fi - - # If the mount does not exist yet, proceed - if ! mount | grep $SECONDARYUNCDRIVE > /dev/null 2>&1; then - - # Check if the build supports modprobe - if [ $(find /lib -name md4.ko | wc -l) -gt 0 ]; then - modprobe md4 > /dev/null # Required now by some 388.x firmware for mounting remote drives - fi - - # Mount the local backup drive directory to the Secondary UNC - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -en "${CGreen}STATUS: Secondary external drive (USB) skipping mounting process.${CClear}"; printf "%s\n" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external drive (USB) skipping mounting process." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - UNENCSECPWD=$(echo $SECONDARYPWD | openssl enc -d -base64 -A) - mount -t cifs $SECONDARYUNC $SECONDARYUNCDRIVE -o "vers=${SMBVER},username=${SECONDARYUSER},password=${UNENCSECPWD}" # Connect the UNC to the local backup drive mount - MRC=$? - if [ $MRC -eq 0 ]; then # If mount come back successful, then proceed - echo -en "${CGreen}STATUS: External secondary network drive ("; printf "%s" "${SECONDARYUNC}"; echo -en ") mounted successfully under: $SECONDARYUNCDRIVE ${CClear}"; printf "%s\n" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External secondary network drive ( ${SECONDARYUNC} ) mounted successfully under: $SECONDARYUNCDRIVE" >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to mount to secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to mount to secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to mount to secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to mount to secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to mount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi - sleep 2 - fi - - # If the UNC is successfully mounted, proceed - if [ -n "`mount | grep $SECONDARYUNCDRIVE`" ]; then - - # Show a list of valid backups on screen - echo -e "${CGreen}Available Backup Selections:${CClear}" - ls -ld ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/*/ - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - - if promptyn "(y/n): "; then - - while true; do - echo "" - echo -e "${CGreen}" - ok=0 - while [ $ok = 0 ] - do - if [ $SECONDARYFREQUENCY == "W" ]; then - echo -e "${CGreen}Enter the Day of the backup you wish to restore? (ex: Mon or Fri) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "M" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 02 or 27) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 2 ] || [ ${#BACKUPDATE1} -lt 2 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 2 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "Y" ]; then - echo -e "${CGreen}Enter the Day # of the backup you wish to restore? (ex: 002 or 270) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 3 ] || [ ${#BACKUPDATE1} -lt 3 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 3 characters for the day format"; echo "" - else - ok=1 - fi - elif [ $FREQUENCY == "P" ]; then - echo -e "${CGreen}Enter the exact folder name of the backup you wish to restore? (ex: 20230909-083422) (e=Exit): " - read BACKUPDATE1 - if [ $BACKUPDATE1 == "e" ]; then echo ""; echo -e "${CGreen}STATUS: Settling for 10 seconds..."; sleep 10; unmountsecondarydrv; echo -e "${CClear}"; return; fi - if [ ${#BACKUPDATE1} -gt 15 ] || [ ${#BACKUPDATE1} -lt 15 ] - then - echo -e "${CRed}ERROR: Invalid entry. Please use 15 characters for the folder name format"; echo "" - else - ok=1 - fi - fi - done - - if [ -z "$BACKUPDATE1" ]; then - echo "" - echo -e "${CRed}ERROR: Invalid backup set chosen. Exiting script...${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Invalid backup set chosen. Exiting script..." >> $LOGFILE - echo "" - exit 1 - else - BACKUPDATE=$BACKUPDATE1 - fi - - if [ $SECONDARYMODE == "Basic" ]; then - if [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/routerfw.txt ]; then - source ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/routerfw.txt - fi - break - elif [ $SECONDARYMODE == "Advanced" ]; then - echo "" - echo -e "${CGreen}Available Secondary Backup Files under:${CClear}" - - ls -lR /${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$BACKUPDATE - - echo "" - echo -e "${CGreen}Would you like to continue using this secondary backup set?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the JFFS backup you wish to restore?${CClear}" - read ADVJFFS - echo "" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the EXT USB backup you wish to restore?${CClear}" - read ADVUSB - echo "" - fi - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the NVRAM backup you wish to restore?${CClear}" - read ADVNVRAM - echo "" - echo -e "${CGreen}Enter the EXACT file name (including extensions) of the routerfw.txt file to be referenced?${CClear}" - read ADVRTRFW - if [ -f ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVRTRFW} ]; then - source ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVRTRFW} - fi - break - fi - fi - done - - # Determine router model - [ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - - if [ ! -z $RESTOREMODEL ]; then - if [ "$ROUTERMODEL" != "$RESTOREMODEL" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router model is different from target router model." - echo -e "${CRed}ERROR: Restorations can only be performed on the same source/target router model or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain source/target routers are the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router model is different from target router model. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router model is different from target router model. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved from a different source router model.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - # Determine mismatched firmware - if [ ! -z $RESTOREBUILD ]; then - if [ "$FWBUILD" != "$RESTOREBUILD" ]; then - echo "" - echo -e "${CRed}ERROR: Original source router firmware/build is different from target router firmware/build." - echo -e "${CRed}ERROR: Restorations can only be performed on the same router firmware/build or you may brick your router!" - echo -e "${CRed}ERROR: If you are certain router firmware/build is the same, please check and re-save your configuration!${CClear}" - logger "BACKUPMON ERROR: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Original source router firmware/build is different from target router firmware/build. Please check your configuration!" >> $LOGFILE - echo "" - echo -e "${CGreen}Would you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - echo -e "${CYellow}WARNING: Continuing restore using backup saved with older router firmware/build.${CClear}" - echo -e "${CYellow}WARNING: This may have disastrous effects on the operation and stabiliity of your router.${CClear}" - echo -e "${CYellow}WARNING: By continuing, you accept full responsibility for these actions.${CClear}" - else - exit 0 - fi - fi - fi - - if [ $SECONDARYMODE == "Basic" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a secondary backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this secondary backup location:" - echo -e "${CBlue}${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$BACKUPDATE/" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/jffs.tar.gz to /jffs" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/jffs.tar.gz -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz to $EXTDRIVE" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${EXTLABEL}.tar.gz -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/nvram.cfg to NVRAM" >> $LOGFILE - nvram restore ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/nvram.cfg >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Secondary backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - - elif [ $SECONDARYMODE == "Advanced" ]; then - echo "" - echo -e "${CRed}WARNING: You will be restoring a secondary backup of your JFFS, the entire contents of your External" - echo -e "USB drive and NVRAM back to their original locations. You will be restoring from this secondary backup location:" - echo -e "${CBlue}${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/$BACKUPDATE/" - echo -e "JFFS filename: $ADVJFFS" - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "EXT USB filename: $ADVUSB" - fi - echo -e "NVRAM filename: $ADVNVRAM" - echo "" - echo -e "${CGreen}LAST CHANCE: Are you absolutely sure you like to continue to restore from backup?" - if promptyn "(y/n): "; then - echo "" - echo "" - # Run the TAR commands to restore backups to their original locations - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVJFFS} to /jffs" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVJFFS} -C /jffs >/dev/null - if [ "$EXTLABEL" != "NOTFOUND" ]; then - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVUSB} to $EXTDRIVE" >> $LOGFILE - tar -xzf ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVUSB} -C $EXTDRIVE >/dev/null - TE=$? - if [ $TE -eq 0 ]; then - echo -e "${CGreen}No TAR errors detected on restore to $EXTDRIVE${CClear}" - else - echo -e "${CRed}ERROR: TAR errors detected on restore to $EXTDRIVE${CClear}" - echo -e "${CRed}Would you like to proceed with the restoration process?${CClear}" - echo "" - if promptyn "(y/n): "; then - echo "" - echo -e "\n${CGreen}Proceeding...${CClear}\n" - else - echo "" - echo -e "${CRed}Exiting...${CClear}\n" - echo "" - exit 1 - fi - fi - else - echo -e "${CYellow}WARNING: External USB drive not found. Skipping restore." - logger "BACKUPMON WARNING: External USB drive not found. Skipping restore." - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - WARNING: External USB drive not found. Skipping restore." >> $LOGFILE - fi - echo -e "${CGreen}Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Restoring ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVNVRAM} to NVRAM" >> $LOGFILE - nvram restore ${SECONDARYUNCDRIVE}${SECONDARYBKDIR}/${BACKUPDATE}/${ADVNVRAM} >/dev/null 2>&1 - echo "" - echo -e "${CGreen}STATUS: Secondary backups were successfully restored to their original locations. Forcing reboot now!${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary backups were successfully restored to their original locations. Forcing reboot!" >> $LOGFILE - echo "" - rm -f /jffs/scripts/backupmon.cfg - /sbin/service 'reboot' - fi - fi - - # Unmount the backup drive - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo "" - echo -e "${CClear}" - return - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "${CClear}" - return - - fi - - else - - # Exit gracefully - echo "" - echo "" - echo -e "${CGreen}STATUS: Settling for 10 seconds..." - sleep 10 - - unmountsecondarydrv - - echo -e "${CClear}" - return - - fi - - fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# unmountdrv is a function to gracefully unmount the drive, and retry for up to 30 seconds -unmountdrv () { - - if [ "$BACKUPMEDIA" == "USB" ]; then - echo -e "${CGreen}STATUS: External USB drive continues to stay mounted.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External USB drive continues to stay mounted." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - umount -l $UNCDRIVE # unmount the local backup drive from the UNC - URC=$? - if [ $URC -eq 0 ]; then # If umount come back successful, then proceed - echo -en "${CGreen}STATUS: External network drive ("; printf "%s" "${UNC}"; echo -e ") unmounted successfully.${CClear}" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: External network drive ( ${UNC} ) unmounted successfully." >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to unmount from external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to unmount from external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to unmount from external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to unmount from external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to unmount network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# unmountsecondarydrv is a function to gracefully unmount the secondary drive, and retry for up to 30 seconds -unmountsecondarydrv () { - - if [ "$SECONDARYBACKUPMEDIA" == "USB" ]; then - echo -e "${CGreen}STATUS: Secondary external USB drive continues to stay mounted.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external USB drive continues to stay mounted." >> $LOGFILE - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - umount -l $SECONDARYUNCDRIVE # unmount the local backup drive from the Secondary UNC - URC=$? - if [ $URC -eq 0 ]; then # If umount come back successful, then proceed - echo -en "${CGreen}STATUS: Secondary external network drive ("; printf "%s" "${SECONDARYUNC}"; echo -e ") unmounted successfully.${CClear}" - printf "%s\n" "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Secondary external network drive ( ${SECONDARYUNC} ) unmounted successfully." >> $LOGFILE - break - else - echo -e "${CYellow}WARNING: Unable to unmount from secondary external network drive. Trying every 10 seconds for 30 seconds.${CClear}" - sleep 10 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to unmount from secondary external network drive. Please check your configuration. Exiting.${CClear}" - logger "BACKUPMON ERROR: Unable to unmount from secondary external network drive. Please check your configuration!" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Unable to unmount from secondary external network drive. Please check your configuration!" >> $LOGFILE - sendmessage 1 "Unable to unmount secondary network drive" - echo -e "\n" - exit 1 - fi - fi - done - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# unmountdrv is a function to gracefully unmount the drive, and retry for up to 30 seconds -unmounttestdrv () { - - if [ "$TESTBACKUPMEDIA" == "USB" ]; then - echo -e "${CGreen}STATUS: Test external USB drive continues to stay mounted.${CClear}" - else - CNT=0 - TRIES=3 - while [ $CNT -lt $TRIES ]; do # Loop through number of tries - umount -l $TESTUNCDRIVE # unmount the local backup drive from the UNC - URC=$? - if [ $URC -eq 0 ]; then # If umount come back successful, then proceed - echo -en "${CGreen}STATUS: External test tetwork drive ("; printf "%s" "${TESTUNC}"; echo -e ") unmounted successfully.${CClear}" - break - else - echo -e "${CYellow}WARNING: Unable to unmount from external test network drive. Retrying...${CClear}" - sleep 5 - CNT=$((CNT+1)) - if [ $CNT -eq $TRIES ];then - echo -e "${CRed}ERROR: Unable to unmount from external test network drive. Please check your configuration. Exiting.${CClear}" - read -rsp $'Press any key to acknowledge...\n' -n1 key - break - fi - fi - done - fi -} - -# ------------------------------------------------------------------------------------------------------------------------- - -# checkplaintxtpwds is a function to check if old plaintext pwds are still in use due to change to new base64 pwd storage change -checkplaintxtpwds () { - - #Check to see if old conflicting variable names are being used - if [ ! -z "$USERNAME" ]; then - sed -i "s/USERNAME=/BTUSERNAME=/" "/jffs/addons/backupmon.d/backupmon.cfg" - sed -i "s/PASSWORD=/BTPASSWORD=/" "/jffs/addons/backupmon.d/backupmon.cfg" - source $CFGPATH - fi - - #echo $PASSWORD | base64 -d > /dev/null 2>&1 - echo "$BTPASSWORD" | openssl enc -d -base64 -A | grep -vqE '[^[:graph:]]' - PRI="$?" - #echo $SECONDARYPWD | base64 -d > /dev/null 2>&1 - echo "$SECONDARYPWD" | openssl enc -d -base64 -A | grep -vqE '[^[:graph:]]' - SEC="$?" - - if [ "$BACKUPMEDIA" == "Network" ]; then - if [ "$PRI" == "1" ]; then - echo -e "${CRed}ERROR: Plaintext passwords are still being used in the config file. Please go under the BACKUPMON setup menu" - echo -e "to reconfigure your primary and/or secondary target backup passwords, and save your config. New changes to the" - echo -e "way passwords are encoded and saved requires your immediate attention!${CClear}" - echo "" - read -rsp $'Press any key to enter setup menu...\n' -n1 key - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Plaintext passwords detected. Please check your configuration!" >> $LOGFILE - vsetup - exit 0 - fi - fi - - if [ "$SECONDARYBACKUPMEDIA" == "Network" ]; then - if [ "$SEC" == "1" ] && [ $SECONDARYSTATUS -eq 1 ]; then - echo -e "${CRed}ERROR: Plaintext passwords are still being used in the config file. Please go under the BACKUPMON setup menu" - echo -e "to reconfigure your primary and/or secondary target backup passwords, and save your config. New changes to the" - echo -e "way passwords are encoded and saved requires your immediate attention!${CClear}" - echo "" - read -rsp $'Press any key to enter setup menu...\n' -n1 key - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Plaintext passwords detected. Please check your configuration!" >> $LOGFILE - vsetup - exit 0 - fi - fi - -} - - -# ------------------------------------------------------------------------------------------------------------------------- - -# excludeswap is a function to write a swap file exlusion file, or to add to an existing exlusions file -excludeswap () { - -# First check to see if the swap file exlusion file exists, if not, create it. Thanks to @ScottW for the ideas! - -swapname=$(cat /proc/swaps | awk 'NR==2 {print $1}' | sed 's|.*/||') >/dev/null 2>&1 - -if [ ! -f $PFEXCLUSION ]; then - - if [ ! -z $swapname ] || [ $swapname != "" ]; then - { echo $swapname - } > $PFEXCLUSION - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - INFO: Page File Backup Exclusion File created" >> $LOGFILE - else - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: Page File does not exist" >> $LOGFILE - fi - -fi - -# Check to see if the exclusion file/path has been defined, if not, use the pagefile exclusion file in its place - -if [ "$BACKUPSWAP" == "0" ]; then - - if [ -z "$EXCLUSION" ] || [ "$EXCLUSION" == "" ]; then - EXCLUSION="$PFEXCLUSION" - fi - - if [ -z "$SECONDARYEXCLUSION" ] || [ "$SECONDARYEXCLUSION" == "" ]; then - SECONDARYEXCLUSION="$PFEXCLUSION" - fi - - # Check to see if an exlusion file is in place, and make sure the swap has been added to it. - - if ! grep -q -F "$swapname" $EXCLUSION; then - echo "$swapname" >> $EXCLUSION - fi - - if ! grep -q -F "$swapname" $SECONDARYEXCLUSION; then - echo "$swapname" >> $SECONDARYEXCLUSION - fi - -fi - -} - -# ------------------------------------------------------------------------------------------------------------------------- -# Begin Main Program -# ------------------------------------------------------------------------------------------------------------------------- - -#DEBUG=; set -x # uncomment/comment to enable/disable debug mode -#{ # uncomment/comment to enable/disable debug mode - -# Create the necessary folder/file structure for BACKUPMON under /jffs/addons -if [ ! -d "/jffs/addons/backupmon.d" ]; then - mkdir -p "/jffs/addons/backupmon.d" -fi - -# Check for and add an alias for BACKUPMON -if ! grep -F "sh /jffs/scripts/backupmon.sh" /jffs/configs/profile.add >/dev/null 2>/dev/null; then - echo "alias backupmon=\"sh /jffs/scripts/backupmon.sh\" # backupmon" >> /jffs/configs/profile.add -fi - -# Determine router model -[ -z "$(nvram get odmpid)" ] && ROUTERMODEL="$(nvram get productid)" || ROUTERMODEL="$(nvram get odmpid)" # Thanks @thelonelycoder for this logic - -#Get FW Version for inclusion in instructions.txt and to check before a restore -FWVER=$(nvram get firmver | tr -d '.') -BUILDNO=$(nvram get buildno) -EXTENDNO=$(nvram get extendno) -if [ -z $EXTENDNO ]; then EXTENDNO=0; fi -FWBUILD=$FWVER"."$BUILDNO"_"$EXTENDNO - -# Check to see if EXT drive exists -USBPRODUCT="$(nvram get usb_path1_product)" -EXTLABEL="$(_CheckForMountPointAndVolumeLabel_)" -LABELSIZE=$(echo $EXTLABEL | sed 's/ //g' | wc -m) - -# If there's no label or product, there's no EXT USB Drive, else the label might be blank -if [ -z "$EXTLABEL" ] && [ -z "$USBPRODUCT" ]; then - EXTLABEL="NOTFOUND" -elif [ $LABELSIZE -le 1 ]; then - clear - echo -e "${CYellow}WARNING: External USB Drive Label Name is not sufficient, or unable to detect default sda drive label." - echo "" - echo -e "${CRed}BACKUPMON MAY NOT FUNCTION CORRECTLY IN THIS SCENARIO${CClear}" - echo "" - echo -e "${CYellow}Should your drive be without a label, please give it a value, other than blank. Omit any spaces." - echo -e "Example: EXTUSB, or SAMSUNG-SSD... etc.${CClear}" - echo -e "$(date +'%b %d %Y %X') $(nvram get lan_hostname) BACKUPMON[$$] - **ERROR**: External USB Drive Label Name is not sufficient, or unable to detect default sda drive label. Please investigate." >> $LOGFILE - echo "" - echo -e "${CGreen}[Continuing in 10 seconds]..." - sleep 10 -fi - -# Check and see if any commandline option is being used -if [ $# -eq 0 ] - then - clear - sh /jffs/scripts/backupmon.sh -noswitch - exit 0 -fi - -# Check and see if an invalid commandline option is being used -if [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "-setup" ] || [ "$1" == "-backup" ] || [ "$1" == "-restore" ] || [ "$1" == "-noswitch" ] || [ "$1" == "-purge" ] - then - clear - else - clear - echo "" - echo " BACKUPMON v$Version" - echo "" - echo " Exiting due to invalid commandline options!" - echo " (run 'backupmon -h' for help)" - echo "" - echo -e "${CClear}" - exit 0 -fi - -# Check to see if the help option is being called -if [ "$1" == "-h" ] || [ "$1" == "-help" ] - then - clear - echo "" - echo " BACKUPMON v$Version Commandline Option Usage:" - echo "" - echo " backupmon -h | -help" - echo " backupmon -setup" - echo " backupmon -backup" - echo " backupmon -restore" - echo " backupmon -purge" - echo "" - echo " -h | -help (this output)" - echo " -setup (displays the setup menu)" - echo " -backup (runs the normal backup procedures)" - echo " -restore (initiates the restore procedures)" - echo " -purge (auto purges perpetual backup folders)" - echo "" - echo -e "${CClear}" - exit 0 -fi - -# Check to see if a second command is being passed to remove color -if [ "$2" == "-bw" ] - then - blackwhite -fi - -# Check to see if the restore option is being called -if [ "$1" == "-restore" ] - then - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 0 - fi - checkplaintxtpwds #Check for plaintext passwords - restore #Run the restore routine - trimlogs #Trim the logs - echo -e "${CClear}" - exit 0 -fi - -# Check to see if the setup option is being called -if [ "$1" == "-setup" ] - then - vsetup -fi - -# Check to see if the purge option is being called -if [ "$1" == "-purge" ] - then - if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" - else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" - fi - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 0 - fi - checkplaintxtpwds #Check for plaintext passwords - autopurge #Purge primary backups - autopurgesecondaries #Purge secondary backups - trimlogs #Trim the logs - echo "" - exit 0 -fi - -# Check to see if the backup option is being called -if [ "$1" == "-backup" ] - then - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 0 - fi - checkplaintxtpwds - BSWITCH="True" -fi - -# Check to see if the backup option is being called -if [ "$1" == "-noswitch" ] - then - - # Determine if the config is local or under /jffs/addons/backupmon.d - if [ -f $CFGPATH ]; then #Making sure file exists before proceeding - source $CFGPATH - elif [ -f /jffs/scripts/backupmon.cfg ]; then - source /jffs/scripts/backupmon.cfg - cp /jffs/scripts/backupmon.cfg /jffs/addons/backupmon.d/backupmon.cfg - else - clear - echo -e "${CRed}ERROR: BACKUPMON is not configured. Please run 'backupmon.sh -setup' first." - echo -e "${CClear}" - exit 1 - fi - checkplaintxtpwds - BSWITCH="False" -fi - -# Check for the Swap File Exclusion -if [ "$BACKUPSWAP" == "0" ]; then - excludeswap -fi - -updatecheck - -clear -# Check for updates -if [ "$UpdateNotify" == "0" ]; then - echo -e "${CGreen}BACKUPMON v$Version" -else - echo -e "${CGreen}BACKUPMON v$Version ${CRed}-- $UpdateNotify" -fi - -echo "" -echo -e "${CCyan}Normal Backup starting in 10 seconds. Press ${CGreen}[S]${CCyan}etup or ${CRed}[X]${CCyan} to override and enter ${CRed}RESTORE${CCyan} mode" -echo "" - -echo -e "${CCyan}Asus Router Model: ${CGreen}${ROUTERMODEL}" -echo -e "${CCyan}Firmware/Build Number: ${CGreen}${FWBUILD}" -echo -e "${CCyan}External USB Drive Mount Path: ${CGreen}${EXTDRIVE}" -if [ $FREQUENCY == "W" ]; then FREQEXPANDED="Weekly"; fi -if [ $FREQUENCY == "M" ]; then FREQEXPANDED="Monthly"; fi -if [ $FREQUENCY == "Y" ]; then FREQEXPANDED="Yearly"; fi -if [ $FREQUENCY == "P" ]; then FREQEXPANDED="Perpetual"; fi - -if [ "$BACKUPMEDIA" == "USB" ]; then - echo -e "${CCyan}Backing up to ${CGreen}USB${CCyan} mounted to ${CGreen}${UNCDRIVE}" -else - echo -en "${CCyan}Backing up to ${CGreen}"; printf "%s" "${UNC}"; echo -e "${CCyan} mounted to ${CGreen}${UNCDRIVE}" -fi -echo -e "${CCyan}Backup directory location: ${CGreen}${BKDIR}" -echo -e "${CCyan}Frequency: ${CGreen}$FREQEXPANDED" -echo -e "${CCyan}Mode: ${CGreen}$MODE" -echo "" - -# If the -backup switch is used then bypass the counter for immediate backup -if [ "$BSWITCH" == "False" ]; then - # Run a 10sec timer - i=0 - while [ $i -ne 10 ] - do - preparebar 51 "|" - progressbaroverride $i 10 "" "s" "Standard" - i=$(($i+1)) - done -fi - -# Run a normal backup -echo -e "${CGreen}[Primary Backup Commencing]... " -echo "" -echo -e "${CCyan}Messages:${CClear}" - -checkplaintxtpwds #Check for plaintext passwords -backup #Run primary backups -sendmessage 0 "Primary Backup completed successfully" -secondary #Run secondary backups -if [ $SECONDARYSTATUS -eq 1 ]; then - sendmessage 0 "Secondary Backup completed successfully" -fi - -if [ $PURGE -eq 1 ] && [ "$BSWITCH" == "True" ]; then - autopurge #Run autopurge on primary backups -fi - -if [ $SECONDARYPURGE -eq 1 ] && [ "$BSWITCH" == "True" ]; then - autopurgesecondaries #Run autopurge on secondary backups -fi - -trimlogs #Trim the logs - -BSWITCH="False" -echo -e "${CClear}" -exit 0 - -#} #2>&1 | tee $LOG | logger -t $(basename $0)[$$] # uncomment/comment to enable/disable debug mode diff --git a/changelog.txt b/changelog.txt index d06ac0c..657d8ff 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,4 @@ -v1.5.7 - (TBA) +v1.5.8 - (TBA) - PATCH: Thanks to @Martinski, some significant improvements were made to the email notification feature and functionality. HTML emails are now being sent by default, and have been tested using all major email providers. A new title header is now visible in the email, as well as the ability to bold characters.