#!/bin/bash set -eux [ -n "${DOMAIN}" ] || { echo "Error: you must set \$DOMAIN prior to running this script." >&2 exit 1 } [ -n "${BACKUP_SERVER}" ] || { echo "Error: you must set \$BACKUP_SERVER prior to running this script." >&2 exit 1 } KEY_BACKUP_ID=${KEY_BACKUP_ID:-rsync} KEY_COMMENTARY="$KEY_BACKUP_ID@$DOMAIN" MIRROR_DIR_PATH="${MIRROR_DIR_PATH:-$PWD/resources/bin/mirror-dir}" [ -e "$MIRROR_DIR_PATH" ] || { echo "Error: you must set \$MIRROR_DIR_PATH or be the root of the charm to run this script." >&2 exit 1 } ## rsync type -p rsync >/dev/null 2>&1 || apt-get install -y rsync /dev/null || groupadd -r rsync getent passwd rsync >/dev/null || useradd -r rsync -d /var/lib/rsync -g rsync chown rsync:rsync /var/lib/rsync ## rsync ssh key creation if [ -e /var/lib/rsync/.ssh/id_rsa.pub ]; then ## Mainly for update of old solution content=$(cat /var/lib/rsync/.ssh/id_rsa.pub) commentary=${content##* } if [ "${commentary}" != "$KEY_COMMENTARY" ]; then echo "Updating ssh key commentary from '${commentary}' to '$KEY_COMMENTARY'" >&2 sed -ri "s/ [^ ]+\$/ $KEY_COMMENTARY/" /var/lib/rsync/.ssh/id_rsa.pub fi else su -c 'ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa -q -C '"$KEY_COMMENTARY" - rsync fi dest="$BACKUP_SERVER" if [[ "$dest" == *"/"* ]]; then dest="${dest%/*}" fi if [[ "$dest" == *":"* ]]; then ssh_options+=("-p" "${dest#*:}") dest="${dest%%:*}" fi ssh-keyscan "${ssh_options[@]}" -H "${dest}" > /var/lib/rsync/.ssh/known_hosts apt-get install -y kal-shlib-{common,process,cmdline,array} /dev/null || awk --version) in "mawk 1.3.3"*) ## Not good, it is from 1996, and we still find it on Debian 10 apt-get install -y gawk /etc/mirror-dir/config.yml default: sources: - /etc EOF fi cat < /etc/cron.d/mirror-dir SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin $((RANDOM % 60)) $((RANDOM % 4))-23/4 * * * root mirror-dir backup -q -h "$DOMAIN" -d "$BACKUP_SERVER" EOF