rsync 3.1.0/3.1.1 incompatible with 2.5.7

Ole Tange tange at gnu.org
Fri Jul 25 12:50:48 MDT 2014


I develop GNU Parallel. GNU Parallel uses rsync to transfer files. GNU
Parallel has a design goal of not requiring the users to change their
setup to be able to use GNU Parallel. In other words: If you are
called as a consultant to work on a Centos3 server untouched since
2007, then you can expect even the newest version of GNU Parallel will
work flawlessly.

Centos3 has rsync 2.5.7 installed.

On my development machine I have so far been using rsync prior to
3.1.0 and there has been no hiccups: Rsync has worked flawlessly
against Centos3.

Yesterday I upgraded my development machine, which also upgraded rsync to 3.1.0.

This breaks rsync against Centos3. I get the following error:

rsync-3.1.0     protocol version mismatch - is your shell clean?
rsync-3.1.0     (see the rsync man page for an explanation)
rsync-3.1.0     rsync error: protocol incompatibility (code 2) at compat.c(62)
rsync-3.1.0     rsync: connection unexpectedly closed (0 bytes
received so far) [sender]
rsync-3.1.0     rsync error: error in rsync protocol data stream (code
12) at io.c(226) [sender=3.1.0]

This is also the case for 3.1.1:

rsync-3.1.1     protocol version mismatch - is your shell clean?
rsync-3.1.1     (see the rsync man page for an explanation)
rsync-3.1.1     rsync error: protocol incompatibility (code 2) at compat.c(62)
rsync-3.1.1     rsync: connection unexpectedly closed (0 bytes
received so far) [sender]
rsync-3.1.1     rsync error: error in rsync protocol data stream (code
12) at io.c(226) [sender=3.1.1]

But this is not the case for 3.0.[0-9]: They all work fine against rsync 2.5.7.

The workaround seems to be adding --protocol 30 if you are running
rsync 3.1.x against 2.5.7, but that workaround fails when running
2.5.7 against 2.5.7, so it cannot always be used:

  [centos3]$ rsync --protocol 30 /tmp/foo localhost:
  rsync: --protocol: unknown option
  rsync error: syntax or usage error (code 1) at main.c(994)

Obviously as a consultant you cannot require the customer to neither
upgrade nor downgrade their rsync installation, just so that you can
use GNU Parallel.

I am quite surprised that rsync-3.1.x does not simply negotiate the
protocol and downgrade to protocol 30 automatically when 31 fails. And
I find the error message could be more helpful in finding the
workaround.

My question is now: What should I do as a developer?

How do I make sure that GNU Parallel's use of rsync never fails
because of protocol issues when I cannot predict which version of
rsync is used by the remote machine?

If this is a bug that will be fixed in 3.1.2, then that solves it for
future versions. But there will still be machines with 3.1.[0-1] out
there for years to come. How do your recommend I support those in GNU
Parallel?

Do you have a compatibility matrix between all version of rsync?

Are other incompatibilities (that will be turned on by default and
which does not get negotiated with the remote) planned?


/Ole


More information about the rsync mailing list