|
@@ -71,6 +71,9 @@ function backup_directory_to_friend {
|
71
|
71
|
exit 43382
|
72
|
72
|
fi
|
73
|
73
|
ADMIN_BACKUP_KEY_ID=$(gpg --list-keys "$ADMIN_NAME (backup key)" | grep 'pub ' | awk -F ' ' '{print $2}' | awk -F '/' '{print $2}')
|
|
74
|
+ if [ ! -d $SERVER_DIRECTORY/backup/${2} ]; then
|
|
75
|
+ mkdir -p $SERVER_DIRECTORY/backup/${2}
|
|
76
|
+ fi
|
74
|
77
|
obnam force-lock -r $SERVER_DIRECTORY/backup/${2} --encrypt-with $ADMIN_BACKUP_KEY_ID ${1}
|
75
|
78
|
obnam backup -r $SERVER_DIRECTORY/backup/${2} --encrypt-with $ADMIN_BACKUP_KEY_ID ${1}
|
76
|
79
|
obnam forget --keep=30d -r $SERVER_DIRECTORY/backup/${2} --encrypt-with $ADMIN_BACKUP_KEY_ID
|
|
@@ -123,36 +126,24 @@ for d in /home/*/ ; do
|
123
|
126
|
# personal settings
|
124
|
127
|
if [ -d /home/$USERNAME/personal ]; then
|
125
|
128
|
echo $"Backing up personal settings for $USERNAME"
|
126
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/personal/$USERNAME ]; then
|
127
|
|
- mkdir -p $SERVER_DIRECTORY/backup/personal/$USERNAME
|
128
|
|
- fi
|
129
|
129
|
backup_directory_to_friend /home/$USERNAME/personal personal/$USERNAME
|
130
|
130
|
fi
|
131
|
131
|
|
132
|
132
|
# gpg keys
|
133
|
133
|
if [ -d /home/$USERNAME/.gnupg ]; then
|
134
|
134
|
echo $"Backing up gpg keys for $USERNAME"
|
135
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/gnupg/$USERNAME ]; then
|
136
|
|
- mkdir -p $SERVER_DIRECTORY/backup/gnupg/$USERNAME
|
137
|
|
- fi
|
138
|
135
|
backup_directory_to_friend /home/$USERNAME/.gnupg gnupg/$USERNAME
|
139
|
136
|
fi
|
140
|
137
|
|
141
|
138
|
# ssh keys
|
142
|
139
|
if [ -d /home/$USERNAME/.ssh ]; then
|
143
|
140
|
echo $"Backing up ssh keys for $USERNAME"
|
144
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/ssh/$USERNAME ]; then
|
145
|
|
- mkdir -p $SERVER_DIRECTORY/backup/ssh/$USERNAME
|
146
|
|
- fi
|
147
|
141
|
backup_directory_to_friend /home/$USERNAME/.ssh ssh/$USERNAME
|
148
|
142
|
fi
|
149
|
143
|
|
150
|
144
|
# config files
|
151
|
145
|
if [ -d /home/$USERNAME/.config ]; then
|
152
|
146
|
echo $"Backing up config files for $USERNAME"
|
153
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/config/$USERNAME ]; then
|
154
|
|
- mkdir -p $SERVER_DIRECTORY/backup/config/$USERNAME
|
155
|
|
- fi
|
156
|
147
|
backup_directory_to_friend /home/$USERNAME/.config config/$USERNAME
|
157
|
148
|
fi
|
158
|
149
|
|
|
@@ -166,9 +157,6 @@ for d in /home/*/ ; do
|
166
|
157
|
if [ -f /etc/Muttrc ]; then
|
167
|
158
|
cp /etc/Muttrc /home/$USERNAME/tempbackup
|
168
|
159
|
fi
|
169
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/mutt/$USERNAME ]; then
|
170
|
|
- mkdir -p $SERVER_DIRECTORY/backup/mutt/$USERNAME
|
171
|
|
- fi
|
172
|
160
|
backup_directory_to_friend /home/$USERNAME/tempbackup mutt/$USERNAME
|
173
|
161
|
fi
|
174
|
162
|
|
|
@@ -179,18 +167,12 @@ for d in /home/*/ ; do
|
179
|
167
|
mkdir -p /home/$USERNAME/tempbackup
|
180
|
168
|
fi
|
181
|
169
|
cp /home/$USERNAME/.procmailrc /home/$USERNAME/tempbackup
|
182
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/procmail/$USERNAME ]; then
|
183
|
|
- mkdir -p $SERVER_DIRECTORY/backup/procmail/$USERNAME
|
184
|
|
- fi
|
185
|
170
|
backup_directory_to_friend /home/$USERNAME/tempbackup procmail/$USERNAME
|
186
|
171
|
fi
|
187
|
172
|
|
188
|
173
|
# spamassassin settings
|
189
|
174
|
if [ -d /home/$USERNAME/.spamassassin ]; then
|
190
|
175
|
echo $"Backing up spamassassin settings for $USERNAME"
|
191
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/spamassassin/$USERNAME ]; then
|
192
|
|
- mkdir -p $SERVER_DIRECTORY/backup/spamassassin/$USERNAME
|
193
|
|
- fi
|
194
|
176
|
backup_directory_to_friend /home/$USERNAME/.spamassassin spamassassin/$USERNAME
|
195
|
177
|
fi
|
196
|
178
|
|
|
@@ -202,9 +184,6 @@ for d in /home/*/ ; do
|
202
|
184
|
fi
|
203
|
185
|
tar -czvf /root/backupemail/$USERNAME/maildir.tar.gz /home/$USERNAME/Maildir
|
204
|
186
|
echo $"Backing up emails for $USERNAME"
|
205
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/mail/$USERNAME ]; then
|
206
|
|
- mkdir -p $SERVER_DIRECTORY/backup/mail/$USERNAME
|
207
|
|
- fi
|
208
|
187
|
backup_directory_to_friend /root/backupemail/$USERNAME mail/$USERNAME
|
209
|
188
|
fi
|
210
|
189
|
fi
|
|
@@ -246,9 +225,6 @@ fi
|
246
|
225
|
|
247
|
226
|
# backup owncloud
|
248
|
227
|
if [ -d /etc/owncloud ]; then
|
249
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/owncloud2 ]; then
|
250
|
|
- mkdir -p $SERVER_DIRECTORY/backup/owncloud2
|
251
|
|
- fi
|
252
|
228
|
backup_database_to_friend owncloud
|
253
|
229
|
backup_directory_to_friend /root/tempownclouddata ownclouddata
|
254
|
230
|
echo $"Backing up Owncloud data"
|
|
@@ -258,12 +234,6 @@ fi
|
258
|
234
|
|
259
|
235
|
# backup gogs
|
260
|
236
|
if [ -d /home/git/go/src/github.com/gogits ]; then
|
261
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/gogsrepos ]; then
|
262
|
|
- mkdir -p $SERVER_DIRECTORY/backup/gogsrepos
|
263
|
|
- fi
|
264
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/gogsssh ]; then
|
265
|
|
- mkdir -p $SERVER_DIRECTORY/backup/gogsssh
|
266
|
|
- fi
|
267
|
237
|
backup_database_to_friend gogs
|
268
|
238
|
backup_directory_to_friend /root/tempgogsdata gogsdata
|
269
|
239
|
echo $"Obtaining Gogs settings backup"
|
|
@@ -276,12 +246,6 @@ if [ -d /home/git/go/src/github.com/gogits ]; then
|
276
|
246
|
fi
|
277
|
247
|
|
278
|
248
|
if [ -d /etc/dokuwiki ]; then
|
279
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/wiki ]; then
|
280
|
|
- mkdir -p $SERVER_DIRECTORY/backup/wiki
|
281
|
|
- fi
|
282
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/wiki2 ]; then
|
283
|
|
- mkdir -p $SERVER_DIRECTORY/backup/wiki2
|
284
|
|
- fi
|
285
|
249
|
echo $"Backing up wiki"
|
286
|
250
|
backup_directory_to_friend /var/lib/dokuwiki wiki
|
287
|
251
|
backup_directory_to_friend /etc/dokuwiki wiki2
|
|
@@ -291,9 +255,6 @@ fi
|
291
|
255
|
if grep -q "Blog domain" $COMPLETION_FILE; then
|
292
|
256
|
FULLBLOG_DOMAIN_NAME=$(cat $COMPLETION_FILE | grep "Blog domain" | awk -F ':' '{print $2}')
|
293
|
257
|
if [ -d /var/www/${FULLBLOG_DOMAIN_NAME} ]; then
|
294
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/blog ]; then
|
295
|
|
- mkdir -p $SERVER_DIRECTORY/backup/blog
|
296
|
|
- fi
|
297
|
258
|
echo $"Backing up blog"
|
298
|
259
|
backup_directory_to_friend /var/www/${FULLBLOG_DOMAIN_NAME}/htdocs blog
|
299
|
260
|
else
|
|
@@ -305,45 +266,30 @@ fi
|
305
|
266
|
# Backup certificates
|
306
|
267
|
if [ -d /etc/ssl ]; then
|
307
|
268
|
echo $"Backing up certificates"
|
308
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/ssl ]; then
|
309
|
|
- mkdir -p $SERVER_DIRECTORY/backup/ssl
|
310
|
|
- fi
|
311
|
269
|
backup_directory_to_friend /etc/ssl ssl
|
312
|
270
|
fi
|
313
|
271
|
|
314
|
272
|
# Backup the public mailing list
|
315
|
273
|
if [ -d /var/spool/mlmmj ]; then
|
316
|
274
|
echo $"Backing up the public mailing list"
|
317
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/mailinglist ]; then
|
318
|
|
- mkdir -p $SERVER_DIRECTORY/backup/mailinglist
|
319
|
|
- fi
|
320
|
275
|
backup_directory_to_friend /var/spool/mlmmj mailinglist
|
321
|
276
|
fi
|
322
|
277
|
|
323
|
278
|
# Backup xmpp settings
|
324
|
279
|
if [ -d /var/lib/prosody ]; then
|
325
|
280
|
echo $"Backing up the XMPP settings"
|
326
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/xmpp ]; then
|
327
|
|
- mkdir -p $SERVER_DIRECTORY/backup/xmpp
|
328
|
|
- fi
|
329
|
281
|
backup_directory_to_friend /var/lib/prosody xmpp
|
330
|
282
|
fi
|
331
|
283
|
|
332
|
284
|
# Backup web sites
|
333
|
285
|
if [ -d /etc/nginx ]; then
|
334
|
286
|
echo $"Backing up web settings"
|
335
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/web ]; then
|
336
|
|
- mkdir -p $SERVER_DIRECTORY/backup/web
|
337
|
|
- fi
|
338
|
287
|
backup_directory_to_friend /etc/nginx/sites-available web
|
339
|
288
|
fi
|
340
|
289
|
|
341
|
290
|
# Backup admin user README file
|
342
|
291
|
if [ -f /home/$ADMIN_USERNAME/README ]; then
|
343
|
292
|
echo $"Backing up README"
|
344
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/readme ]; then
|
345
|
|
- mkdir -p $SERVER_DIRECTORY/backup/readme
|
346
|
|
- fi
|
347
|
293
|
if [ ! -d /home/$ADMIN_USERNAME/tempbackup ]; then
|
348
|
294
|
mkdir -p /home/$ADMIN_USERNAME/tempbackup
|
349
|
295
|
fi
|
|
@@ -354,18 +300,12 @@ fi
|
354
|
300
|
# Backup IPFS
|
355
|
301
|
if [ -d /home/$ADMIN_USERNAME/.ipfs ]; then
|
356
|
302
|
echo $"Backing up IPFS"
|
357
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/ipfs ]; then
|
358
|
|
- mkdir -p $SERVER_DIRECTORY/backup/ipfs
|
359
|
|
- fi
|
360
|
303
|
backup_directory_to_friend /home/$ADMIN_USERNAME/.ipfs ipfs
|
361
|
304
|
fi
|
362
|
305
|
|
363
|
306
|
# Backup DLNA cache
|
364
|
307
|
if [ -d /var/cache/minidlna ]; then
|
365
|
308
|
echo $"Backing up DLNA cache"
|
366
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/dlna ]; then
|
367
|
|
- mkdir -p $SERVER_DIRECTORY/backup/dlna
|
368
|
|
- fi
|
369
|
309
|
backup_directory_to_friend /var/cache/minidlna dlna
|
370
|
310
|
fi
|
371
|
311
|
|
|
@@ -378,18 +318,12 @@ if [ -f /etc/mumble-server.ini ]; then
|
378
|
318
|
cp -f /etc/mumble-server.ini /root/tempvoipbackup
|
379
|
319
|
cp -f /var/lib/mumble-server/mumble-server.sqlite /root/tempvoipbackup
|
380
|
320
|
cp -f /etc/sipwitch.conf /root/tempvoipbackup
|
381
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/voip ]; then
|
382
|
|
- mkdir -p $SERVER_DIRECTORY/backup/voip
|
383
|
|
- fi
|
384
|
321
|
backup_directory_to_friend /root/tempvoipbackup voip
|
385
|
322
|
fi
|
386
|
323
|
|
387
|
324
|
# Backup Tox node settings
|
388
|
325
|
if [ -d /var/lib/tox-bootstrapd ]; then
|
389
|
326
|
echo "Backing up Tox node settings"
|
390
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/tox ]; then
|
391
|
|
- mkdir -p $SERVER_DIRECTORY/backup/tox
|
392
|
|
- fi
|
393
|
327
|
if [ -d /var/lib/tox-bootstrapd/Maildir ]; then
|
394
|
328
|
rm -rf /var/lib/tox-bootstrapd/Maildir
|
395
|
329
|
fi
|
|
@@ -399,9 +333,6 @@ fi
|
399
|
333
|
|
400
|
334
|
# MariaDB settings
|
401
|
335
|
if [ ${#DATABASE_PASSWORD} -gt 1 ]; then
|
402
|
|
- if [ ! -d $SERVER_DIRECTORY/backup/mariadb ]; then
|
403
|
|
- mkdir -p $SERVER_DIRECTORY/backup/mariadb
|
404
|
|
- fi
|
405
|
336
|
if [ ! -d /root/tempmariadb ]; then
|
406
|
337
|
mkdir /root/tempmariadb
|
407
|
338
|
fi
|
|
@@ -434,45 +365,45 @@ do
|
434
|
365
|
echo "$NOW Starting backup to $REMOTE_SERVER" >> /var/log/remotebackups.log
|
435
|
366
|
|
436
|
367
|
# Social key management
|
437
|
|
- for d in /home/*/ ; do
|
438
|
|
- USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
|
439
|
|
- if [[ $USERNAME != "git" ]]; then
|
440
|
|
- if [ -d /home/$USERNAME/.gnupg_fragments ]; then
|
441
|
|
- if [ $REMOTE_DOMAIN ]; then
|
442
|
|
- cd /home/$USERNAME/.gnupg_fragments
|
443
|
|
- no_of_shares=$(ls -afq keyshare.asc.* | wc -l)
|
444
|
|
- if (( no_of_shares > 0 )); then
|
445
|
|
- # Pick a share index based on the domain name
|
446
|
|
- # This ensures that the same share is always given to the same domain
|
447
|
|
- sharenumstr=$(md5sum <<< "$REMOTE_DOMAIN")
|
448
|
|
- share_index=$(echo $((0x${sharenumstr%% *} % ${no_of_shares})) | tr -d -)
|
449
|
|
-
|
450
|
|
- # get the share filename
|
451
|
|
- share_files=(/home/$USERNAME/.gnupg_fragments/keyshare.asc.*)
|
452
|
|
- share_filename=${share_files[share_index]}
|
453
|
|
-
|
454
|
|
- # create a temp directory containing the share
|
455
|
|
- mkdir -p /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME
|
456
|
|
- cp $share_filename /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME/
|
457
|
|
-
|
458
|
|
- # copy the fragments directory to the remote server
|
459
|
|
- /usr/bin/sshpass -p $REMOTE_PASSWORD scp -r -P $REMOTE_SSH_PORT /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME $REMOTE_SERVER
|
460
|
|
- if [ ! "$?" = "0" ]; then
|
461
|
|
- # Send a warning email
|
462
|
|
- echo "Key share to $REMOTE_SERVER failed" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
463
|
|
- fi
|
464
|
|
-
|
465
|
|
- # remove the temp file/directory
|
466
|
|
- shred -zu /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME/*
|
467
|
|
- rm -rf /home/$USERNAME/tempkey
|
468
|
|
-
|
469
|
|
- # Send a confirmation email
|
470
|
|
- echo "Key shared to $REMOTE_SERVER" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
471
|
|
- fi
|
472
|
|
- fi
|
473
|
|
- fi
|
474
|
|
- fi
|
475
|
|
- done
|
|
368
|
+ for d in /home/*/ ; do
|
|
369
|
+ USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
|
|
370
|
+ if [[ $USERNAME != "git" ]]; then
|
|
371
|
+ if [ -d /home/$USERNAME/.gnupg_fragments ]; then
|
|
372
|
+ if [ $REMOTE_DOMAIN ]; then
|
|
373
|
+ cd /home/$USERNAME/.gnupg_fragments
|
|
374
|
+ no_of_shares=$(ls -afq keyshare.asc.* | wc -l)
|
|
375
|
+ if (( no_of_shares > 0 )); then
|
|
376
|
+ # Pick a share index based on the domain name
|
|
377
|
+ # This ensures that the same share is always given to the same domain
|
|
378
|
+ sharenumstr=$(md5sum <<< "$REMOTE_DOMAIN")
|
|
379
|
+ share_index=$(echo $((0x${sharenumstr%% *} % ${no_of_shares})) | tr -d -)
|
|
380
|
+
|
|
381
|
+ # get the share filename
|
|
382
|
+ share_files=(/home/$USERNAME/.gnupg_fragments/keyshare.asc.*)
|
|
383
|
+ share_filename=${share_files[share_index]}
|
|
384
|
+
|
|
385
|
+ # create a temp directory containing the share
|
|
386
|
+ mkdir -p /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME
|
|
387
|
+ cp $share_filename /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME/
|
|
388
|
+
|
|
389
|
+ # copy the fragments directory to the remote server
|
|
390
|
+ /usr/bin/sshpass -p $REMOTE_PASSWORD scp -r -P $REMOTE_SSH_PORT /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME $REMOTE_SERVER
|
|
391
|
+ if [ ! "$?" = "0" ]; then
|
|
392
|
+ # Send a warning email
|
|
393
|
+ echo "Key share to $REMOTE_SERVER failed" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
|
394
|
+ fi
|
|
395
|
+
|
|
396
|
+ # remove the temp file/directory
|
|
397
|
+ shred -zu /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME/*
|
|
398
|
+ rm -rf /home/$USERNAME/tempkey
|
|
399
|
+
|
|
400
|
+ # Send a confirmation email
|
|
401
|
+ echo "Key shared to $REMOTE_SERVER" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
|
402
|
+ fi
|
|
403
|
+ fi
|
|
404
|
+ fi
|
|
405
|
+ fi
|
|
406
|
+ done
|
476
|
407
|
|
477
|
408
|
rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" $SERVER_DIRECTORY/backup $REMOTE_SERVER
|
478
|
409
|
if [ ! "$?" = "0" ]; then
|