blob: 2efbe11b04f2994b9f877c65d7557cb96ddc33ca (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
do_rdiff_dest() {
startForm "rdiff action wizard"
formItem "keep" "$rdiff_keep"
formItem "dest_directory" "$rdiff_directory"
formItem "dest_host" "$rdiff_host"
formItem "dest_user" "$rdiff_user"
displayForm
[ $? = 1 ] && return;
set -- $REPLY
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
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
displayForm
[ $? = 1 ] && return;
rdiff_includes=
set -o noglob
for i in $REPLY; do
[ "$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;
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
}
|