scripts/backup/backup.sh

81 lines
2.1 KiB
Bash
Raw Normal View History

2019-03-09 16:46:25 +01:00
#!/usr/bin/env bash
# backup.sh
#
# Copyright (C) 2019 Christian Ulrich
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
SERVER_MAC_ADDRESS=40:61:86:32:f8:c3
SERVER_STAGE1_IP=10.0.0.19
SERVER_STAGE1_PORT=2222
SERVER_STAGE1_USERNAME=root
SERVER_IP="$SERVER_STAGE1_IP"
SERVER_PORT=22
SERVER_USERNAME=luno
SSH_IDENTITY_FILE=~/.ssh/id_rsa
DIRECTORIES=("/data" "/etc/nixos" "/var/lib/matrix-synapse" "/var/lib/postgresql" "/var/lib/prosody")
function cleanup {
ssh-add -d $SSH_IDENTITY_FILE
kill $SSH_AGENT_PID
}
function wakeup_server {
wakelan $SERVER_MAC_ADDRESS
}
function wait_for_server {
local ip="$1"
local port="$2"
echo "Waiting for $1:$2 ..."
while true; do
nc -z $ip $port 2>/dev/null && break
done
}
function init_server {
eval $(ssh-agent) 1>/dev/null
ssh-add $SSH_IDENTITY_FILE
wait_for_server $SERVER_STAGE1_IP $SERVER_STAGE1_PORT || return 1
ssh -l $SERVER_STAGE1_USERNAME -p $SERVER_STAGE1_PORT $SERVER_STAGE1_IP -t 'cryptsetup-askpass'
wait_for_server $SERVER_IP $SERVER_PORT || return 2
}
function shutdown_server {
echo "Trying to shutdown server."
ssh -l $SERVER_USERNAME -p $SERVER_PORT $SERVER_IP 'sudo shutdown -h now'
}
function do_backup {
echo "Starting backup..."
rsync -avR --no-inc-recursive --info=progress2 --delete -e "ssh -p $SERVER_PORT" "${DIRECTORIES[@]}" $SERVER_USERNAME@$SERVER_IP:
if [ $? -eq 0 ]; then
echo "Backup successful!"
fi
}
function main {
wakeup_server
init_server
if [ $? -eq 0 ]; then
do_backup
fi
shutdown_server
cleanup
}
main