81 lines
2.1 KiB
Bash
81 lines
2.1 KiB
Bash
#!/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
|