backupninja/handlers/rdiff.helper

172 lines
5.0 KiB
Plaintext
Raw Normal View History

HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup"
do_rdiff_dest() {
formBegin "rdiff action wizard"
formItem "keep" "$rdiff_keep"
formItem "dest_directory" "$rdiff_directory"
formItem "dest_host" "$rdiff_host"
formItem "dest_user" "$rdiff_user"
formDisplay
2005-07-04 08:39:00 +02:00
[ $? = 1 ] && return;
set -- $REPLY
rdiff_keep=$1
rdiff_directory=$2
rdiff_host=$3
rdiff_user=$4
_dest_done="(DONE)"
setDefault conn
}
do_rdiff_src() {
formBegin "rdiff action wizard: includes"
2005-07-04 08:39:00 +02:00
formItem include /var/spool/cron/crontabs
formItem include /var/backups
formItem include /etc
formItem include /root
formItem include /home
formItem include '/usr/local/*bin'
formItem include '/var/lib/dpkg/status*'
2005-07-04 08:39:00 +02:00
formItem include
formItem include
formItem include
formDisplay
2005-07-04 08:39:00 +02:00
[ $? = 1 ] && return;
rdiff_includes=
set -o noglob
2005-07-04 08:39:00 +02:00
for i in $REPLY; do
[ "$i" != "" ] && rdiff_includes="$rdiff_includes\ninclude = $i"
2005-07-04 08:39:00 +02:00
done
set +o noglob
formBegin "rdiff action wizard: excludes"
formItem exclude '/home/*/.gnupg'
2005-07-04 08:39:00 +02:00
formItem exclude
formItem exclude
formDisplay
2005-07-04 08:39:00 +02:00
[ $? = 1 ] && return;
rdiff_excludes=
set -o noglob
2005-07-04 08:39:00 +02:00
for i in $REPLY; do
[ "$i" != "" ] && rdiff_excludes="$rdiff_excludes\nexclude = $i"
2005-07-04 08:39:00 +02:00
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
echo "Couldn't copy root's public ssh key to authorized_keys of $rdiff_user@$rdiff_host. This time, testing whether directory is writable."
ssh $rdiff_user@$rdiff_host 'test -w .ssh || test -w .'
case $? 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." ;;
* ) msgBox "rdiff action wizard: error" "Unexpected error." ;;
esac
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() {
2005-07-04 08:39:00 +02:00
get_next_filename $configdirectory/90.rdiff
cat > $next_filename <<EOF
# options = --force
# when = everyday at 02
2005-07-04 08:39:00 +02:00
[source]
type = local
keep = $rdiff_keep
2005-07-04 08:39:00 +02:00
EOF
echo -n -e "$rdiff_includes" >> $next_filename
echo -e "$rdiff_excludes" >> $next_filename
2005-07-04 08:39:00 +02:00
cat >> $next_filename <<EOF
2005-07-04 08:39:00 +02:00
[dest]
type = remote
directory = $rdiff_directory
host = $rdiff_host
user = $rdiff_user
2005-07-04 08:39:00 +02:00
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
}