Když rsync křičí - protocol version mismatch

Člověk se učí, každý den. Dnes jsem si připomenul jedno železné pravidlo. To když rsync na mě z ničeho nic začal křičet:

protocol version mismatch — is your shell clean?

Jelikož se jednalo o zálohovací skript (používající rsync) z Windows stroje, ihned jsem začal podezřívat nekompatibilní verze rsyncu z Cygwinu a z RHELu. Začalo zkoumání, instalace různých verzí, prohledávání diskuzních fór a bugzill. Jenže rsync pod touto zprávou psal něco ve smyslu "mrkni do manuálové stránky".

Až po několika desítkách minut jsem tam kouknul. S hrůzou jsem zjistil, že tohle rsync křičí, když je něco nekalého v .bashrc skriptu uživatele na který se připojuje. Ano, nedávno jsem tam přihodil nějaké interaktivní smetí. Ostranil jsem to a všechno jelo jako víno.

Poučení ja jasné. Když program píše "podívej se do manu", ihned se tam mrknu.

Když už píšu o zálohování pomocí rsyncu z Windows, doporučil bych zejména nastavit parametry --no-p --no-g --chmod=ugo=rwX (jako poslední). Občas se mohou přístupové atributy Linux vs Windows "poprat". Můj skript s 2 měsíční historií pomocí hardlinků je následující (odzkoušeno na Cygwinu):

#!/bin/bash
what=/cygdrive/c/Users/UserXY
where=backup@10.0.0.123
dir=/home/samba/zaloha/xy
days=60
exclude=$what/Documents/Zaloha/backup_exclude

now=$( date +%Y-%m-%d_%H:%M:%S )

previous=$( ssh $where "ls $dir" 2>/dev/null | tail -1 )
link_dest=
if [ -n "$previous" ] ; then
link_dest=--link-dest=$dir/$previous
fi
rsync -vaHxS --no-p --no-g --chmod=ugo=rwX --delete --exclude-from $exclude \
--stats $link_dest $what $where:$dir/$now 2>&1
ssh $where "find $dir/* -maxdepth 0 -atime +$days | xargs rm -rf"
20 April 2011 | cygwin
twitter.com linkedin.com
google.com/+ facebook.com
flickr.com youtube.com