greatly improved the rdiff wizard. added default option to menu in easydialog.
authorElijah Saxon <elijah@riseup.net>
Thu, 7 Jul 2005 21:14:19 +0000 (21:14 +0000)
committerElijah Saxon <elijah@riseup.net>
Thu, 7 Jul 2005 21:14:19 +0000 (21:14 +0000)
handlers/easydialog.sh
handlers/rdiff
handlers/rdiff.helper

index 1ae3c830b2338e6c340b82cb501be6d33596def4..b96a5c1df5c511f11f6ae3c21d8b5292d6f883fd 100644 (file)
@@ -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
index 713f4c6e53732fed9fd85de78c6644d5b6cf44dd..bec59ff69a8ff065be9a5ad1ab264650d7292ba3 100644 (file)
@@ -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."
index 83549ecaa3af9fdc6e8a088982defb84da2c154a..2efbe11b04f2994b9f877c65d7557cb96ddc33ca 100644 (file)
@@ -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
+}
+