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
+
+ set -o noglob
+ # choose the files to backup
+ REPLY=
- unset rdiff_includes
- rdiff_includes=($REPLY)
+ 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
+}
- formBegin "rdiff action wizard: excludes"
- for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do
+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() {
- _src_done="(DONE)"
- setDefault dest
+ local replyconverted
+ local thereply
+
+ 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
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
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
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
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 <<EOF
+
+ if [ "$host_or_vservers" == host -o "$host_or_vservers" == both ]
+ then
+ set -o noglob
+
+ for ((i=0; i < ${#rdiff_includes[@]} ; i++))
+ do
+ echo "include = ${rdiff_includes[$i]}" >> $next_filename
+ done
+
+ set +o noglob
+ fi
+
+ if [ "$host_or_vservers" == vservers -o "$host_or_vservers" == both ]
+ then
+ cat >> $next_filename <<EOF
+#
+# If vservers = yes in /etc/backupninja.conf then the following variables can
+# be used:
+# vsnames = all | <vserver1> <vserver2> ... (default = all)
+# vsinclude = <path>
+# vsinclude = <path>
+# ...
+# 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 <<EOF
+
+######################################################
+## destination section
+## (where the files are copied to)
[dest]
type = remote
host = $rdiff_host
user = $rdiff_user
EOF
+
chmod 600 $next_filename
}
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:" \
+ menuBox "$rdiff_title" "choose a step:" \
src "$srcitem" \
dest "$destitem" \
conn "$conitem" \
finish "finish and create config file"
- [ $? = 1 ] && return;
+ [ $? = 0 ] || return
result="$REPLY"
case "$result" in
"src") do_rdiff_src;;
"dest") do_rdiff_dest;;
- "conn") do_ssh_con;;
+ "conn") do_rdiff_ssh_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."
+ msgBox "$rdiff_title" "You cannot create the configuration file until the other steps are completed."
else
do_rdiff_finish
return
rdiff_wizard() {
require_packages rdiff-backup
+
+ # Global variables
+ rdiff_title="rdiff-backup action wizard"
_src_done=
_dest_done=
_con_done=
rdiff_directory=/backup/`hostname`
rdiff_user=
rdiff_host=
+
+ # Global variables whose '*' shall not be expanded
set -o noglob
rdiff_includes=(/var/spool/cron/crontabs /var/backups /etc /root /home /usr/local/*bin /var/lib/dpkg/status*)
rdiff_excludes=(/home/*/.gnupg)
+ rdiff_vsincludes=
set +o noglob
+
rdiff_main_menu
}