1 |
On Saturday 23 September 2006 10:30, Brian Harring wrote: |
2 |
> dlopen? |
3 |
|
4 |
we already said that this will need a new depend variable |
5 |
|
6 |
> How does this fix openssl horkage? (bad soname handling) |
7 |
|
8 |
it wont, but such things are broken regardless outside of Gentoo ... and |
9 |
trying to accommodate something that happens every three blue moons at the |
10 |
cost of developer time is not worth it |
11 |
|
12 |
> Also... what do we do for python/perl (*-updater scripts in general) |
13 |
> where a change in a pkg state means we have to rebuild the revdeps? |
14 |
|
15 |
my solution does not address this, but what you're proposing would over |
16 |
address this ... how do you know when a package needs to be rebuilt (a perl |
17 |
module) or rebuilding is a waste of time (a package installs perl scripts |
18 |
that execute `perl` and nothing else) |
19 |
|
20 |
> What you're suggesting works for strictly linkage; still think this |
21 |
> shouuld work for the general problem rather then just one subset. |
22 |
|
23 |
yes, i am addressing what i see to be the most critical issue and the easiest |
24 |
to break a user's system |
25 |
|
26 |
> Clarifying my statement; we don't break our DEPEND down into "this is |
27 |
> what is executed in building the package" (toolchain), |
28 |
|
29 |
DEPEND |
30 |
|
31 |
> vs "this is the |
32 |
> crap the binaries we build against need avail to be linked against", |
33 |
> literally what winds up as -l args. |
34 |
|
35 |
RDEPEND |
36 |
|
37 |
> If punting the old lib (as I assumed), means we would potentially be |
38 |
> making certain DEPEND atoms unusable if they're required in an |
39 |
> execution context (rather then just winding up as a -l arg). |
40 |
|
41 |
no ... lemme give a perfect example. |
42 |
|
43 |
user has openssl-0.9.7j installed and they upgrade to openssl-0.9.8c ... the |
44 |
old version provided SONAME files libcrypto.so.0.9.7 and libssl.so.0.9.7 |
45 |
while the new one provides SONAME files libcrypto.so.0.9.8 and |
46 |
libssl.so.0.9.8 |
47 |
|
48 |
everything from openssl-0.9.7j is unmerged except for the two files |
49 |
libcrypto.so.0.9.7 and libssl.so.0.9.7. openssl-0.9.8c, being a different |
50 |
ABI, does not provide these files thus there is no clash. |
51 |
|
52 |
portage keeps track of libcrypto.so.0.9.7 and libssl.so.0.9.7 and once no more |
53 |
packages have NEEDED entries for these, will silently clean them out |
54 |
|
55 |
openssl is odd in that it encodes .x.y.z version into the ABI ... if we use |
56 |
the more common example with say expat, older versions install |
57 |
libexpat.so.0.1, libexpat.so.0.2, libexpat.so.0.3, etc... but the ABI SONAME |
58 |
is still just libexpat.so.0. when the next major version of expat comes out, |
59 |
the SONAME is bumped to libexpat.so.1 and portage needs to keep around the |
60 |
last libexpat.so.0 |
61 |
|
62 |
> In that case, wouldn't mind a response to the "what about ctrl+c |
63 |
> during the run?" The potential for orphaning there sucks; recording |
64 |
> the old library in the new version sucks also since it complicates the |
65 |
> merge process, that lib *must* be removed else it's a potential |
66 |
> collision-protect minefield. |
67 |
|
68 |
- portage merges new version 2 to $ROOT |
69 |
- system now has version 1 and version 2 in $ROOT |
70 |
- portage starts to clean out version 1 from $ROOT |
71 |
- do not fully trim version 1's vdb until version 2 has been updated with the |
72 |
new information |
73 |
|
74 |
so ctrl+c at any point and so what ? you dont remove old files until new |
75 |
files are fully placed and you can resume at any point |
76 |
|
77 |
> Finally, even if the lib is temporarily left behind, this solution |
78 |
> doesn't gurantee the library actually would *work* still- it only can |
79 |
> work if the lib is standalone from the rest of the pkg and doesn't |
80 |
> rely on any external data from the pkg. |
81 |
|
82 |
we're talking about preserving the system long enough to rebuild things; we're |
83 |
not talking about keeping the system forever in a sane state. |
84 |
|
85 |
i would guess that this corner case is not the norm and thus we can ignore it |
86 |
as the situation is still a lot better than what we have now: |
87 |
$ foo |
88 |
foo: error while loading shared libraries: libbar.so.1: cannot open shared |
89 |
object file: No such file or directory |
90 |
|
91 |
awesome |
92 |
|
93 |
> Basically trying to point out that what you're proposing only works in |
94 |
> a subset of the cases revdep must deal with, and that revdep itself |
95 |
> doesn't deal with *all* situations as is; hence BINCOMPAT as a way to |
96 |
> try and shift it under maintainers control. |
97 |
|
98 |
revdep-rebuild doesnt take into consideration any of the issues you raised |
99 |
|
100 |
and forcing maintainers to always track BINCOMPAT is unwieldy ... a single |
101 |
package provides multiple SONAMEs ? bitrot ? SONAME is dynamic based upon |
102 |
architecture or USE flags ? |
103 |
-mike |