1 |
Tom Wijsman <TomWij@g.o> wrote: |
2 |
>> The new "features" use.stable.mask and package.use.stable.mask |
3 |
>> have turned maintaining systems with mixed ARCH and ~ARCH keywords |
4 |
>> into a nightmare: |
5 |
> |
6 |
> They are considered unsupported by many |
7 |
|
8 |
We can make a vote, but I would be very surprised if there are |
9 |
many stable users without any unstable package. |
10 |
|
11 |
>> As I understand, it tries to solve a "social" issue |
12 |
>> (that an ARCH user might set a USE-flag which eventually |
13 |
>> pulls in an ~ARCH package) on a technical level |
14 |
>> (by forcibly disabling the USE-flag for the user). |
15 |
> |
16 |
> That's one approach, it might also be used when a package can be |
17 |
> stabilized but a certain of feature of the package cannot; eg. |
18 |
> USE=3D"minimal" could be broken on a certain package because it removed a |
19 |
> bit too much, thus it could be stabilized with USE=3D"-minimal" forced. |
20 |
|
21 |
As I said, it is a technical means to solve a social issue: |
22 |
Instead of communicating to the users that Gentoo does not consider |
23 |
USE=minimal stable, one *forces* USE=-minimal behind their back, even |
24 |
if they should have decided to select it explicitly. |
25 |
|
26 |
> Sometimes problems can be resolved by better communication too; perhaps |
27 |
> there are things we can inform the user about in pkg_postinst |
28 |
|
29 |
This would be the reasonable case for the USE=minimal example |
30 |
(maybe even already in pkg_setup). There are also other ways to |
31 |
communicate this to the user; I_KNOW_WHAT_I_AM_DOING names etc. |
32 |
is another one. |
33 |
|
34 |
> improve Portage to let the user know of a particular forced USE flag. |
35 |
|
36 |
If you just remove use.stable.mask, portage will tell exactly |
37 |
this to the user: That some package needs to be unmasked for |
38 |
a certain dependency to be satisfied. |
39 |
Then it is up to the user to decide whether he wants unmasking |
40 |
or setting the use-flag. Instead making the choice behind his |
41 |
back (against the use-flag) is bad IMHO. |
42 |
|
43 |
> That are indeed the two approaches, I don't see a problem with putting |
44 |
> the version itself in accept_keywords or overriding the profile; |
45 |
|
46 |
Putting a stable version into accept_keywords will (correctly) be |
47 |
considered redundant by all tools which cleanup your accept_keyword: |
48 |
It makes no sense, and using it only to work around the issues |
49 |
which use.stable.mask introduced appears plainly false. |
50 |
|
51 |
Overriding in the profile of e.g. use.stable.mask cannot be done |
52 |
for a single package; you can only negate a whole entry. In fact, |
53 |
if you want something here, you are more or less almost forced |
54 |
to negate all entries of {package.,}use.stable.mask |
55 |
This is why I ask whether the latter must be there in the first place. |
56 |
|
57 |
In fact, checking what actually is there, you find: |
58 |
|
59 |
1. Hundreds of packages with abi_x86_32 |
60 |
2. python_{single,}targets_* |
61 |
3. 5-10 packages with USE-flags like "unstable" or "clang" for which |
62 |
it should be clear for any stable user that he does not want to |
63 |
activate it without knowing what he is doing resp. caring about |
64 |
the dependencies. |
65 |
4. Nothing else. |
66 |
|
67 |
So practically only stuff which already caused grief plus very few |
68 |
normal stuff which better should be communicated if it is not |
69 |
obvious anyway. |
70 |
|
71 |
>> The really bad thing is that this is happening by magic |
72 |
>> "behind the user's back" |
73 |
> |
74 |
> System upgrades have to be done carefully; so, the user skipping it is |
75 |
> something we cannot account for |
76 |
|
77 |
So just to get it right: |
78 |
There was something introduced to avoid communication which does |
79 |
something behind the user's back which in many cases can be just |
80 |
the opposite that the user wanted. You expect the user to check |
81 |
the output carefully so that he can recognize that somebody is |
82 |
trying to trick him, and if he analyzes the profiles he can |
83 |
eventually find out what it is. |
84 |
Do you really consider this better than reporting to the user |
85 |
that some testing package is pulled in by a USE-flag he had set? |
86 |
(Which would be the effect without use.stable.mask) |
87 |
|
88 |
>> Since there are many reasons why use-flags can appear in () |
89 |
>> he will probably not even conjecture that actually something |
90 |
>> will not be working as he expected. |
91 |
> |
92 |
> Most of these reasons can be uniquely determined from the output |
93 |
|
94 |
Any mask is displayed the same. But this is not the point: |
95 |
stable.mask was introduced to avoid communication with the user |
96 |
by trying to guess what he means (in contrast to: doing what he |
97 |
writes in the config-files). |
98 |
Now you expect him to read carefully output and even improve |
99 |
output only that he can decide whether portage's guesses are |
100 |
right or whether he has to work against his profile. |
101 |
|
102 |
Such tools which try to be more clever than the user always |
103 |
cause trouble. Please recall this mechanism which was used |
104 |
previously to "guess" useflags based on installed packages |
105 |
(I even forgot the name, since this was fortunately removed). |
106 |
This is nothing compared to the magic which stable.mask forces, |
107 |
since the latter cannot simply be overrided by configuring |
108 |
package.use appropriately. |
109 |
|
110 |
>> But suddenly portage spitted unexplainable dependency errors, |
111 |
>> and I only expert users manually reading the profiles can |
112 |
>> understand that the reason is that use.stable.mask requires |
113 |
>> that stable versions need to be keyworded ~amd64 |
114 |
>> (or use.stable.mask has to be overridden in my profile). |
115 |
> |
116 |
> This confuses me; isn't the goal to have one multilib apprach or the |
117 |
> other? Especially due to the blockers between them. |
118 |
|
119 |
This discussion does not belong here; I decided for ABI_X86="32" |
120 |
and expect portage to respect this decision and not disabling |
121 |
it randomly for some packages just because I did not mark a |
122 |
stable package testing. |
123 |
|
124 |
Yes, I understand the mechanism and how to override it, but this |
125 |
is all tricky and cumbersome: Essentially, you have to spend a |
126 |
lot of time just to work against the stable.mask mechanism. |
127 |
The intention was probably that this mechanism should be |
128 |
helpful and simplify things, but it turns out that it does |
129 |
just the opposite. So one should think it over and remove it |
130 |
(or replace it by something better if one finds something). |
131 |
|
132 |
>> 2. Just a few days ago dev-lang/python-exec:2 became stable |
133 |
>> on amd64, but dev-python/python-exec:2 is still ~amd64. |
134 |
>> Just to be sure to not miss anything, I have put the latter |
135 |
>> into package.accept_keywords, and hell break loose: |
136 |
> |
137 |
> Hell indeed breaks loose if you mix stable and unstable |
138 |
|
139 |
Again, one might do a vote, but I would be surprised if not |
140 |
80-90% of the stable users also have unstable packages. |
141 |
|
142 |
> but note that this package had an accident, see the related |
143 |
> news item for details. |
144 |
|
145 |
This is why it took me so long to find out; of course, I thought |
146 |
that the problem is related with the news while it was actually |
147 |
related with use.stable.mask |
148 |
|
149 |
>> Portaqe wanted me to emerge the git version of |
150 |
>> dev-lang/python-exec:0 and reemerge dozens of packages. |
151 |
> |
152 |
> This is a consequence of that hell; if you don't agree and this is due |
153 |
> to the Portage tree, please show the dependency chain that causes this. |
154 |
|
155 |
Please read, what I had written: I have explained why this happened. |
156 |
It is because use.stable.mask horribly interacts with the dependency |
157 |
chain: Use flags change out of nothing if you are forced to add an |
158 |
unstable keyword somewhere. |
159 |
|
160 |
>> I needed hours to find out what is the actual cause: |
161 |
>> The package.accept_keywords caused the use.stable.mask of |
162 |
>> python_targets_pypy2_0 und python_targets_python3_3 to become |
163 |
>> ineffective for dev-python/python-exec, |
164 |
> |
165 |
> It doesn't matter, dev-python/python-exec installs no contents. |
166 |
|
167 |
This is the point: You have an actual "useless" package which |
168 |
due to use.stable.mask hinder dependencies from being corrrectly |
169 |
resolved. And which even forces other packages to be rebuilt, |
170 |
also because of changes only in use.stable.mask. |
171 |
|
172 |
>> but of course it is still |
173 |
>> effective for dev-lang/python-exec which is not be the case |
174 |
>> if I unmask the git version of dev-lang/python-exec. |
175 |
> |
176 |
> Which one is not meant to do anyway; and from what you wrote, I don't |
177 |
> think you intent to either. |
178 |
|
179 |
Exactly, but this is the only solution which portage can |
180 |
find; again, because use.stable.mask implicitly changes the |
181 |
dependency chain. |
182 |
|
183 |
>> This is completely confusing since nowhere the git-version |
184 |
>> is marked differently than the non-git version. |
185 |
> |
186 |
> Marked in which way? One is stable, the other unkeyworded. |
187 |
|
188 |
They provide exactly the same USE-flags, and whenever they |
189 |
occur in profiles or dependencies they occur both or none. |
190 |
So one has a hard time to guess why the git version satisfies |
191 |
a dependency which is not satisfied by the stable version. |
192 |
Of course, if one knows the answer (use.stable.mask), it is clear. |
193 |
Instead of making things simpler for the user, use.stable.mask |
194 |
causes problems to the user. |
195 |
It causes much more problems than it solves: Actually the only |
196 |
problem which it solves (or better: tries to solve) is a |
197 |
communication problem... |
198 |
|
199 |
> If it is due to the hell above, we warn users up front for that. |
200 |
|
201 |
Most users mixing stable and unstable have valid reasons |
202 |
for each case. Telling "we have told you not to do that" |
203 |
only to keep a smart-ass mechanism which produces more |
204 |
problems than it solves is a bad idea. |
205 |
|
206 |
>> 3. As a side effect of 2., I realized that libreoffice and a dozen |
207 |
>> further packages get forced a rebuild. So, if eventually |
208 |
>> python-3.3 becomes stable and is removed from use.stable.mask, [...] |
209 |
> |
210 |
> That is to be expected on such stabilizations, I doubt they are |
211 |
> unnecessary |
212 |
|
213 |
Only because some package which I have not even installed changed |
214 |
its stability, it should be necessary that I reemerge everything? |
215 |
And even *if* I should have installed it, the change of its |
216 |
stability would make it necessary to reemerge my world? |
217 |
Things appear very strange in Gentoo land meanwhile... |