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.
|
|
#!/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 "$@"
|