[Bug 1934992] Re: rsync 3.2.x in Groovy depends on broken libxxhash 0.7.x
Robie Basak
1934992 at bugs.launchpad.net
Mon Jul 12 11:03:40 UTC 2021
Thank you for the further investigation.
It sounds like upstream broke ABI between libxxhash0 0.7 and libxxhash0
0.8 but did not bump the soname when they did so. Perhaps that's because
upstream still considers this experimental as it has a version < 1.0, or
perhaps that was a mistake. For a proper fix in the development release,
I'd expect upstream to bump the soname to make the symbol's behaviour
unambiguous. Without that, proper ABI compatibility is impossible since
different distributions and releases will have different behaviour for
the same soname and symbol depending on the version used to build the
library.
> To remedy that, I would suggest a rebuild of xxhash + libxxhash0 on
Focal where all xxh128 symbols/functionality is removed/blacklisted.
I'm not convinced. The use case you've presented is still of
low/unsupported priority and not properly resolved upstream. On the
other hand, we try not to break ABI in a stable release. And as pointed
out:
> Results produced by v0.7.x are not comparable with results
> from v0.7.y. However, the API is completely stable, and it
> can safely be used for ephemeral data (local sessions).
...so if a user has built against libxxhash for such a use case that is
supported by upstream, your proposal for changing Focal would break
them.
Leaving Focal as-is still seems like the least-worst answer to me.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to xxhash in Ubuntu.
https://bugs.launchpad.net/bugs/1934992
Title:
rsync 3.2.x in Groovy depends on broken libxxhash 0.7.x
Status in xxhash package in Ubuntu:
Triaged
Status in xxhash source package in Groovy:
Won't Fix
Bug description:
**NOTE: This ticket has been moved/altered. Original problem referred
to rsync behaviour with libxxhash0. New subject is the changed ABI of
libxxhash0.**
Original-Subject: rsync 3.2.x in Groovy depends on broken libxxhash
0.7.x
Actual problem: libxxhash0 in Focal exposes 128-bit xxhash (xxh128)
symbols which behave differently on versions of libxxhash0 in Groovy
and above.
In xxhash 0.7.x there is this notice:
https://github.com/Cyan4973/xxHash/blob/173e50be0509c6fb6c1bb74d95049ef61d7fdced/xxhash.h#L465-L476
> The XXH3 algorithm is still in development.
> The results it produces may still change in future versions.
>
> Results produced by v0.7.x are not comparable with results
> from v0.7.y. However, the API is completely stable, and it
> can safely be used for ephemeral data (local sessions).
>
> Avoid storing values in long-term storage until the
> algorithm is finalized. XXH3's return values will be
> officially finalized upon reaching v0.8.0.
Unfortunately these ended up as usable symbols in xxhash 0.7.x in
Debian:
> XXH128 at Base 0.7.0
(etc..)
This means that those linking against libxxhash0 would get a binary
dependency on 0.7.0. But behaviour of xxh128 differs between 0.7 and
0.8. So if you're linking against xxh128 from 0.8.x, it should binary-
depend on >=0.8 and not >=0.7. (And if possible, you should not use
xxh128 at all in 0.7.x.)
The following Debian changeset fixes this for newer libxxhash0 builds:
https://github.com/norbusan/debian-
xxhash/commit/b51053c86952dd13573b08344101172c88de847f
> debian/libxxhash0.symbols
> - XXH128 at Base 0.7.0
> + XXH128 at Base 0.8.0
But, this is not fully resolved until:
- that Debian change lands in libxxhash0 in Ubuntu;
- packages linking against libxxhash0 (e.g. rsync) are rebuilt against this newer package, so the Depends is bumped to >=0.8;
- xxh128 in libxxhash0 in Focal is clearly marked as ephemeral (or removed altogether; this applies to xxh128 symbols libxxhash0 and an `xxh128sum` binary in the xxhash package)
Cheers,
Walter Doekes
OSSO B.V.
---vvv--- Original ticket below ---vvv---
**Problem**
$ rsync root at focal-system:/etc/.pwd.lock .
ERROR: .pwd.lock failed verification -- update discarded.
rsync error: some files/attrs were not transferred
(see previous errors)
(code 23) at main.c(1816) [generator=3.2.3]
$ rsync root at focal-system:/etc/.pwd.lock . --debug=all
opening connection using: ssh -l root focal-system rsync \
--server --sender \
-e.LsfxCIvu . /etc/.pwd.lock (10 args)
(Client) Protocol versions: remote=31, negotiated=31
Client negotiated checksum: xxh128
...
**Cause**
focal-system# dpkg -l | grep -E 'libxxhash|rsync'
ii libxxhash0:amd64 0.7.3-1 amd64
ii rsync 3.2.3-2ubuntu1 amd64
**Why this affects only us and not more people?**
On Ubuntu/Focal, there is no rsync 3.2.3, only 3.1.3-8. But because we
need the lz4 compression support we've fetched a newer rsync (from
Groovy).
However: the rsync 3.2.3 depends on libxxhash0 0.7.1+, while in fact
it needs 0.8+.
**Details**
On a Ubuntu/Focal system we have installed a rsync 3.2.3 package from
Ubuntu/Groovy because we need the lz4 compression support.
focal-system# apt-cache show rsync
Package: rsync
...
Version: 3.2.3-2ubuntu1
Depends: lsb-base, libacl1 (>= 2.2.23), libc6 (>= 2.15),
liblz4-1 (>= 0.0~r130), libpopt0 (>= 1.14), libssl1.1 (>= 1.1.0),
libxxhash0 (>= 0.7.1), libzstd1 (>= 1.3.8), zlib1g (>= 1:1.1.4)
...
Alongside this we had libxxhash0 0.7.3-1 from Focal:
focal-system# apt-cache policy libxxhash0
libxxhash0:
Installed: 0.7.3-1
Candidate: 0.7.3-1
Version table:
*** 0.7.3-1 500
500 http://ARCHIVE/ubuntu focal/universe amd64 Packages
100 /var/lib/dpkg/status
According to the dependencies, this should work. But the combination does not, as this quote from the rsync maintainer would tell you:
https://github.com/WayneD/rsync/issues/122#issuecomment-737690913
> Yeah, Cyan4973 could have told you that the 128-bit xxhash only
> just stabilized in its 0.8.0 release, so anything older than
> that isn't compatible.
**The fix**
As the maintainer points out, version 0.7 is not stable (= broken for
our intents and purposes) and thus not fit for use with rsync 3.2.
I would argue that it's a good idea to bump the dependency of rsync
3.2.3 on Groovy to libxxhash0>=0.8
After all, in Groovy there is a libxxhash0 0.8.0-1ubuntu1.20.10.1, so
that would not be a problem. And it would fix issues for those mixing
and matching packages.
Thanks!
Walter Doekes
OSSO B.V.
(*) possible patch:
$ diff -pu debian/control{.orig,}
--- debian/control.orig 2021-07-08 09:56:57.646861644 +0200
+++ debian/control 2021-07-08 09:57:38.499029903 +0200
@@ -8,7 +8,7 @@ Build-Depends: debhelper-compat (= 13),
libacl1-dev,
libpopt-dev,
liblz4-dev,
- libxxhash-dev,
+ libxxhash-dev (>= 0.8),
libzstd-dev,
zlib1g-dev,
libssl-dev
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/xxhash/+bug/1934992/+subscriptions
More information about the foundations-bugs
mailing list