Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 720224 - default/linux/**/prefix profiles are using inconsistent $ARCH value
Summary: default/linux/**/prefix profiles are using inconsistent $ARCH value
Status: CONFIRMED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Profiles (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo Prefix
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-05-01 06:01 UTC by Michał Górny
Modified: 2021-02-01 02:28 UTC (History)
5 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2020-05-01 06:01:39 UTC
After dumping the effective values:

default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+/make.defaults:ARCH="amd64"
default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+/make.defaults:ARCH="amd64"
default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+/make.defaults:ARCH="amd64"
default/linux/arm/17.0/armv7a/prefix/kernel-3.2+/make.defaults:ARCH="arm"
default/linux/arm64/17.0/prefix/kernel-3.2+/make.defaults:ARCH="arm64"
default/linux/x86/17.0/prefix/kernel-2.6.16+/make.defaults:ARCH="x86"
default/linux/x86/17.0/prefix/kernel-2.6.32+/make.defaults:ARCH="x86"
default/linux/x86/17.0/prefix/kernel-3.2+/make.defaults:ARCH="x86"


However, profiles.desc state:

amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+		dev
amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+	exp
amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+	exp
x86-linux		default/linux/x86/17.0/prefix/kernel-3.2+	exp
x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.32+	exp
x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.16+	exp
arm-linux		default/linux/arm/17.0/armv7a/prefix/kernel-3.2+		exp
arm64-linux		default/linux/arm64/17.0/prefix/kernel-3.2+	exp



Not sure if this is technically forbidden but it is confusing as hell to developers (why does pkgcheck complain about ~amd64 keyword on a prefix profile?!).
Comment 1 Fabian Groffen gentoo-dev 2020-05-01 06:30:15 UTC
Are you resolving parents in these paths or something?

I don't have a
 default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+/make.defaults

Anyway, this was done because of compatibility.  Things like `use amd64`, and also the ACCEPT_KEYWORDS is set based on this (~${ARCH}).  The former was used frequently a couple of years ago, when support for amd64 was introduced, and we didn't want to turn all of those into or-ed conditions.
Comment 2 Benda Xu gentoo-dev 2020-05-01 06:35:13 UTC
(In reply to Michał Górny from comment #0)
> After dumping the effective values:
> 
> default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+/make.defaults:
> ARCH="amd64"
> default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+/make.defaults:
> ARCH="amd64"
> default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+/make.defaults:
> ARCH="amd64"
> default/linux/arm/17.0/armv7a/prefix/kernel-3.2+/make.defaults:ARCH="arm"
> default/linux/arm64/17.0/prefix/kernel-3.2+/make.defaults:ARCH="arm64"
> default/linux/x86/17.0/prefix/kernel-2.6.16+/make.defaults:ARCH="x86"
> default/linux/x86/17.0/prefix/kernel-2.6.32+/make.defaults:ARCH="x86"
> default/linux/x86/17.0/prefix/kernel-3.2+/make.defaults:ARCH="x86"
> 
> 
> However, profiles.desc state:
> 
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+		dev
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+	exp
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-3.2+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.32+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.16+	exp
> arm-linux		default/linux/arm/17.0/armv7a/prefix/kernel-3.2+		exp
> arm64-linux		default/linux/arm64/17.0/prefix/kernel-3.2+	exp
> 
> 
> 
> Not sure if this is technically forbidden but it is confusing as hell to
> developers (why does pkgcheck complain about ~amd64 keyword on a prefix
> profile?!).

This has been a pain for us.  That's your suggestion?

We want to distinguish Prefix and vanilla as the profiles cannot be interchanged, but at the same time the keywords should be kept the same.
Comment 3 Benda Xu gentoo-dev 2020-05-01 06:35:32 UTC
(In reply to Michał Górny from comment #0)
> After dumping the effective values:
> 
> default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+/make.defaults:
> ARCH="amd64"
> default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+/make.defaults:
> ARCH="amd64"
> default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+/make.defaults:
> ARCH="amd64"
> default/linux/arm/17.0/armv7a/prefix/kernel-3.2+/make.defaults:ARCH="arm"
> default/linux/arm64/17.0/prefix/kernel-3.2+/make.defaults:ARCH="arm64"
> default/linux/x86/17.0/prefix/kernel-2.6.16+/make.defaults:ARCH="x86"
> default/linux/x86/17.0/prefix/kernel-2.6.32+/make.defaults:ARCH="x86"
> default/linux/x86/17.0/prefix/kernel-3.2+/make.defaults:ARCH="x86"
> 
> 
> However, profiles.desc state:
> 
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+		dev
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+	exp
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-3.2+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.32+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.16+	exp
> arm-linux		default/linux/arm/17.0/armv7a/prefix/kernel-3.2+		exp
> arm64-linux		default/linux/arm64/17.0/prefix/kernel-3.2+	exp
> 
> 
> 
> Not sure if this is technically forbidden but it is confusing as hell to
> developers (why does pkgcheck complain about ~amd64 keyword on a prefix
> profile?!).

This has been a pain for us.  What's your suggestion?

We want to distinguish Prefix and vanilla as the profiles cannot be interchanged, but at the same time the keywords should be kept the same.
Comment 4 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2020-05-01 19:39:55 UTC
I am somewhat aware that the historical distinction has been painful.  It has also happened to FreeBSD keywords back in the day (e.g. when I add to duplicate all amd64 conditionals to amd64_fbsd).

My primary question is: does that mean that we no longer do keywording for amd64-linux prefix?  If so, I think it would be nice to make it more explicit somewhere.

I don't know whether this is really wrong or not, and I don't have any better ideas.  My main concern is that some tools may be making assumptions based on this, and it could trigger undefined behavior (like, when some tools look at $ARCH and some look at profiles.desc arch, and you get surprising results when they are mismatched).
Comment 5 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2020-05-01 19:48:40 UTC
Thinking about it more, profiles.desc probably doesn't affect normal Portage operation.  After all, eselect-profile makes make.profile symlink and Portage uses just that.  So this probably affects only repoman/pkgcheck.

@dev-portage, @radhermit, do you happen to know offhand if and where Portage/repoman and pkgcore/pkgcheck use arch value from profiles.desc?
Comment 6 Brian Dolbec (RETIRED) gentoo-dev 2020-05-01 20:05:14 UTC
from a quick grep, looks like :  portage/repoman/lib/repoman/profile.py
Comment 7 Zac Medico gentoo-dev 2020-05-01 20:27:42 UTC
In repoman, this _gen_arches function is used to generate relevant arches for an ebuild, which are later intersected with the profiles.desc arch values:

https://gitweb.gentoo.org/proj/portage.git/tree/repoman/lib/repoman/modules/scan/depend/_gen_arches.py?h=repoman-2.3.21
Comment 8 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2020-05-02 06:13:13 UTC
(In reply to Zac Medico from comment #7)
> In repoman, this _gen_arches function is used to generate relevant arches
> for an ebuild, which are later intersected with the profiles.desc arch
> values:
> 
> https://gitweb.gentoo.org/proj/portage.git/tree/repoman/lib/repoman/modules/
> scan/depend/_gen_arches.py?h=repoman-2.3.21

Could you explain what implications does this have?  Are Prefix profiles checked correctly when ebuilds have ~amd64 keyword?  Or when they have ~amd64-linux keyword?
Comment 9 Zac Medico gentoo-dev 2020-05-02 19:48:32 UTC
(In reply to Michał Górny from comment #8)
> (In reply to Zac Medico from comment #7)
> > In repoman, this _gen_arches function is used to generate relevant arches
> > for an ebuild, which are later intersected with the profiles.desc arch
> > values:
> > 
> > https://gitweb.gentoo.org/proj/portage.git/tree/repoman/lib/repoman/modules/
> > scan/depend/_gen_arches.py?h=repoman-2.3.21
> 
> Could you explain what implications does this have?  Are Prefix profiles
> checked correctly when ebuilds have ~amd64 keyword?  Or when they have
> ~amd64-linux keyword?

The ARCH value from the profile is never considered.

For an ebuild with ~amd64 keyword, it generates a hypothetical ACCEPT_KEYWORDS="amd64 ~amd64" setting that it uses to resolve the ebuild's dependencies for all profiles that list amd64 as their arch in profiles.desc.

The behavior for an ebuild with ~amd64-linux keyword is analogous to the behavior for ~amd64 describe above. It uses ACCEPT_KEYWORDS="amd64-linux ~amd64-linux" for all profiles that list amd64-linux as their arch in profiles.desc.
Comment 10 Zac Medico gentoo-dev 2020-05-02 19:58:03 UTC
(In reply to Zac Medico from comment #9)
> The ARCH value from the profile is never considered.

Actually, the arch value is considered in the sense that it's added to use.force here:

https://gitweb.gentoo.org/proj/portage.git/tree/lib/portage/dep/dep_check.py?h=portage-2.3.99#n775
Comment 11 Benda Xu gentoo-dev 2020-05-12 09:14:20 UTC
(In reply to Michał Górny from comment #0)
> After dumping the effective values:
> 
> default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+/make.defaults:
> ARCH="amd64"
> default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+/make.defaults:
> ARCH="amd64"
> default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+/make.defaults:
> ARCH="amd64"
> default/linux/arm/17.0/armv7a/prefix/kernel-3.2+/make.defaults:ARCH="arm"
> default/linux/arm64/17.0/prefix/kernel-3.2+/make.defaults:ARCH="arm64"
> default/linux/x86/17.0/prefix/kernel-2.6.16+/make.defaults:ARCH="x86"
> default/linux/x86/17.0/prefix/kernel-2.6.32+/make.defaults:ARCH="x86"
> default/linux/x86/17.0/prefix/kernel-3.2+/make.defaults:ARCH="x86"
> 
> 
> However, profiles.desc state:
> 
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-3.2+		dev
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.32+	exp
> amd64-linux		default/linux/amd64/17.0/no-multilib/prefix/kernel-2.6.16+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-3.2+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.32+	exp
> x86-linux		default/linux/x86/17.0/prefix/kernel-2.6.16+	exp
> arm-linux		default/linux/arm/17.0/armv7a/prefix/kernel-3.2+		exp
> arm64-linux		default/linux/arm64/17.0/prefix/kernel-3.2+	exp
> 
> 
> 
> Not sure if this is technically forbidden but it is confusing as hell to
> developers (why does pkgcheck complain about ~amd64 keyword on a prefix
> profile?!).

After some serious thoughts, I think we can tag these profiles as amd64, x86, arm and arm64.  All the problems solved.

> We want to distinguish Prefix and vanilla as the profiles cannot be interchanged, but at the same time the keywords should be kept the same.

Previous I did not think it a good idea.  But hey, multilib and non-multilib profiles are not interchangeable, nor do hardened and vanilla.

What do you think?
Comment 12 Kent Fredric (IRC: kent\n) (RETIRED) gentoo-dev 2020-10-18 12:19:29 UTC
(In reply to Benda Xu from comment #11)
> 
> Previous I did not think it a good idea.  But hey, multilib and non-multilib
> profiles are not interchangeable, nor do hardened and vanilla.
> 
> What do you think?

As long as its clear from the profile path to both users and tools that the profile is intended for prefix use, then it should be fine.

Especially given they're tagged "(exp)" so users will get a stern warning when they attempt to use it, or may not even see it listed.

What's holding this back from happening?
Comment 13 Fabian Groffen gentoo-dev 2020-10-18 12:25:30 UTC
If I interpret this correctly, it implicates that we drop all *-linux keywords.

I have nothing really against this, but it will implicate a lot of packages suddenly being "available", yet not working at all.  It seems impractical to mask all packages currently not keyworded, and add masks for any new package entering the tree.
Comment 14 Benda Xu gentoo-dev 2020-11-09 16:06:44 UTC
(In reply to Fabian Groffen from comment #13)
> If I interpret this correctly, it implicates that we drop all *-linux
> keywords.
> 
> I have nothing really against this, but it will implicate a lot of packages
> suddenly being "available", yet not working at all.  It seems impractical to
> mask all packages currently not keyworded, and add masks for any new package
> entering the tree.

We are already doing that by landing amd64 prefix to unstable profiles from exp.  So far so good.  In the age of EAPI 7, most of the packages work out of the box for Prefix.
Comment 15 Kent Fredric (IRC: kent\n) (RETIRED) gentoo-dev 2020-11-09 19:55:35 UTC
(In reply to Benda Xu from comment #14)
> (In reply to Fabian Groffen from comment #13)
> > If I interpret this correctly, it implicates that we drop all *-linux
> > keywords.
> > 
> > I have nothing really against this, but it will implicate a lot of packages
> > suddenly being "available", yet not working at all.  It seems impractical to
> > mask all packages currently not keyworded, and add masks for any new package
> > entering the tree.
> 
> We are already doing that by landing amd64 prefix to unstable profiles from
> exp.  So far so good.  In the age of EAPI 7, most of the packages work out
> of the box for Prefix.

I guess the main downside of "sharing a keyword with prefix", is well, on non-prefixed systems, the keyword being set indicates "somebody tested this combo".

Exposing this to prefix users gives them a little deception, because just because its keyworded ~amd64, it doesn't mean somebody ever got it working on prefix.

I'm not sure I like that outcome, but like, I care more about the graph being consistent. If I can hold my end up of that bargain, whether or not prefix actually works is prefix's problem :)
Comment 16 Guilherme Amadio gentoo-dev 2020-12-11 08:48:45 UTC
(In reply to Benda Xu from comment #14)
> (In reply to Fabian Groffen from comment #13)
> > If I interpret this correctly, it implicates that we drop all *-linux
> > keywords.
> > 
> > I have nothing really against this, but it will implicate a lot of packages
> > suddenly being "available", yet not working at all.  It seems impractical to
> > mask all packages currently not keyworded, and add masks for any new package
> > entering the tree.
> 
> We are already doing that by landing amd64 prefix to unstable profiles from
> exp.  So far so good.  In the age of EAPI 7, most of the packages work out
> of the box for Prefix.

Yes, I can also say that at least on prefix-standalone, it's becoming quite rare
to find packages that don't work on prefix out of the box. I have installations
with 1000+ packages and I think dropping *-linux keywords and reusing the regular keywords should be just fine. However, it would be great if we could somehow make at least bootstrapping more stable by using packages with stable keywords only at that stage, and ensuring those work for bootstrapping.
Comment 17 Tim Harder gentoo-dev 2020-12-22 19:17:11 UTC
Has the prefix team decided how they want to handle this yet? The change that  makes pkgcheck ignore broken *-linux prefix keywords for visibility checks will probably be reverted in the next release leading to CI exploding with NonsolvableDepsInDev results.
Comment 18 Fabian Groffen gentoo-dev 2020-12-22 19:55:15 UTC
I think the dominating thought is to stop using the *-linux variants in favour of the non-Prefix keywords.

It seems I'm the only one who's in doubt about whether this is a good idea or not, but it would greatly relieve keyword stress on "myself", e.g. not to care about *-linux any more, so that's kind of balancing the scales for me.

I don't quite fancy doing the work though.  I think we could certainly start with adapting the profiles, switching the keywords, and let someone figure out how to explain to ordinary Gentoo Linux users they shouldn't try and select the prefix profiles from eselect profile list.  In a way they already figure out switching e.g. to musl is a bad idea, so perhaps this is a non-issue.

I'm hoping we can phase out the keywords from the tree gradually though, or someone else to script this up and take the risk for it.
Comment 19 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2021-01-08 09:31:09 UTC
Ping.  This is making pkgcheck unusable.  If you can't manage to finally fix it, I'm going to mark Prefix profiles exp in order to silence the spam.
Comment 20 Fabian Groffen gentoo-dev 2021-01-08 09:42:13 UTC
I think the RAP profiles want to use ~amd64 keyword, while the rpath-profiles want to use ~amd64-linux keywords at this point.  The latter is exp AFAICT, and I will put it on my TODO list to see if I can safely switch ARCH to amd64-linux there.  (The answer is likely yes, would satisfy PMS reqs then IMO.)

For the RAP profiles, Benda really should make a decision and act accordingly.

General remark, rpath-profiles are NOT to be removed/deprecated.  They are actively in use.
Comment 21 Guilherme Amadio gentoo-dev 2021-01-08 10:05:13 UTC
From my own experience running repoman and pkgcheck, the problem is that in rpath prefix, the main repository is a combination of prefix local packages and packages in ::gentoo. That means that ::gentoo effectively acts like an overlay for ::gentoo_prefix. However, that is a problem when a package in ::gentoo keyworded as e.g. ~amd64-linux relies on dependencies that exist only in ::gentoo_prefix. The solution is to either merge everything in ::gentoo_prefix back into ::gentoo or make the tools ignore these errors as was done before. If the prefix rpath profiles can be marked exp while keeping prefix standalone profiles as dev, that's probably also just fine, since standalone prefix uses regular keywords and shouldn't cause any missing dep warnings. But long term, I think that merging ::gentoo_prefix and ::gentoo would be best, or at least making ::gentoo_prefix a normal overlay to ::gentoo and not the other way around.
Comment 22 Fabian Groffen gentoo-dev 2021-01-08 10:10:19 UTC
What you say is already the case:
- all Prefix profiles are 'exp', except the few RAP profiles being 'dev'
- migrations from the prefix-overlay to the main tree are ongoing, it is just a slow process
Comment 23 Guilherme Amadio gentoo-dev 2021-01-08 10:36:04 UTC
Indeed, for some reason I thought that rpath prefix on linux was also marked dev along with RAP, probably because the warnings are for bad dependency in dev and with keywords as ~amd64-linux... I wonder why RAP triggers such warnings then.

I see these warnings also for packages with optional dependencies that are not keyworded for prefix, while the main package is, like packages that optionally depend on Qt.

In any case, if we can simply supress warnings for *-linux keywords rather than move the profiles back to exp, that would be better in my opinion.
Comment 24 Benda Xu gentoo-dev 2021-01-20 04:37:09 UTC
I will migrate the prefix-standalone profiles to the ${ARCH} keyword.
Comment 25 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2021-01-28 10:32:04 UTC
Ping.
Comment 26 Thomas Deutschmann (RETIRED) gentoo-dev 2021-01-31 20:55:01 UTC
https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b75855e68ea743a6eea54d0b7ad947ed567de6ae is also masking live ebuild... :(
Comment 27 Tim Harder gentoo-dev 2021-01-31 21:27:47 UTC
(In reply to Thomas Deutschmann from comment #26)
> https://gitweb.gentoo.org/repo/gentoo.git/commit/
> ?id=b75855e68ea743a6eea54d0b7ad947ed567de6ae is also masking live ebuild...
> :(

While I don't agree with the mask, I did request mgorny to not include live ebuilds in the mask so someone should change it to only mask releases. People using live ebuilds should know how to handle themselves without masks being required.
Comment 28 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2021-01-31 21:36:23 UTC
The bug is open since May last year, let's call it a timeout and unleash the hell.  I suppose marking the profiles exp won't harm existing users, won't it?
Comment 29 Larry the Git Cow gentoo-dev 2021-01-31 22:32:55 UTC
The bug has been referenced in the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=fe71f903d5afafcaa77619a96a550f3f817cdede

commit fe71f903d5afafcaa77619a96a550f3f817cdede
Author:     Michał Górny <mgorny@gentoo.org>
AuthorDate: 2021-01-31 21:42:06 +0000
Commit:     Michał Górny <mgorny@gentoo.org>
CommitDate: 2021-01-31 22:32:51 +0000

    profiles.desc: Mark prefix profiles exp due to broken $ARCH
    
    The problem with inconsistent ${ARCH} value has not been resolved
    since 2020-05-01 and is resulting in a large number of false positives
    with pkgcheck.  Switch the two Linux Standalone dev profiles
    (kernel-3.2+) to exp to hide them from normal output.
    
    Bug: https://bugs.gentoo.org/720224
    Signed-off-by: Michał Górny <mgorny@gentoo.org>

 profiles/profiles.desc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Comment 30 Benda Xu gentoo-dev 2021-02-01 02:28:15 UTC
(In reply to Michał Górny from comment #28)
> The bug is open since May last year, let's call it a timeout and unleash the
> hell.  I suppose marking the profiles exp won't harm existing users, won't
> it?

Sorry for not acting in time.  Will process it ASAP.