Gentoo Archives: gentoo-dev

From: Mike Frysinger <vapier@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] RFC about another *DEPEND variable
Date: Mon, 25 Sep 2006 17:18:24
Message-Id: 200609232331.12953.vapier@gentoo.org
In Reply to: Re: [gentoo-dev] RFC about another *DEPEND variable by Brian Harring
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

Replies

Subject Author
Re: [gentoo-dev] RFC about another *DEPEND variable Brian Harring <ferringb@×××××.com>