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.
80 lines
1.9 KiB
80 lines
1.9 KiB
#!/bin/bash
|
|
|
|
|
|
set -eux
|
|
|
|
|
|
[ "${DOMAIN}" ] || {
|
|
echo "Error: you must set \$DOMAIN prior to running this script." >&2
|
|
exit 1
|
|
}
|
|
|
|
[ "${BACKUP_SERVER}" ] || {
|
|
echo "Error: you must set \$BACKUP_SERVER prior to running this script." >&2
|
|
exit 1
|
|
}
|
|
|
|
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
|
|
|
|
## creating rsync user
|
|
mkdir -p /var/lib/rsync
|
|
|
|
getent group 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
|
|
[ -e /var/lib/rsync/.ssh/id_rsa ] ||
|
|
su -c 'ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa -q -C rsync@'"$DOMAIN" - rsync
|
|
|
|
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
|
|
case $(awk -Wversion 2>/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 </dev/null
|
|
;;
|
|
esac
|
|
|
|
ln -sf "$PWD/resources/bin/mirror-dir" /usr/local/sbin/mirror-dir
|
|
|
|
|
|
|
|
if ! [ -e /etc/mirror-dir/config.yml ]; then
|
|
mkdir -p /etc/mirror-dir
|
|
cat <<EOF > /etc/mirror-dir/config.yml
|
|
default:
|
|
sources:
|
|
- /etc
|
|
EOF
|
|
fi
|
|
|
|
cat <<EOF > /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
|