mirror of
https://0xacab.org/liberate/backupninja.git
synced 2024-11-13 22:32:29 +01:00
165 lines
4.4 KiB
Plaintext
165 lines
4.4 KiB
Plaintext
|
|
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
|
|
[ $? = 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"
|
|
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*'
|
|
formItem include
|
|
formItem include
|
|
formItem include
|
|
formDisplay
|
|
[ $? = 1 ] && return;
|
|
|
|
rdiff_includes=
|
|
set -o noglob
|
|
for i in $REPLY; do
|
|
[ "$i" != "" ] && rdiff_includes="$rdiff_includes\ninclude = $i"
|
|
done
|
|
set +o noglob
|
|
|
|
formBegin "rdiff action wizard: excludes"
|
|
formItem exclude '/home/*/.gnupg'
|
|
formItem exclude
|
|
formItem exclude
|
|
formDisplay
|
|
[ $? = 1 ] && return;
|
|
|
|
rdiff_excludes=
|
|
set -o noglob
|
|
for i in $REPLY; do
|
|
[ "$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 = $rdiff_keep
|
|
EOF
|
|
echo -n -e "$rdiff_includes" >> $next_filename
|
|
echo -e "$rdiff_excludes" >> $next_filename
|
|
cat >> $next_filename <<EOF
|
|
|
|
[dest]
|
|
type = remote
|
|
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
|
|
}
|
|
|