diff options
Diffstat (limited to 'handlers')
| -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 +} + | 
