aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handlers/easydialog.sh13
-rw-r--r--handlers/rdiff8
-rw-r--r--handlers/rdiff.helper145
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
+}
+