X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=handlers%2Frdiff.helper;h=fa61e3f4ee1e3904a3c14f3af011e0cfe74af5cf;hb=cfc47e5571e61f4323b9f64f9cbb64dfbc4bf1b4;hp=91d715e73261908fbc523071bbc4538f46685427;hpb=a4ae4e5c6e73a5fd22c7e61441ec87f55986a8d6;p=matthijs%2Fupstream%2Fbackupninja.git diff --git a/handlers/rdiff.helper b/handlers/rdiff.helper index 91d715e..fa61e3f 100644 --- a/handlers/rdiff.helper +++ b/handlers/rdiff.helper @@ -1,81 +1,157 @@ +# -*- mode: sh; sh-basic-offset: 8; indent-tabs-mode: nil; -*- + HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup" declare -a rdiff_includes declare -a rdiff_excludes -do_rdiff_dest() { - set -o noglob - formBegin "rdiff action wizard" - formItem "keep" "$rdiff_keep" - formItem "dest_directory" "$rdiff_directory" - formItem "dest_host" "$rdiff_host" - formItem "dest_user" "$rdiff_user" - formDisplay - [ $? = 1 ] && return; - - IFS=$'' - replyconverted=`echo $REPLY | tr '\n' :` - IFS=$':' - thereply=($replyconverted) - IFS=$' \t\n' - - rdiff_keep=${thereply[0]} - rdiff_directory=${thereply[1]} - rdiff_host=${thereply[2]} - rdiff_user=${thereply[3]} +# FUNCTIONS - _dest_done="(DONE)" - setDefault conn - set +o noglob +do_rdiff_host_includes() { + set -o noglob + # choose the files to backup + REPLY= + while [ -z "$REPLY" ] + do + formBegin "$rdiff_title - host system: includes" + for ((i=0; i < ${#rdiff_includes[@]} ; i++)) + do + formItem include ${rdiff_includes[$i]} + done + formItem include + formItem include + formItem include + formDisplay + [ $? = 0 ] || return + unset rdiff_includes + rdiff_includes="$REPLY" + done + set +o noglob } -do_rdiff_src() { - #echo ${rdiff_includes[@]} - set -o noglob - formBegin "rdiff action wizard: includes" - for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do - formItem include ${rdiff_includes[$i]} - done - formItem include - formItem include - formItem include - formDisplay - [ $? = 1 ] && return; +do_rdiff_vserver() { + # choose the vservers to backup (into $selected_vservers) + choose_one_or_more_vservers "$rdiff_title" + [ $? = 0 ] || return 1 - unset rdiff_includes - rdiff_includes=($REPLY) + set -o noglob + # choose the files to backup + REPLY= - formBegin "rdiff action wizard: excludes" - for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do + while [ -z "$REPLY" ]; do + formBegin "$rdiff_title - vsincludes (backup these directories from every vserver)" + [ -z "$rdiff_vsincludes" ] && rdiff_vsincludes="$rdiff_default_includes" + + for i in $rdiff_vsincludes; do + formItem include "$i" + done + + formItem include "" + formItem include "" + formItem include "" + formDisplay + [ $? = 0 ] || return 1 + rdiff_vsincludes="$REPLY" + done + + set +o noglob +} + +do_rdiff_excludes() { + set -o noglob + formBegin "$rdiff_title: excludes" + for ((i=0; i < ${#rdiff_excludes[@]} ; i++)) + do formItem exclude ${rdiff_excludes[$i]} - done - formItem exclude - formItem exclude - formDisplay - [ $? = 1 ] && return; + done + + formItem exclude + formItem exclude + formDisplay + + [ $? = 0 ] || return + unset rdiff_excludes + rdiff_excludes="$REPLY" + set +o noglob +} - unset rdiff_excludes - rdiff_excludes=($REPLY) +do_rdiff_src() { + choose_host_or_vservers_or_both "$rdiff_title" + [ $? = 0 ] || return 1 + case $host_or_vservers in + 'host') + do_rdiff_host_includes + [ $? = 0 ] || return 1 + ;; + 'vservers') + do_rdiff_vserver + [ $? = 0 ] || return 1 + ;; + 'both') + do_rdiff_host_includes + [ $? = 0 ] || return 1 + do_rdiff_vserver + [ $? = 0 ] || return 1 + ;; + *) + return 1 + ;; + esac + do_rdiff_excludes + [ $? = 0 ] || return 1 + _src_done="(DONE)" + setDefault dest +} + +do_rdiff_dest() { + + local replyconverted + local thereply - _src_done="(DONE)" - setDefault dest + set -o noglob + REPLY= + while [ -z "$REPLY" -o -z "$rdiff_directory" -o -z "$rdiff_host" -o -z "$rdiff_user" ] + do + formBegin "$rdiff_title - destination: last three items are required" + formItem "keep" "$rdiff_keep" + formItem "dest_directory" "$rdiff_directory" + formItem "dest_host" "$rdiff_host" + formItem "dest_user" "$rdiff_user" + formDisplay + [ $? = 0 ] || return + + IFS=$'' + replyconverted=`echo $REPLY | tr '\n' :` + IFS=$':' + thereply=($replyconverted) + IFS=$' \t\n' + + rdiff_keep=${thereply[0]} + rdiff_directory=${thereply[1]} + rdiff_host=${thereply[2]} + rdiff_user=${thereply[3]} + + done set +o noglob + + _dest_done="(DONE)" + setDefault conn } - -do_ssh_con() { + +do_rdiff_ssh_con() { IFS=$' \t\n' if [ "$_dest_done" = "" ]; then - msgBox "rdiff action wizard: error" "You must first configure the destination." + msgBox "$rdiff_title: error" "You must first configure the destination." return elif [ "$rdiff_user" = "" ]; then - msgBox "rdiff action wizard: error" "You must first configure the destination user." + msgBox "$rdiff_title: error" "You must first configure the destination user." return elif [ "$rdiff_host" = "" ]; then - msgBox "rdiff action wizard: error" "You must first configure the destination host." + msgBox "$rdiff_title: error" "You must first configure the destination host." return else - booleanBox "rdiff action wizard" "This step will create a ssh key for the local root user with no passphrase (if one does not already exist), and attempt to copy root's public ssh key to authorized_keys file of $rdiff_user@$rdiff_host. This will allow the local root to make unattended backups to $rdiff_user@$rdiff_host.\n\n\nAre you sure you want to continue?" - [ $? = 1 ] && return + booleanBox "$rdiff_title" "This step will create a ssh key for the local root user with no passphrase (if one does not already exist), and attempt to copy root's public ssh key to authorized_keys file of $rdiff_user@$rdiff_host. This will allow the local root to make unattended backups to $rdiff_user@$rdiff_host.\n\n\nAre you sure you want to continue?" + [ $? = 0 ] || return fi if [ ! -f /root/.ssh/id_dsa.pub -a ! -f /root/.ssh/id_rsa.pub ]; then @@ -96,10 +172,10 @@ do_ssh_con() { echo "Hit return to continue." read case $result in - 0 ) msgBox "rdiff action wizard: error" "Directories are writable: Probably just a typo the first time." ;; - 1 ) msgBox "rdiff action wizard: error" "Connected successfully to $rdiff_user@$rdiff_host, but unable to write. Check ownership and modes of ~$rdiff_user on $rdiff_host." ;; - 255 ) msgBox "rdiff action wizard: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password. Also, make sure sshd is running on the destination host." ;; - * ) msgBox "rdiff action wizard: error" "Unexpected error." ;; + 0 ) msgBox "$rdiff_title: error" "Directories are writable: Probably just a typo the first time." ;; + 1 ) msgBox "$rdiff_title: error" "Connected successfully to $rdiff_user@$rdiff_host, but unable to write. Check ownership and modes of ~$rdiff_user on $rdiff_host." ;; + 255 ) msgBox "$rdiff_title: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password. Also, make sure sshd is running on the destination host." ;; + * ) msgBox "$rdiff_title: error" "Unexpected error." ;; esac return else @@ -134,19 +210,19 @@ do_ssh_con() { read case $result in 0) - msgBox "rdiff action wizard: success" "Creation of the remote destination directory was a success!" + msgBox "$rdiff_title: success" "Creation of the remote destination directory was a success!" remote_status=0 ;; 1) - msgBox "rdiff action wizard: error" "Connected successfully to $rdiff_user@$rdiff_host, but was unable to create the destination directory, check the directory permissions." + msgBox "$rdiff_title: error" "Connected successfully to $rdiff_user@$rdiff_host, but was unable to create the destination directory, check the directory permissions." remote_status=1 ;; 255) - msgBox "rdiff action wizard: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password. Also, make sure sshd is running on the destination host." + msgBox "$rdiff_title: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password. Also, make sure sshd is running on the destination host." remote_status=1 ;; *) - msgBox "rdiff action wizard: error" "Unexpected error." + msgBox "$rdiff_title: error" "Unexpected error." remote_status=1 ;; esac @@ -179,17 +255,17 @@ do_rdiff_con() { read case $result in 0) - msgBox "rdiff action wizard: success" "Installation of rdiff-backup was a success!" + msgBox "$rdiff_title: success" "Installation of rdiff-backup was a success!" do_rdiff_con ;; 1) - msgBox "rdiff action wizard: error" "Connected successfully to $rdiff_user@$rdiff_host, but was unable to install the package for some reason." + msgBox "$rdiff_title: error" "Connected successfully to $rdiff_user@$rdiff_host, but was unable to install the package for some reason." ;; 255) - msgBox "rdiff action wizard: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password. Also, make sure sshd is running on the destination host." + msgBox "$rdiff_title: error" "Failed to connect to $rdiff_user@$rdiff_host. Check hostname, username, and password. Also, make sure sshd is running on the destination host." ;; *) - msgBox "rdiff action wizard: error" "Unexpected error." + msgBox "$rdiff_title: error" "Unexpected error." ;; esac return @@ -232,15 +308,60 @@ do_rdiff_finish() { type = local keep = $rdiff_keep EOF - set -o noglob - for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do - echo "include = ${rdiff_includes[$i]}" >> $next_filename - done - for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do - echo exclude = ${rdiff_excludes[$i]} >> $next_filename - done - set +o noglob - cat >> $next_filename <> $next_filename + done + + set +o noglob + fi + + if [ "$host_or_vservers" == vservers -o "$host_or_vservers" == both ] + then + cat >> $next_filename < ... (default = all) +# vsinclude = +# vsinclude = +# ... +# Any path specified in vsinclude is added to the include list for each vserver +# listed in vsnames (or all if vsnames = all). +# +# For example, vsinclude = /home will backup the /home partition in every +# vserver listed in vsnames. If you have vsnames = "foo bar baz", this +# vsinclude will add to the include list /vservers/foo/home, +# /vservers/bar/home and /vservers/baz/home. +# Vserver paths are derived from $VROOTDIR. + +EOF + + set -o noglob + echo -e "vsnames = \"$selected_vservers\"\n" >> $next_filename + for i in $rdiff_vsincludes; do + echo "vsinclude = $i" >> $next_filename + done + set +o noglob + fi + + # excludes + + for ((i=0; i < ${#rdiff_excludes[@]} ; i++)) + do + echo exclude = ${rdiff_excludes[$i]} >> $next_filename + done + set +o noglob + cat >> $next_filename <