71 lines
1.6 KiB

#!/bin/bash
[ "$UID" != "0" ] && echo "You must be root." 2>&1 && exit 1
##
## code
##
user=rsync
src="$1"
if [ -z "$src" ]; then
echo "You must provide a source directory as first argument." >&2
exit 1
fi
if ! [ -d "$src" ]; then
echo "Folder '$src' not found, please provide a valid directory as first argument." >&2
exit 1
fi
dest="$2"
if [ -z "$dest" ]; then
echo "You must provide a host as target." >&2
exit 1
fi
rsync_options=(${RSYNC_OPTIONS:-})
ssh_options=(${SSH_OPTIONS:--o StrictHostKeyChecking=no})
if echo "$dest" | grep "/" >/dev/null 2>&1; then
rsync_options=("--bwlimit" "$(echo "$dest" | cut -f 2 -d "/")" "${rsync_options[@]}")
dest="$(echo "$dest" | cut -f 1 -d "/")"
fi
if echo "$dest" | grep ":" >/dev/null 2>&1; then
ssh_options=("-p" "$(echo "$dest" | cut -f 2 -d ":")" "${ssh_options[@]}")
dest="$(echo "$dest" | cut -f 1 -d ":")"
fi
hostname=$(hostname)
hostname=${LABEL_HOSTNAME:-$hostname}
dest_path="/var/mirror/$hostname"
touch /etc/rsync/exclude-patterns
touch /etc/rsync/include-patterns
if ! [ -s "/etc/rsync/include-patterns" ]; then
echo "Nothing to do as /etc/rsync/include-patterns is empty."
exit 0
fi
cmd=(/usr/bin/rsync "${rsync_options[@]}" -azvA
-e "sudo -u $user ssh ${ssh_options[*]}"
--include-from /etc/rsync/include-patterns
--exclude-from /etc/rsync/exclude-patterns
--delete --partial --partial-dir .rsync-partial
--numeric-ids "$src/" "$user@$dest":"$dest_path")
rsync_uid_gid=$(stat -c "%u:%g" "/var/lib/rsync")
chown "$rsync_uid_gid" "/var/lib/rsync/.ssh" -R
echo "${cmd[@]}"
exec "${cmd[@]}"