Bug#914897: #914897: debootstrap, buster: Please disabled merged /usr by default

2018-12-04 Thread Ansgar Burchardt
Hi,

Hideki Yamane writes:
> On Sun, 2 Dec 2018 15:15:21 +
> Simon McVittie  wrote:
>> >   - What is the problem? (broken build for which packages? Just R?)
>> 
>> The problem we're aware of is:
>> 
>> Some packages auto-detect the absolute path to an executable (for example
>> bash or perl) and hard-code it into their output (for example the #! line
>> of the bash scripts in quilt).
>
>  Can we check and track this behavior in our packages?

The Reproducible Builds project was so kind to help and now runs one
build in a non-merged-/usr and a second build in a merged-/usr
environment.  Packages that hardcode the path to utilities, but would
pick up the wrong one in a merged-/usr environment will result in a
difference between the two builds and can thus be found.

See [1] for an overview of issues found this way; as the entire archive
was already rebuilt in this setup, there shouldn't be many more issues
of this type that we don't know about[2].

Not all of these differences even cause issues as in a few packages the
utility with the hardcoded path is not even used at all.

Bug reports were already submitted for over half the packages, often
including a simple patch (usually something like adding BASH=/bin/bash
to dh_auto_configure).

So we look to be on a good track to address the remaining issues.

I don't think that the debootstrap default has to be reverted
temporarily again to deal with this: there are only very few packages
causing problems and these should have a patch soon.

In addition one has to actually built one of the very few packages in a
merged-/usr environment and then install them in a non-merged-/usr
environment to actually trigger the problem and debootstrap already
defaults to non-merged-usr for buildd chroots for now.

Ansgar

  [1] 
https://tests.reproducible-builds.org/debian/issues/unstable/paths_vary_due_to_usrmerge_issue.html
  [2] https://bugs.debian.org/914897#81



Bug#914897: #914897: debootstrap, buster: Please disabled merged /usr by default

2018-12-04 Thread Hideki Yamane
Hi,

 Thanks Simon, it's perhaps clear for me now.

On Sun, 2 Dec 2018 15:15:21 +
Simon McVittie  wrote:
> >   - What is the problem? (broken build for which packages? Just R?)
> 
> The problem we're aware of is:
> 
> Some packages auto-detect the absolute path to an executable (for example
> bash or perl) and hard-code it into their output (for example the #! line
> of the bash scripts in quilt).

 Can we check and track this behavior in our packages?

 Once disable merged-usr is good to prevent confusion but we detect such
 as a bug for manage non-merged-usr and merged-usr Debian system in the end,
 right? (or do you want to stay change in debootstrap 1.0.111 forever?)


-- 
Hideki Yamane 



Bug#914897: debating the wrong thing

2018-12-04 Thread Ansgar Burchardt
Adam Borowski writes:
> On Tue, Dec 04, 2018 at 06:48:45PM +0100, Ansgar Burchardt wrote:
>> In very rare cases (an estimated 0.3% of the archive or so).  I'm fairly
>> confident that for more than 0.3% of the archive something can go wrong
>> when building in non-clean environments.
>
> Your figure of ~80 packages counts only packages which went through a
> reproducible-builds rebuild.

So only all?

> We later learned only a part of the archive got rebuilt since the bad
> debootstrap backport.

Yes, some packages were not yet rebuilt in testing, but having them
rebuilt in unstable is enough.

>> We had the discussion (usrmerge as default) already quite some time
>> ago.  Why start again at zero?  As a random reference, the D-I Stretch
>> RC 1 release announcement explicitly stated:
>> 
>> +---
>> |  * The switch to merged-/usr as the default setting for debootstrap
>> |was reverted since it uncovered a number of important issues which
>> |might not be all fixed in time for stretch. This setting is
>> |expected to come back as the default at the beginning of the next
>> |release cycle.
>> +---
>> 
>> And just that happened (except a bit later).
>
> Except that the change went live only on 2018-11-10, then waited until
> buildds recreated their chroots, then until dinstall and mirror push...

No, anyone using testing/unstable to setup a new build chroot since June
should have gotten a merged-/usr chroot.  That no issues were found
earlier is probably related to there being not so many issues.

  (Fun fact: there are ~3k debootstrap installations on
  testing/unstable, compared to 6.2k on stable and 2k on oldstable
  according to popcon.)

Anyway, buildds are not using merged-/usr, so there is no problem with
them.

> and the sky started falling immediately after that.

Hmm, two packages or so were reported to be broken.  That is a quite
high standard for "sky falling".

What would you call an upload that breaks more packages?  The monthly
apocalypse which we deal with just fine?

>> You could have easily asked the tech-ctte back then (or even before)
>> instead of waiting until shortly before the Buster freeze and after
>> people invested more work.
>
> It was only shortly before the Buster freeze that we saw this change in
> action!  Had the switch get flipped sooner we'd have a chance to see the
> results.  By now, it's much too late to fix things before the freeze
> (and I don't see how they could be fixed even had we two years of
> time).

You keep saying that it is too late to fix anything or that it is too
much work, but why do you think so?  I've looked at patching packages
and how many packages need changes and it does not seem much work;
indeed after a week about half of the packages already have a (usually
trivial) patch.

If you think it is too much work or too many things break, please at
least give an estimate of what you are talking about...  I feel like
only one side is doing any research here.

> By now, all we can do is damage control.  Which can be a hasty force-merge
> or a hasty revert.  Unless you can somehow make dpkg-dev omniscient.

If we keep merged-/usr as default then we can /recommend/ people to
install usrmerge to switch to merged-/usr; reducing the difference
between newly-installed and existing setups is a good idea IMHO.  I
think I filed a report for this two years ago.

Maybe we should also mention somewhere that it might be useful to not
switch build environments (yet).

Ansgar



Bug#914897: debating the wrong thing

2018-12-04 Thread Holger Levsen
On Tue, Dec 04, 2018 at 07:21:11PM +0100, Adam Borowski wrote:
> Your figure of ~80 packages counts only packages which went through a
> reproducible-builds rebuild.  We later learned only a part of the archive
> got rebuilt since the bad debootstrap backport.

wrong, sigh.


-- 
cheers,
Holger

---
   holger@(debian|reproducible-builds|layer-acht).org
   PGP fingerprint: B8BF 5413 7B09 D35C F026 FE9D 091A B856 069A AA1C


signature.asc
Description: PGP signature


Bug#914897: debating the wrong thing

2018-12-04 Thread Adam Borowski
On Tue, Dec 04, 2018 at 06:48:45PM +0100, Ansgar Burchardt wrote:
> Ian Jackson writes:
> > Ansgar Burchardt writes ("Bug#914897: debating the wrong thing"):
> >> Switching to (1) or (3a-with-no-support-in-buster) will mean merged-/usr
> >> systems would no longer be supported.  In this case someone would have
> >> to write a unusrmerge program to convert systems with merged-/usr to
> >> systems with unmerged-/usr.
> >
> > Currently merged-usr is broken because it can build packages which do
> > not work on non-merged-usr systems.
> 
> In very rare cases (an estimated 0.3% of the archive or so).  I'm fairly
> confident that for more than 0.3% of the archive something can go wrong
> when building in non-clean environments.

Your figure of ~80 packages counts only packages which went through a
reproducible-builds rebuild.  We later learned only a part of the archive
got rebuilt since the bad debootstrap backport.

> What is technically and socially wrong is reverting a change after a
> small issue was found which is already in the process of getting fixed
> for most packages.

Making packages with non-Debian origin randomly break is not a "small
issue".  Remember, we can fix only packages we make ourselves -- not any of
private/PPA/company-wide packages so many of our users make.

> > When we have stopped generating more lossage, we can start to think
> > about whether we want to transition to usrmerge as default, whether to
> > make it mandatory, and if so how the transition should be handled, and
> > on what timescale.
> 
> We had the discussion (usrmerge as default) already quite some time
> ago.  Why start again at zero?  As a random reference, the D-I Stretch
> RC 1 release announcement explicitly stated:
> 
> +---
> |  * The switch to merged-/usr as the default setting for debootstrap
> |was reverted since it uncovered a number of important issues which
> |might not be all fixed in time for stretch. This setting is
> |expected to come back as the default at the beginning of the next
> |release cycle.
> +---
> 
> And just that happened (except a bit later).

Except that the change went live only on 2018-11-10, then waited until
buildds recreated their chroots, then until dinstall and mirror push...
and the sky started falling immediately after that.

We train DDs to not upload packages built in an unclean environment -- I
made ~1000 uploads (mostly sponsored) which did not include a _single_
unclean build.  I expect most DDs to be alike, and most of us also do
source-only except to NEW.

We tend to build outside a chroot only during development.  Of course we do
test those packages but almost always on the same machine we're sitting at. 
Which happens to match the usrmerge status of the package being tested...

> You could have easily asked the tech-ctte back then (or even before)
> instead of waiting until shortly before the Buster freeze and after
> people invested more work.

It was only shortly before the Buster freeze that we saw this change in
action!  Had the switch get flipped sooner we'd have a chance to see the
results.  By now, it's much too late to fix things before the freeze
(and I don't see how they could be fixed even had we two years of time).

> There is no such crisis.  There was also enough time to discuss this in
> the last years or even since June (when it was enabled by default
> again)...

Nope, it got enabled very recently.  This is a case where religiously
building stuff in a clean environment bit us -- because _that_ environment
wasn't changed.

By now, all we can do is damage control.  Which can be a hasty force-merge
or a hasty revert.  Unless you can somehow make dpkg-dev omniscient.


Meow!
-- 
⢀⣴⠾⠻⢶⣦⠀ 
⣾⠁⢠⠒⠀⣿⡁ Ivan was a worldly man: born in St. Petersburg, raised in
⢿⡄⠘⠷⠚⠋⠀ Petrograd, lived most of his life in Leningrad, then returned
⠈⠳⣄ to the city of his birth to die.



Bug#914897: debating the wrong thing

2018-12-04 Thread Ansgar Burchardt
Ian Jackson writes:
> Ansgar Burchardt writes ("Bug#914897: debating the wrong thing"):
>> Switching to (1) or (3a-with-no-support-in-buster) will mean merged-/usr
>> systems would no longer be supported.  In this case someone would have
>> to write a unusrmerge program to convert systems with merged-/usr to
>> systems with unmerged-/usr.
>
> Currently merged-usr is broken because it can build packages which do
> not work on non-merged-usr systems.

In very rare cases (an estimated 0.3% of the archive or so).  I'm fairly
confident that for more than 0.3% of the archive something can go wrong
when building in non-clean environments.

> It would be quite wrong (both technically and socially) to react to
> this lack of foresight,

The reported problems are not really unexpected...

> lack of consultation,

It was discussed on -devel@ several times.  I think LWN also reported
about merged-/usr developments in Debian more than once, it wasn't a
secret cabal development.

So where is the lack of consultation?

> and lack of testing, by pressing forward.

It has been tested for quite a while.

A helpful new test was recently added by the Reproducible Builds project
which allowed to identify most problematic packages.

What is technically and socially wrong is reverting a change after a
small issue was found which is already in the process of getting fixed
for most packages.

> When we have stopped generating more lossage, we can start to think
> about whether we want to transition to usrmerge as default, whether to
> make it mandatory, and if so how the transition should be handled, and
> on what timescale.

We had the discussion (usrmerge as default) already quite some time
ago.  Why start again at zero?  As a random reference, the D-I Stretch
RC 1 release announcement explicitly stated:

+---
|  * The switch to merged-/usr as the default setting for debootstrap
|was reverted since it uncovered a number of important issues which
|might not be all fixed in time for stretch. This setting is
|expected to come back as the default at the beginning of the next
|release cycle.
+---

And just that happened (except a bit later).

You could have easily asked the tech-ctte back then (or even before)
instead of waiting until shortly before the Buster freeze and after
people invested more work.

Making it mandatory or not is an unrelated decision.  That can easily
just come later.

> We need the space to discuss those options properly without being
> distracted by what is IMO currently a crisis in stretch-backports and
> buster.

There is no such crisis.  There was also enough time to discuss this in
the last years or even since June (when it was enabled by default
again)...

Ansgar



Bug#914897: debating the wrong thing

2018-12-04 Thread Ian Jackson
Ansgar Burchardt writes ("Bug#914897: debating the wrong thing"):
> Switching to (1) or (3a-with-no-support-in-buster) will mean merged-/usr
> systems would no longer be supported.  In this case someone would have
> to write a unusrmerge program to convert systems with merged-/usr to
> systems with unmerged-/usr.

Currently merged-usr is broken because it can build packages which do
not work on non-merged-usr systems.  It would be quite wrong (both
technically and socially) to react to this lack of foresight, lack of
consultation, and lack of testing, by pressing forward.

What I am suggesting in this bug report is that we revert to the
status quo before the default was changed to usrmerge, that is:

[Adam:]
>> 2. supporting both merged-usr and unmerged-usr

But actually of course "supporting" it in the way that it is currently
"supported" (according to usrmerge proponents) in stretch, sid, and
buster: if you enable it you may build packages which are not
generally useable (and perhaps you may experience other bugs).

This question is urgent for buster because the longer the current
situation continues the more systems there are that build broken
packages.

It is also urgent for stretch-backports.  The backports maintainers
have said that they want to keep stretch-backports in line with
buster.  Regardless of the wisdom of that policy, the current
situation in stretch-backports seems very bad to me.

The easiest way to fix stretch-backports (without also generating a
need to persuade the backports maintainers to waive their usual
policies) is to revert buster.


When we have stopped generating more lossage, we can start to think
about whether we want to transition to usrmerge as default, whether to
make it mandatory, and if so how the transition should be handled, and
on what timescale.

We have at least two sketches of transitions plans.  That longer-term
conversation is a much more complicated one with many more options and
many more factors.

We need the space to discuss those options properly without being
distracted by what is IMO currently a crisis in stretch-backports and
buster.


Ian.



Bug#914897: debating the wrong thing

2018-12-04 Thread Ansgar Burchardt
"Alexander E. Patrakov" writes:
> Ansgar Burchardt wrote:
>> Making the feature default was discussed years ago which you are surely
>> aware of. It's not mandatory.
>
> Unfortunately I have to disagree here. Merged /usr is already,
> de-facto, mandatory for everyone who installs Debian Testing using the
> official netinst CD.

Yes, but the "make merged-/usr mandatory" refers only to require to
merge /usr on upgrades; nobody has asked for there to be an installer
option (and I don't think it would be useful).

Ansgar