Re: Fedora 32 System-Wide Change proposal: Modules in Non-Modular Buildroot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 13, 2019 at 1:24 PM Miro Hrončok <mhroncok@xxxxxxxxxx> wrote:
>
> On 13. 11. 19 18:31, Stephen Gallagher wrote:
> > Sorry for the long overdue reply here. Answers to your questions are inline.
>
> Thank you.
>
> > On Wed, Oct 9, 2019 at 6:46 PM Miro Hrončok <mhroncok@xxxxxxxxxx> wrote:
> > ...
> >> What I miss in the description is:
> >>
> >> 1. How does this thing actually work? is there an additional repository composed
> >> from the default streams available in Koji only?
> >
> > An additional repository is composed from the default streams
> > (including the module metadata) and is merged with the standard
> > buildroot using Koji's new "bare" mode. This buildroot will be
> > available for non-Koji purposes (such as mock).
>
> Will this buildroot repository be mirrored or will it be more like the current
> "local" repository defined in mock configs?
>
> For reference, this is currently in the rawhide mock config:
>
> [local]
> name=local
> baseurl=https://kojipkgs.fedoraproject.org/repos/rawhide/latest/$basearch/
> cost=2000
> enabled=0
> skip_if_unavailable=False
>
> My concern is that using the "local" repository for mock builds is quite slow
> and IIRC puts Koji under unnecessary load.
>

The plan for the moment is to have it be the "local" repository. Given
that it will at least start out fairly small (and not need deltarpms),
we were going to see how well it held up. The longer-term plan will
probably be to mirror it.

> >> 2. How are conflicts between packages from the default streams and ursine
> >> package be handled?
> >
> > As long as the module metadata is present, an artifact with a given
> > name from an enabled or default module will effectively "hide" the
> > non-modular version.
>
> I have a hard time to understand this. Could you please dive into the details?
>
> "As long"? What does that mean? When they are not present and when they are present?
>

Sorry, that was an English colloquialism. Basically I meant "unless we
screw up and don't sync the metadata to the repository". So as long as
a module stream providing an artifact with a given name is enabled or
default, non-modular RPMs of the same name will be invisible to the
solver.

> "an enabled or default module"? Who enables a module in the buildroot? Is it
> releng? The packager? Somebody else? Is it an explicit or implicit action?
>

"enabled" could happen as part of a mock config. That would be an
explicit action on the part of the person creating the mock config.
For the purposes of the discussion of Ursa Prime, you can ignore
"enabled". I was trying to be thorough and ended up being confusing
instead.

> Suppose we put maven:3.5 into the buildroot (I know we don't do that, but that
> was the idea origianlly). How do I as a a maintainer of an ursine maven-foo
> package BuildRequire the ursine maven package?
>

You don't.

Making a stream into the default stream is effectively making it
equivalent to a non-modular package for most purposes. It already
behaves this way for client installations; the content from a default
stream is the only version DNF "sees" if it happens to override a
non-modular package. On the client system, you'd need to `dnf module
disable maven` to be able to pull down the non-modular package.

Ursa Prime is basically a Change to have the Koji build environment
behave the same way as the local environment would.

This is why we've been discussing the need for the artifacts of
default streams to behave *exactly* as if they were non-modular once
delivered. Because they effectively are. They were built differently
(though still in our infrastructure), but once built the requirement
is that they must then behave like the non-modular distro would have.

(Side-note: We retired the term "ursine" and replaced it with
"non-modular" because it was confusing for non-native English
speakers.)


> > Unless you mean "conflicts" in some other sense, in which case I think
> > RPM-level conflicts should handle it.
>
> You understood "conflicts" exactly as I've meant it here, sorry for not being
> more explicit.
>

No problem, just wanted to make sure I was answering the correct question.

> >> 3. What is the local experience if the packager is using mock. What if they are
> >> using rpmbuild directly?
> >
> > For mock, if it's pointed at the Koji-hosted buildroot repository, it
> > will work exactly as Koji does (with no local changes required).
>
> Makes sense, however, the information I miss is: Will it be pointed to the
> Koji-hosted buildroot repository by default or not? My point was that this
> should be part of the proposal before it was approved.
>

Yes, and you're right I will need to update the Change.

> > If
> > it's pointed at the public mirrors, it will need to have the Modular
> > repos enabled and it will have whatever is in the standard buildroot
> > plus default streams available there.
>
> Will it be pointed to the public mirrors with the Modular repos enabled?
> It previously was like that for a while and it was reverted as a wrong behavior.
>

It wasn't reverted as "wrong behavior", it was reverted because libdnf
at the time had a serious bug that mock was hitting. We never switched
it back on, but it should work properly now.

What we probably want to do is point it at the public mirrors, but
have mirrormanager just point at Koji for now while we're proving it
out.

> > One purpose of this Change is to
> > reconcile those two cases so they are the same.
>
> If the cases are the same, isn't it actually what was originally proposed as
> Ursa Major? I am seriously confused here, because I understood this change as it
> is explicitly doing a different thing, a nonmodular repository composed of the
> modular content. So that our downstreams can consume it "traditionally" without
> adapting their tooling.
>

What you're describing is Ursa Major. It was a plan to generate a
non-modular repository with content from modules. FESCo rejected this
outright because it required manual configuration to keep it working.

We replaced it with Ursa Prime, which was built around the idea that
we could track default streams and that would ensure things stayed in
sync.

In the repo created by Ursa Prime, it *does* carry modular metadata
and relies on libdnf inside the mock environment to retrieve the
correct packages.

> What you are describing here sounds like we are doing Ursa Major, renamed to
> Ursa Prime, because Ursa Prime was a no-go. Because I don't assume ill intent, I
> am absolutely sure that there is something I'm not getting here, but it it very
> hard to figure out what.
>

> Could you please, in great detail describe the differences between the two and
> how this approved change addresses all the reasons that the previous attempt was
> forbidden?
>

Well, the irony here is that throughout this conversation, we've
basically settled on policy that would have made Ursa Major work just
fine in Fedora...

The big problem with Ursa Major is that we knew that it had a clear
design flaw: it could not work in cases where two default streams
depended on differing streams of another module. Ursa Major worked
entirely by Koji tagging; it tagged certain builds into the buildroot
directly. If you have a situation where two different module streams
are both default and both carry a package with the same name, both
would be tagged in and libdnf would end up picking whichever had the
higher NVR (because it didn't have any of the module metadata to
decide which one it actually needed).

The secondary problem was that (partly because of the first problem),
the tagging rules had to be maintained manually because we had no
meaningful way to determine the presence of conflicts. We couldn't
just script it to pull in all the defaults and call it a day, because
of the known conflict problem.

FESCo rejected Ursa Prime largely because infra asserted that
maintaining that tagging list would be prohibitively difficult as
Modularity became more ubiquitous. However, now that we've basically
decided on "default streams may only depend on default streams", the
original Ursa Major would have worked fine and been scriptable to just
use the default streams.

Ursa Prime is a completely different approach. Instead of trying to
tag packages so that Koji's internal buildroot-generator includes
their contents, we instead do a createrepo for the artifacts of the
module default streams and then configure Koji to include that
repository as an "external repo". This modular-buildroot external repo
includes all of the modular metadata (unlike the internal Koji
buildroot approach of Ursa Major) and thus mock can look up and
install whatever packages are in the default streams or non-modular
repository (so long as they aren't hidden by the default module
version). That's what I meant above about how Ursa Prime makes it
behave more like mock on the local system would work if you included
the module repos and changed nothing else. They'll both use libdnf's
logic to pull the appropriate packages.

> > Right now, the Koji
> > buildroot will be slightly different from the one mock would see
> > because FESCo asked us to only allow two modules in the Koji buildroot
> > for testing.
>
> Why would mock "see" different things based on restrictions FESCo asked to do?
> My primary concern is that by default, mock sees what Koji sees.
>
> By this change and by what was approved by FESCo (to clarify: I voted against
> this), we are adding new things to what Koji sees. So I am really not sure what
> actually happens to what mock sees:
>
> 1. Do we add only the 2 FESCo approved modules to what mock sees?
> 2. Do we add all default modular streams to what mock sees?
> 3. Do we keep mock to only see ursine content?
>
> My opinion:
>
> 1. is ideal, but was not approved nor documented in the change proposal
> 2. is not ideal and was not approved nor documented in the change proposal
> 3. is not ideal, but is status quo, hence requires no approval/change
>
> > Prior to this Change, the Koji buildroot would have only
> > the non-modular content.
>
> Correct.
>
> >> 4. How are we handling default streams with dependencies on non-default streams
> >> of other modules?
> >
> > Throughout these discussions, it has been made clear that the best
> > option for now will be to disallow default streams from depending on
> > non-default streams in Fedora. This *can* (but may not) change in the
> > future once we have worked out the explicit-vs-implicit enablement and
> > upgrade questions. But for now, it seems reasonable to put that policy
> > constraint on it.
>
> I agree. Let's make that happen **before** we actually start doing Ursa
> Prime/Major/...?
>
> --
> Miro Hrončok
> --
> Phone: +420777974800
> IRC: mhroncok
> _______________________________________________
> devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
> Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux