You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

109 lines
2.5 KiB

#!/bin/bash
. /etc/shlib
include common
include parse
include cmdline
include config
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && SOURCED=true
version=0.1
desc='Install backup'
help=""
[ "$SOURCED" ] && return 0
##
## Command line processing
##
cmdline.spec.gnu
cmdline.spec.reporting
cmdline.spec.gnu install
cmdline.spec.gnu backup
cmdline.spec::cmd:install:run() {
:
}
cmdline.spec:install:cmd:backup:run() {
: :posarg: BACKUP_SERVER 'Target backup server'
: :optval: --service-name,-s "YAML service name in compose
file to check for existence of key.
Defaults to 'rsync-backup'"
: :optval: --compose-file,-f "Compose file location. Defaults to
the value of '\$DEFAULT_COMPOSE_FILE'"
local service_name compose_file
[ -e "/etc/compose/local.conf" ] && source /etc/compose/local.conf
compose_file=${opt_compose_file:-$DEFAULT_COMPOSE_FILE}
service_name=${opt_service_name:-rsync-backup}
if ! [ -e "$compose_file" ]; then
err "Compose file not found in '$compose_file'."
return 1
fi
## XXXvlab: far from perfect as it mimics and depends internal
## logic of current default way to get a domain in compose-core
host=$(hostname)
if ! egrep "^$host:" "$compose_file" >/dev/null &&
! egrep "^\s+domain:\s+$host\s*$" "$compose_file" >/dev/null; then
err "Can't find domain '$host' in compose file '$compose_file'."
return 1
fi
ip=$(getent ahosts "$host" | egrep "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\s+" | head -n 1 | cut -f 1 -d " ") || return 1
my_ip=$(curl -s myip.kal.fr)
if [ "$ip" != "$my_ip" ]; then
err "IP of '$host' ($ip) doesn't match mine ($my_ip)."
return 1
fi
if [ -e "/root/.ssh/rsync_rsa" ]; then
if ! [ -e "/root/.ssh/rsync_rsa.pub" ]; then
err "Didn't find public key in '/root/.ssh/rsync_rsa.pub'. (Private key is present !)."
return 1
fi
else
Wrap -d "Creating rsync key pair" -- \
ssh-keygen -t rsa -N \"\" -f /root/.ssh/rsync_rsa -C "rsync@$host"
fi
if egrep "^$service_name:" "$compose_file" >/dev/null; then
err "There's already a backup service named '$service_name'"
return 1
fi
cat <<EOF >> "$compose_file"
$service_name:
options:
ident: $host
target: $BACKUP_SERVER
private-key: |
$(cat /root/.ssh/rsync_rsa | sed -r 's/^/ /g')
EOF
}
cmdline::parse "$@"