Hello Eugene,

> > >  Yes, this issue may occure when libc6 vesion is outdated in normal
> > >  upgrade process.
> >
> > I would disagree on the definition of a normal upgrade process, one
> > would never end up with a combination of incompatible rsync + libc,
> > that can only happen if somebody installs a package that is not
> > supported by Debian (not from the official repos) and that package
> > holds libc back (thus running an unsupported version)[4].
>
>  I had several (at least 2 distinct) live systems with this post-upgrade
>  problem. They have backups, but now it too late: now those backups are
>  replaced by new ones.
>
>  However, it requires some clarification what is "normal upgrade" process.
>  I do not run full-upgrade ("aptitude safe-upgrade" in my taste) if some
>  new package it to be installed. I simply check dependences to be sure
>  that new package does not bring risk to break functionality of important
>  services on production system. The full-upgrade is performed on a schedule,
>  once a week or two, and requires additional monitoring of the system's
>  behaviour. For example, I have an LXC containter with libc-2.31-17,
>  which was not updated at least a month (file libc.so.6 dated 23-Aug).

You generally don't need to run full-upgrade on a stable Debian
release, that's true.
But if you are upgrading between major Debian releases, you are
required to perform a full-upgrade and install everything that it says
so there, if you fail to do it, you are running an unstable system
because you are mixing packages from different major releases.

This is where "normal upgrade" comes in, as soon as you upgrade to a
new Debian major release and don't perform full-upgrade, you're in
"unknown territory" (not officially supported/not normal).
We have lots of QA and CI tools that ensure things don't break in
multiple different scenarios, but this is one where we can't ensure
things will work (and don't test for it).

>  Running "apt-get update ; aptitude -R install rsync" I got rsync-3.2.3-8
>  without libc6 update. I consider this as a normal situation, because
>  I have no obligation to do full-upgrade when I install some package.

This is true generally speaking, but if you break the upgrade process
when going to a new major release, then this is not the case anymore,
the system can now be considered unstable. Anything you install might
require full-upgrade because this should have been done at the time
when you switched major releases.
You are bound to keep hitting issues like this one because it's not a
supported system where we can predict what's gonna happen, our tooling
doesn't test for such scenarios.

The correct approach would be to stick to the previous release, and/or
use backports, or solve the issues blocking the system from performing
a full-upgrade (which are issues that only arises with third party
packages, since we do have automated tests that ensure systems with
official packages-only are able to fully upgrade).

>  However, this combination (rsync-3.2.3-8 + libc6-2.31-17) is not
>  functional: rsync replies "failed to set permissions [...] Function
>  not implemented (38)".

I'd like to mention again, that even though I think you might be
risking too much with a system that bumped to a bigger major version
without a full-upgrade, and that this is not officially supported by
Debian, this is still a valid and real issue that you hit, and I will
solve it.
I also trust that you know what you're doing with those systems, and I
don't mean to say what you should or should not do. As long as you're
aware of the risks involved and understand that this is an unsupported
scenario with hidden issues, it should be fine.

> > I did try to reproduce the issue on Jessie, with libc 2.28, but I was
> > able to run "rsync -va /etc/ld.so.cache /tmp" with no issues.
>
>  Did you try the last rsync binary with libc6-2.28?
>  I tried and got an error (see below).

There was an issue on my reproduction steps, I'm now able to reproduce
the issue on Buster and Bullseye.

For the record and future references:
rsync 3.2.3-8 can be built on any Debian release as of now, the issue
only arises when a package built with libc6-dev >= 2.32 is installed
on a system that contains libc6 < 2.32.
Our dpkg-symbols solution is not able to identify this and naturally
choses a lower version requirement for the libc6 dependency.

Reproduction can be done on a Buster/Bullseye VM by installing an
rsync 3.2.3-8 that was compiled with libc6-dev >= 2.32 and running:
rsync -va /etc/ld.so.cache /tmp

I'm currently studying what's the best approach on solving this in a
clean manner, and I have updated upstream on this matter[0].

My previous plan still stands; I'd like to try to solve this outside
of the packaging of rsync, if possible, but if not I will bump rsync's
dependency to libc6 >=2.32 when it gets compiled with libc6-dev 2.32.

>> Just a small correction, I see you mentioned lchown, but the issue is
>> related to lchmod.
> Yes, it should be read "lchown" (lchmod was mentioned by mistake).

No, it's the other way around, lchown was the one mentioned by
mistake, the syscall related to this issue is lchmod.

Again, thanks for reporting the issue and helping me debug it :)

[0] https://github.com/WayneD/rsync/issues/109#issuecomment-939506927

--
Samuel Henrique <samueloph>

Reply via email to