diff --git a/bin/v-backup-user b/bin/v-backup-user index 1cd1f4118..98995e9ff 100755 --- a/bin/v-backup-user +++ b/bin/v-backup-user @@ -747,6 +747,46 @@ sftp_backup() { fi } +google_backup() { + + # Defining google settings + source $VESTA/conf/google.backup.conf + gsutil="$VESTA/3rdparty/gsutil/gsutil" + export BOTO_CONFIG="$VESTA/conf/.google.backup.boto" + + # Debug info + echo -e "$(date "+%F %T") Remote: gs://$BUCKET/$BPATH/$user.$date.tar" + + # Checking retention + backup_list=$(${gsutil} ls gs://$BUCKET/$BPATH/$user.* 2>/dev/null) + backups_count=$(echo "$backup_list" |wc -l) + if [ "$backups_count" -ge "$BACKUPS" ]; then + backups_rm_number=$((backups_count - BACKUPS + 1)) + for backup in $(echo "$backup_list" |head -n $backups_rm_number); do + echo -e "$(date "+%F %T") Roated gcp backup: $backup" + $gsutil rm $backup > /dev/null 2>&1 + done + fi + + # Uploading backup archive + echo -e "$(date "+%F %T") Uploading $user.$date.tar ..." + if [ "$localbackup" = 'yes' ]; then + cd $BACKUP + ${gsutil} cp $user.$date.tar gs://$BUCKET/$BPATH/ > /dev/null 2>&1 + else + cd $tmpdir + tar -cf $BACKUP/$user.$date.tar . + cd $BACKUP/ + ${gsutil} cp $user.$date.tar gs://$BUCKET/$BPATH/ > /dev/null 2>&1 + rc=$? + rm -f $user.$date.tar + if [ "$rc" -ne 0 ]; then + check_result "$E_CONNECT" "gsutil failed to upload $user.$date.tar" + fi + fi +} + + echo -e "\n-- SUMMARY --" |tee -a $BACKUP/$user.log # Switching on backup system types @@ -755,6 +795,7 @@ for backup_type in $(echo -e "${BACKUP_SYSTEM//,/\\n}"); do local) local_backup ;; ftp) ftp_backup ;; sftp) sftp_backup ;; + google) google_backup ;; esac done diff --git a/bin/v-restore-user b/bin/v-restore-user index addff2d83..f2d4408c7 100755 --- a/bin/v-restore-user +++ b/bin/v-restore-user @@ -36,13 +36,6 @@ source $VESTA/func/db.sh source $VESTA/func/rebuild.sh source $VESTA/conf/vesta.conf -# Check backup function -is_backup_valid() { - if [ ! -e "$1" ]; then - check_result $E_NOTEXIST "backup $1 doesn't exist" - fi -} - # Check backup ownership function is_backup_available() { if ! [[ $2 =~ ^$1.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].tar$ ]]; then @@ -50,6 +43,109 @@ is_backup_available() { fi } +# Defining ftp command function +ftpc() { + /usr/bin/ftp -n $HOST $PORT <" { + if {\$count < \$argc} { + set arg [lindex \$argv \$count] + send "\$arg\r" + incr count + } else { + incr count + } else { + send "exit\r" + set output "Disconnected." + if {[info exists rc] != 1} { + set rc $OK + } + } + exp_continue + } + timeout { + set output "Connection timeout." + set rc $E_CONNECT + } + } + + if {[info exists output] == 1} { + puts "\$output" + } + + exit \$rc +EOF +} + +# SFTP backup download function +sftp_download() { + source $VESTA/conf/sftp.backup.conf + if [ -z "$PORT" ]; then + PORT='22' + fi + cd $BACKUP + sftpc "cd $BPATH" "get $1" > /dev/null 2>&1 + +} + +# Google backup download function +google_download() { + source $VESTA/conf/google.backup.conf + gsutil="$VESTA/3rdparty/gsutil/gsutil" + export BOTO_CONFIG="$VESTA/conf/.google.backup.boto" + ${gsutil} cp gs://$BUCKET/$BPATH/$1 $BACKUP/ > /dev/null 2>&1 + if [ "$?" -ne 0 ]; then + check_result "$E_CONNECT" "gsutil failed to download $1" + fi +} + #----------------------------------------------------------# # Verifications # @@ -58,7 +154,6 @@ is_backup_available() { args_usage='USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIR] [NOTIFY]' check_args '2' "$#" "$args_usage" is_format_valid 'user' 'backup' -is_backup_valid "$BACKUP/$backup" is_backup_available "$user" "$backup" @@ -66,6 +161,25 @@ is_backup_available "$user" "$backup" # Action # #----------------------------------------------------------# +# Checking local backup +if [ ! -e "$BACKUP/$backup" ]; then + if [[ "$BACKUP_SYSTEM" =~ "google" ]]; then + google_download $backup + downloaded='yes' + fi + if [[ "$BACKUP_SYSTEM" =~ "sftp" ]] && [ -z "$downloaded" ]; then + sftp_download $backup + downloaded='yes' + fi + if [[ "$BACKUP_SYSTEM" =~ "ftp" ]] && [ -z "$downloaded" ]; then + ftp_download $backup + downloaded='yes' + fi + if [ -z "$downloaded" ]; then + check_result $E_NOTEXIST "backup $backup doesn't exist" + fi +fi + # Checking user existance on the server check_user=$(is_object_valid 'user' 'USER' "$user") if [ -z "$check_user" ]; then