forked from 0k/0k-charms
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.
71 lines
1.6 KiB
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[@]}"
|