From cfa5f4832eef039607276f571ce3c296ca31ecbc Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Oct 2016 11:03:10 +0100 Subject: [PATCH] Tidying of backups --- src/freedombone-backup-local | 100 ++++------------------------------ src/freedombone-backup-remote | 68 ++++------------------- src/freedombone-utils-backup | 46 ++++++++++++++++ 3 files changed, 67 insertions(+), 147 deletions(-) diff --git a/src/freedombone-backup-local b/src/freedombone-backup-local index 9de07a4b..c0fbe64f 100755 --- a/src/freedombone-backup-local +++ b/src/freedombone-backup-local @@ -30,12 +30,20 @@ PROJECT_NAME='freedombone' COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt +CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg BACKUP_EXTRA_DIRECTORIES=/root/backup-extra-dirs.csv ENABLE_BACKUP_VERIFICATION="no" export TEXTDOMAIN=${PROJECT_NAME}-backup-local export TEXTDOMAINDIR="/usr/share/locale" +PROJECT_INSTALL_DIR=/usr/local/bin +if [ -f /usr/bin/${PROJECT_NAME} ]; then + PROJECT_INSTALL_DIR=/usr/bin +fi + +source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars + # include utils which allow function_check and drive mount UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* for f in $UTILS_FILES @@ -46,17 +54,7 @@ done USB_DRIVE=/dev/sdb1 USB_MOUNT=/mnt/usb -# get default USB from config file -CONFIG_FILE=$HOME/${PROJECT_NAME}.cfg -if [ -f $CONFIG_FILE ]; then - if grep -q "USB_DRIVE=" $CONFIG_FILE; then - USB_DRIVE=$(cat $CONFIG_FILE | grep "USB_DRIVE=" | awk -F '=' '{print $2}') - fi -fi - -# get the version of Go being used -GO_VERSION=$(cat /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-go | grep 'GO_VERSION=' | head -n 1 | awk -F '=' '{print $2}') -GVM_HOME=$(cat /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-go | grep 'GVM_HOME=' | head -n 1 | awk -F '=' '{print $2}') +read_config_param USB_DRIVE ADMIN_USERNAME= ADMIN_NAME= @@ -199,14 +197,6 @@ function backup_users { } function backup_directories { - export GVM_ROOT=$GVM_HOME - if [ -d $GVM_ROOT/bin ]; then - cd $GVM_ROOT/bin - [[ -s "$GVM_ROOT/scripts/gvm" ]] && source "$GVM_ROOT/scripts/gvm" - gvm use go${GO_VERSION} --default - systemctl set-environment GOPATH=$GOPATH - fi - # directories to be backed up (source,dest) backup_dirs=( "/etc/letsencrypt, letsencrypt" @@ -244,18 +234,7 @@ function remove_backup_directory { } function prepare_directories { - export GVM_ROOT=$GVM_HOME - if [ -d $GVM_ROOT/bin ]; then - cd $GVM_ROOT/bin - [[ -s "$GVM_ROOT/scripts/gvm" ]] && source "$GVM_ROOT/scripts/gvm" - gvm use go${GO_VERSION} --default - systemctl set-environment GOPATH=$GOPATH - fi - # Some miscellaneous preparation for backing up directories - if [ -d $GOPATH/src/github.com/gogits ]; then - mv /home/git/gogs-repositories/*.git /home/git/gogs-repositories/$ADMIN_USERNAME - fi if [ -d /var/lib/tox-bootstrapd ]; then cp /etc/tox-bootstrapd.conf /var/lib/tox-bootstrapd if [ -d /var/lib/tox-bootstrapd/Maildir ]; then @@ -270,7 +249,7 @@ function backup_configuration { if [ ! -d $temp_backup_dir ]; then mkdir -p $temp_backup_dir fi - cp -f $CONFIG_FILE $temp_backup_dir + cp -f $CONFIGURATION_FILE $temp_backup_dir cp -f $COMPLETION_FILE $temp_backup_dir if [ -f $BACKUP_EXTRA_DIRECTORIES ]; then cp -f $BACKUP_EXTRA_DIRECTORIES $temp_backup_dir @@ -314,63 +293,6 @@ function backup_mariadb { fi } -function valid_backup_destination { - destination_dir="$1" - is_valid="yes" - - if [[ "$destination_dir" == "hubzilla" || \ - "$destination_dir" == "hubzilladata" || \ - "$destination_dir" == "gogs" || \ - "$destination_dir" == "gogsrepos" || \ - "$destination_dir" == "gogsssh" || \ - "$destination_dir" == "gnusocial" || \ - "$destination_dir" == "gnusocialdata" || \ - "$destination_dir" == "mariadb" || \ - "$destination_dir" == "config" || \ - "$destination_dir" == "letsencrypt" || \ - "$destination_dir" == "wiki" || \ - "$destination_dir" == "wiki2" || \ - "$destination_dir" == "xmpp" || \ - "$destination_dir" == "ipfs" || \ - "$destination_dir" == "dlna" || \ - "$destination_dir" == "tox" || \ - "$destination_dir" == "ssl" || \ - "$destination_dir" == "ttrss" || \ - "$destination_dir" == "blog" || \ - "$destination_dir" == "syncthingconfig" || \ - "$destination_dir" == "syncthingshared" || \ - "$destination_dir" == "syncthing" || \ - "$destination_dir" == "mediagoblin" || \ - "$destination_dir" == "mailinglist" ]]; then - is_valid="no" - fi - - echo $is_valid -} - -function backup_extra_directories { - if [ ! -f $BACKUP_EXTRA_DIRECTORIES ]; then - return - fi - - echo $"Backing up some additional directories" - while read backup_line - do - backup_dir=$(echo "$backup_line" | awk -F ',' '{print $1}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') - if [ -d "$backup_dir" ]; then - destination_dir=$(echo "$backup_line" | awk -F ',' '{print $2}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') - if [[ $(valid_backup_destination "$destination_dir") == "yes" ]]; then - backup_directory_to_usb "$backup_dir" "$destination_dir" - else - echo $"WARNING: The backup directory $destination_dir is already used." - echo $"Choose a different destination name for backing up $backup_dir" - fi - else - echo $"WARNING: Directory $backup_dir does not exist" - fi - done <$BACKUP_EXTRA_DIRECTORIES -} - # has the remove option been set ? remove_option=$2 if [[ $1 == "remove" ]]; then @@ -388,7 +310,7 @@ backup_apps local backup_configuration backup_admin_readme backup_mariadb -backup_extra_directories +backup_extra_directories local backup_unmount_drive $USB_DRIVE $USB_MOUNT echo $"Backup to USB drive is complete. You can now unplug it." diff --git a/src/freedombone-backup-remote b/src/freedombone-backup-remote index 88a8ee2c..3f4059bc 100755 --- a/src/freedombone-backup-remote +++ b/src/freedombone-backup-remote @@ -30,13 +30,20 @@ PROJECT_NAME='freedombone' COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt -CONFIG_FILE=$HOME/${PROJECT_NAME}.cfg +CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg BACKUP_EXTRA_DIRECTORIES=/root/backup-extra-dirs.csv ENABLE_VERIFICATION="no" export TEXTDOMAIN=${PROJECT_NAME}-backup-remote export TEXTDOMAINDIR="/usr/share/locale" +PROJECT_INSTALL_DIR=/usr/local/bin +if [ -f /usr/bin/${PROJECT_NAME} ]; then + PROJECT_INSTALL_DIR=/usr/bin +fi + +source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars + # utilities needed for backup commands UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* for f in $UTILS_FILES @@ -107,7 +114,7 @@ function backup_configuration { if [ ! -d $temp_backup_dir ]; then mkdir -p $temp_backup_dir fi - cp -f $CONFIG_FILE $temp_backup_dir + cp -f $CONFIGURATION_FILE $temp_backup_dir cp -f $COMPLETION_FILE $temp_backup_dir if [ -f $BACKUP_EXTRA_DIRECTORIES ]; then cp -f $BACKUP_EXTRA_DIRECTORIES $temp_backup_dir @@ -357,61 +364,6 @@ function disperse_key_shares { fi } -function valid_backup_destination { - destination_dir="$1" - is_valid="yes" - - if [[ "$destination_dir" == "hubzilla" || \ - "$destination_dir" == "hubzilladata" || \ - "$destination_dir" == "gogs" || \ - "$destination_dir" == "gogsrepos" || \ - "$destination_dir" == "gogsssh" || \ - "$destination_dir" == "gnusocial" || \ - "$destination_dir" == "gnusocialdata" || \ - "$destination_dir" == "mariadb" || \ - "$destination_dir" == "config" || \ - "$destination_dir" == "letsencrypt" || \ - "$destination_dir" == "wiki" || \ - "$destination_dir" == "wiki2" || \ - "$destination_dir" == "xmpp" || \ - "$destination_dir" == "ipfs" || \ - "$destination_dir" == "dlna" || \ - "$destination_dir" == "tox" || \ - "$destination_dir" == "ssl" || \ - "$destination_dir" == "blog" || \ - "$destination_dir" == "syncthing" || \ - "$destination_dir" == "syncthingconfig" || \ - "$destination_dir" == "syncthingshared" || \ - "$destination_dir" == "mailinglist" ]]; then - is_valid="no" - fi - - echo $is_valid -} - -function backup_extra_directories { - if [ ! -f $BACKUP_EXTRA_DIRECTORIES ]; then - return - fi - - echo $"Backing up some additional directories" - while read backup_line - do - backup_dir=$(echo "$backup_line" | awk -F ',' '{print $1}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') - if [ -d "$backup_dir" ]; then - destination_dir=$(echo "$backup_line" | awk -F ',' '{print $2}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') - if [[ $(valid_backup_destination "$destination_dir") == "yes" ]]; then - backup_directory_to_friend "$backup_dir" "$destination_dir" - else - echo $"WARNING: The backup directory $destination_dir is already used." - echo $"Choose a different destination name for backing up $backup_dir" - fi - else - echo $"WARNING: Directory $backup_dir does not exist" - fi - done <$BACKUP_EXTRA_DIRECTORIES -} - TEST_MODE="no" if [[ "$1" == "test" ]]; then TEST_MODE="yes" @@ -428,7 +380,7 @@ if [[ $TEST_MODE == "no" ]]; then backup_certs backup_mailing_list backup_apps remote - backup_extra_directories + backup_extra_directories remote fi # For each remote server diff --git a/src/freedombone-utils-backup b/src/freedombone-utils-backup index bf767673..6d7009ab 100755 --- a/src/freedombone-utils-backup +++ b/src/freedombone-utils-backup @@ -505,4 +505,50 @@ function restore_database { fi } +function valid_backup_destination { + # used to check whether any additional backup directories clash with + # exiting apps + destination_dir="$1" + is_valid="yes" + + available_variants_list=() + available_system_variants + + item_in_array "${destination_dir}" "${available_variants_list[@]}" + if [[ $? != 0 ]]; then + is_valid="no" + fi + + echo $is_valid +} + +function backup_extra_directories { + if [ ! -f $BACKUP_EXTRA_DIRECTORIES ]; then + return + fi + + backup_type="$1" + + echo $"Backing up some additional directories" + while read backup_line + do + backup_dir=$(echo "$backup_line" | awk -F ',' '{print $1}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') + if [ -d "$backup_dir" ]; then + destination_dir=$(echo "$backup_line" | awk -F ',' '{print $2}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') + if [[ $(valid_backup_destination "$destination_dir") == "yes" ]]; then + if [[ $backup_type == "local" ]]; then + backup_directory_to_usb "$backup_dir" "$destination_dir" + else + backup_directory_to_friend "$backup_dir" "$destination_dir" + fi + else + echo $"WARNING: The backup directory $destination_dir is already used." + echo $"Choose a different destination name for backing up $backup_dir" + fi + else + echo $"WARNING: Directory $backup_dir does not exist" + fi + done <$BACKUP_EXTRA_DIRECTORIES +} + # NOTE: deliberately no exit 0