­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ # 150_check_rsync_protocol_version.sh # This file is part of Relax-and-Recover, licensed under the GNU General # Public License. Refer to the included COPYING for full text of license. # try to grab the rsync protocol version of rsync on the remote server local remote_mountpoint if [ -z "$RSYNC_PROTOCOL_VERSION" ]; then case $RSYNC_PROTO in (ssh) ssh ${RSYNC_USER}@${RSYNC_HOST} rsync --version >"$TMP_DIR/rsync_protocol" 2>&1 \ || Error "Secure shell connection not setup properly [$RSYNC_USER@$RSYNC_HOST]" if grep -q "protocol version" "$TMP_DIR/rsync_protocol" ; then RSYNC_PROTOCOL_VERSION=$(grep 'protocol version' "$TMP_DIR/rsync_protocol" | awk '{print $6}') else RSYNC_PROTOCOL_VERSION=29 # being conservative (old rsync version < 3.0) fi ;; (rsync) Log "Warning: no way to check remote rsync protocol without ssh access" RSYNC_PROTOCOL_VERSION=29 # being conservative (old rsync) ;; esac Log "Remote rsync system ($RSYNC_HOST) uses rsync protocol version $RSYNC_PROTOCOL_VERSION" else Log "Remote rsync system ($RSYNC_HOST) uses rsync protocol version $RSYNC_PROTOCOL_VERSION (overruled by user)" fi if [ "${RSYNC_USER}" != "root" -a $RSYNC_PROTO = "ssh" ]; then if [ $RSYNC_PROTOCOL_VERSION -gt 29 ]; then if grep -q "no xattrs" "$TMP_DIR/rsync_protocol"; then # no xattrs available in remote rsync, so --fake-super is not possible Error "rsync --fake-super not possible on system ($RSYNC_HOST) (no xattrs compiled in rsync)" else # when using --fake-super we must have user_xattr mount options on the remote mntpt remote_mountpoint=$(ssh ${RSYNC_USER}@${RSYNC_HOST} 'cd ${RSYNC_PATH}; df -P .' 2>/dev/null | tail -1 | awk '{print $6}') ssh ${RSYNC_USER}@${RSYNC_HOST} "cd ${RSYNC_PATH} && touch .is_xattr_supported && setfattr -n user.comment -v 'File created by ReaR to test if this filesystems supports extended attributes.' .is_xattr_supported && getfattr -n user.comment .is_xattr_supported 1>/dev/null; find .is_xattr_supported -empty -delete" \ || Error "Remote file system $remote_mountpoint does not have user_xattr mount option set!" #BACKUP_RSYNC_OPTIONS+=( --xattrs --rsync-path="rsync --fake-super" ) # see issue #366 for explanation of removing --xattrs BACKUP_RSYNC_OPTIONS+=( --rsync-path="rsync --fake-super" ) fi else Error "rsync --fake-super not possible on system ($RSYNC_HOST) (please upgrade rsync to 3.x)" fi fi