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
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 "$@"
|