diff options
-rw-r--r-- | handlers/easydialog.sh | 13 | ||||
-rw-r--r-- | handlers/rdiff | 8 | ||||
-rw-r--r-- | handlers/rdiff.helper | 145 |
3 files changed, 130 insertions, 36 deletions
diff --git a/handlers/easydialog.sh b/handlers/easydialog.sh index 1ae3c83..b96a5c1 100644 --- a/handlers/easydialog.sh +++ b/handlers/easydialog.sh @@ -81,15 +81,20 @@ _genericListBox() { local temp=$(mktemp -t) || exit 1 trap "rm -f $temp" 0 REPLY= - $DIALOG $HELP --backtitle "$BACKTITLE" --title "$title" \ + $DIALOG $HELP $_DEFAULT --backtitle "$BACKTITLE" --title "$title" \ $box "$text" $HEIGHT $WIDTH 10 \ "$@" 2> $temp local status=$? [ $status = 0 ] && REPLY=$(_listReplyHook $temp $box) rm -f $temp + _DEFAULT= return $status } +setDefault() { + _DEFAULT="--default-item $1" +} + menuBox() { _genericListBox --menu "$@" } @@ -169,9 +174,9 @@ displayForm() { for ((i=0; i < $_form_items ; i++)); do label=${_form_labels[$i]} text=${_form_text[$i]} - if [ "$text" == "" ]; then - text='_empty_' - fi +# if [ "$text" == "" ]; then +# text='_empty_' +# fi echo -n -e "$form $label $xpos 1 '$text' $xpos $max_length 30 30" let "xpos += _form_gap" done diff --git a/handlers/rdiff b/handlers/rdiff index 713f4c6..bec59ff 100644 --- a/handlers/rdiff +++ b/handlers/rdiff @@ -43,8 +43,8 @@ if [ "$desttype" == "remote" ]; then # see if we can login if [ "$testconnect" == "yes" ]; then hostalive=0 - debug "ssh -o PasswordAuthentication=no $desthost -l $destuser 'echo -n 1'" - ret=`ssh -o PasswordAuthentication=no $desthost -l $destuser 'echo -n host is alive'` + debug "ssh -o -o PreferredAuthentications=publickey $desthost -l $destuser 'echo -n 1'" + ret=`ssh -o -o PreferredAuthentications=publickey $desthost -l $destuser 'echo -n host is alive'` if echo $ret | grep "host is alive"; then debug "Connected to $desthost as $destuser successfully" else @@ -52,8 +52,8 @@ if [ "$desttype" == "remote" ]; then fi fi # see that rdiff-backup has the same version as here - debug "ssh $desthost -l $destuser '$RDIFFBACKUP -V'\"" - remoteversion=`ssh $desthost -l $destuser "$RDIFFBACKUP -V | grep rdiff-backup"` + debug "ssh -o PreferredAuthentications=publickey $desthost -l $destuser '$RDIFFBACKUP -V'\"" + remoteversion=`ssh -o PreferredAuthentications=publickey $desthost -l $destuser "$RDIFFBACKUP -V | grep rdiff-backup"` localversion=`$RDIFFBACKUP -V` if [ "$remoteversion" != "$localversion" ]; then fatal "rdiff-backup does not have the same version on this computer and the backup server." diff --git a/handlers/rdiff.helper b/handlers/rdiff.helper index 83549ec..2efbe11 100644 --- a/handlers/rdiff.helper +++ b/handlers/rdiff.helper @@ -1,21 +1,23 @@ - -rdiff_wizard() { - require_packages rdiff-backup +do_rdiff_dest() { startForm "rdiff action wizard" - formItem "keep" "60D" - formItem "dest_directory" "/backups/mybackup" - formItem "dest_host" "backuphost" - formItem "dest_user" "backupuser" + formItem "keep" "$rdiff_keep" + formItem "dest_directory" "$rdiff_directory" + formItem "dest_host" "$rdiff_host" + formItem "dest_user" "$rdiff_user" displayForm - [ $? = 1 ] && return; set -- $REPLY - keep=$1 - directory=$2 - host=$3 - user=$4 - + rdiff_keep=$1 + rdiff_directory=$2 + rdiff_host=$3 + rdiff_user=$4 + + _dest_done="(DONE)" + setDefault conn +} + +do_rdiff_src() { startForm "rdiff action wizard: includes" formItem include /var/spool/cron/crontabs formItem include /var/backups @@ -28,45 +30,132 @@ rdiff_wizard() { formItem include formItem include displayForm - [ $? = 1 ] && return; - includes= + + rdiff_includes= set -o noglob for i in $REPLY; do - [ "$i" != "_empty_" ] && includes="$includes\ninclude = $i" + [ "$i" != "" ] && rdiff_includes="$rdiff_includes\ninclude = $i" done set +o noglob - + startForm "rdiff action wizard: excludes" formItem exclude '/home/*/.gnupg' formItem exclude formItem exclude displayForm - [ $? = 1 ] && return; - excludes= + rdiff_excludes= set -o noglob for i in $REPLY; do - [ "$i" != "_empty_" ] && excludes="$excludes\nexclude = $i" + [ "$i" != "" ] && rdiff_excludes="$rdiff_excludes\nexclude = $i" done set +o noglob - + + _src_done="(DONE)" + setDefault dest +} + +do_rdiff_con() { + if [ "$_dest_done" = "" ]; then + msgBox "rdiff action wizard: error" "You must first configure the destination" + 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. Are you sure you want to continue?" + [ $? = 1 ] && return + fi + + if [ ! -f /root/.ssh/id_dsa.pub -a ! -f /root/.ssh/id_rsa.pub ]; then + echo "Creating local root's ssh key" + ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" + echo "Done. hit return to continue" + read + fi + + ssh -o PreferredAuthentications=publickey $rdiff_host -l $rdiff_user "exit" 2> /dev/null + if [ $? -ne 0 ]; then + echo "Copying root's public ssh key to authorized_keys of $rdiff_user@$rdiff_host. Specify the password for user $rdiff_user@$rdiff_host." + ssh-copy-id -i /root/.ssh/id_[rd]sa.pub $rdiff_user@$rdiff_host + if [ $? -ne 0 ]; then + msgBox "rdiff action wizard: error" "Failed to connect to $rdiff_user@$rdiff_host. Make sure you have the username and password correct." + return + else + echo "Done. hit return to continue" + read + fi + else + echo "root@localhost is already in authorized_keys of $rdiff_user@$rdiff_host. hit return to continue" + read + fi + _con_done="(DONE)" + setDefault finish +} + +do_rdiff_finish() { get_next_filename $configdirectory/90.rdiff cat > $next_filename <<EOF +# options = --force +# when = everyday at 02 + [source] type = local -keep = $keep +keep = $rdiff_keep EOF - echo -e "$includes" >> $next_filename - echo -e "$excludes" >> $next_filename + echo -n -e "$rdiff_includes" >> $next_filename + echo -e "$rdiff_excludes" >> $next_filename cat >> $next_filename <<EOF - + [dest] type = remote -directory = $directory -host = $host -user = $user +directory = $rdiff_directory +host = $rdiff_host +user = $rdiff_user EOF chmod 000 $next_filename } + +rdiff_main_menu() { + while true; do + srcitem="choose files to include & exclude $_src_done" + destitem="configure backup destination $_dest_done" + conitem="set up ssh keys and test remote connection $_con_done" + advitem="edit advanced settings $_adv_done" + menuBox "rdiff action wizard" "choose a step:" \ + src "$srcitem" \ + dest "$destitem" \ + conn "$conitem" \ + finish "finish and create config file" + [ $? = 1 ] && return; + result="$REPLY" + case "$result" in + "src") do_rdiff_src;; + "dest") do_rdiff_dest;; + "conn") do_rdiff_con;; + "adv") do_rdiff_adv;; + "finish") + if [[ "$_con_done$_dest_done$_src_done" != "(DONE)(DONE)(DONE)" ]]; then + msgBox "rdiff action wizard" "You cannot create the configuration file until the other steps are completed." + else + do_rdiff_finish + return + fi + ;; + esac + + done +} + +rdiff_wizard() { +# require_packages rdiff-backup + _src_done= + _dest_done= + _con_done= + _adv_done= + rdiff_keep=60D + rdiff_directory=/backup/`hostname` + rdiff_user= + rdiff_host= + rdiff_main_menu +} + |