Package: dpkg
Version: 1.22.13
Control: block 1092190 by -1
Now, though, I'm afraid I come with the change request:
Ian Jackson:
dgit's test suite uses some rule-invocation-tracking test packages to
see which targets get invoked by various build modes. (This is
necessary to make sure that dgit's invocations of various build tools
DTRT.)
The existing expectation from Debian packaging is that the package is expected to recurse into the `build` target on its own as needed if you
call `binary` directly. Therefore, I think the rule-invocation-tracking
tests on its own is "buggy" (makes invalid assumptions) here.
Therefore, I would like to approach this from what are these rule-invocation-tracking test *expected* to validate and how are they
doing it?
Package: dpkg
Version: 1.22.13
Control: block 1092190 by -1
It seems likely to me that there will continue to be packages in the
wild which this behavioural change will break - particularly including packages not part of Debian, packages from old Debian release, and
perhaps whole derivative distros.
In order to allow us to build old packages with new tooling, or
out-of-distro packages, or whatever, I think dpkg-buildpackage should
have a way to request the previous (bookworm-and-earlier) behaviour.
I looked through the manpage and found --rules-requires-root, but that
says that it disregards the Rules-Requires-Root field entirely, which
isn't right. (And might also break things...)
Could we please have a command line option to just change the default,
so that trixie's dpkg-buildpackage can be used in circumstances where bookworm's would have worked ?
As a heads up, please read my reply more as an exploratory one with
a pinch of push back,
1) chown fails w/ checked exit code, aborts
2) chown fails w/o abort, silent breakage
In here chmod (say to set-user-ID) does not matter because the chown
success or failure always wins.
So for the problematic case 2),
Said that. It's true that packages can of course still break (either
with an abort, or with a dpkg-deb warning), but an extremely quick and backwards compatible way to unbreak them would be to add an «Rules-Requires-Root: binary-targets», which should do the right thing
even with old dpkg-dev tools that do not understand it (as then it would
be the default).
Note that when we designed the R³ interfaces and behavior we took care
of defining them so that new packages declaring these interfaces,
after having been adapted, should still work with old tooling.
This is the part I'd like to apply this slight push back. :) I don't
think we can guarantee to build old packages with new tooling,
While I agree it's important to have ways to back off from a change,
to ease with such transitions, in this case we have provided that
already from the beginning. And what matters most is not failing
silently.
I thought I could propose for dgit to use only this option
Chris Hofstaedtler writes ("Re: Bug#1092193: option (or env) to request <=bookworm r-r-r behaviour"):
I'm sympathetic to keeping existing out-of-Debian packaging working,
but I just have to note two thoughts:
1) actual downstreams are used to dealing with changes in Debian all
the time.
2) users with CI jobs are, too. Depending on what their exact setup
is they'll already have noticed, or they pay the cost when changing
the distribution name in their config.
I find this argument very weak. It basically amounts to "these people
are already used to us not being kind to them, so being kind to them
doesn't matter". The premise is sadly maybe true much of the time,
but I don't hink the conclusion follows.
Once again, I really don't understand why there is any opposition to
my suggestion. Adding an option like I suggest carries a tiny cost
for us, and a tiny cost for our users (just another option in the long
list in the dpkg-buildpackage manpage and usage message).
What is the downside?
Why is anyone even bothering to argue against my suggestion?
We could have added this option with a fraction of the effort
spent on trying to argue that it's not necessary.
I've explained my motivation.
I'm sympathetic to keeping existing out-of-Debian packaging working,
but I just have to note two thoughts:
1) actual downstreams are used to dealing with changes in Debian all
the time.
2) users with CI jobs are, too. Depending on what their exact setup
is they'll already have noticed, or they pay the cost when changing
the distribution name in their config.
One piece of background that is heavily influencing my thinking is:
It is easy, when working within Debian, to radically overestimate the
likely quality of non-Debian packages. I have done some work with
packages in the rpi ecosystem (I'm thinking of packages *not* part of Raspbian, which has source from Debian), and also other upstreams.
My experience is that packages written by people not steeped in Debian culture, and that aren't subjected to Debian's various QA processes,
often only resemble normal Debian practices in the vaguest sense.
This is to be expected. Debian packaging is complicated, and can be
weird. People working outside Debian are just tryilng to get shit
done and don't have time to learn how to do it properly. They hack
something together until it works.
Some downstreams and users will have their own build processes.
CI jobs, rebuild robots, and the like, which build packages
automatically. In such a scenario, an option or env var to restore compatibility with existing packages, without having to add a step to
the build to mess with the source package, will be very helpful.
Package: dpkg
Version: 1.22.13
Control: block 1092190 by -1
Hi.
(Firstly, I should say thank you very much to Niels Thykier for your
work on Rules-Requires-Root. Tidying this up is a big job which
you've been doing very well. Speaking personally I have really
appreciated the interactions I've had with you over my packages.
Now, though, I'm afraid I come with the change request:)
It seems likely to me that there will continue to be packages in the
wild which this behavioural change will break - particularly including packages not part of Debian, packages from old Debian release, and
perhaps whole derivative distros.
In order to allow us to build old packages with new tooling, or
out-of-distro packages, or whatever, I think dpkg-buildpackage should
have a way to request the previous (bookworm-and-earlier) behaviour.
I looked through the manpage and found --rules-requires-root, but that
says that it disregards the Rules-Requires-Root field entirely, which
isn't right. (And might also break things...)
Could we please have a command line option to just change the default,
so that trixie's dpkg-buildpackage can be used in circumstances where bookworm's would have worked ?
What is the downside?
It is cost to both dpkg _and_ to the users you are seeking to
protect, and to everyone else maintaining tools or just reading the
dpkg documentation in the future.
Why is anyone even bothering to argue against my suggestion?
I see it like this: adding the option doesn't make anything better.
Users need to do work anyway, so we have not saved them anything.
If the option goes away in the future, they're paying the cost
twice!
We could have added this option with a fraction of the effort
spent on trying to argue that it's not necessary.
As always it is a tradeoff of supporting the past vs. being able to
keep maintaining the software in question in the future.
I hope you understand my explanation above. My personal, global
motivation is to avoid adding noise and complexity into a world that
is already complicated enough.
Bill Allombert writes ("Re: Bug#1092193: option (or env) to request <=bookworm r-r-r behaviour"):
2/ I consider --rules-requires-root to be a sufficient work-around _provided_ it is clearly documented
I agree that it should be documented.
I don't agree that it is a completely sufficient workaround. It can
be used in the case of a single package. But a downstream might have
have multiple packges. Perhaps very many packages.
If some of those packages are from Debian bookwork or earlier, then
indeed some of them will not build unless --rules-requires-root is
passed. But, always passing --rules-requires-root will probably break *other* packages that were adapted to rootless builds a long time ago.
I haven't done any kind of survey of the prevalence of this problem.
I don't think that'd be proportionate. An option that precixely
changes *just the default* would suffice.
2/ I consider --rules-requires-root to be a sufficient work-around
_provided_ it is clearly documented
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 546 |
Nodes: | 16 (0 / 16) |
Uptime: | 167:00:14 |
Calls: | 10,385 |
Calls today: | 2 |
Files: | 14,057 |
Messages: | 6,416,529 |