Gentoo Archives: gentoo-amd64

From: Duncan <1i5t5.duncan@×××.net>
To: gentoo-amd64@l.g.o
Subject: [gentoo-amd64] Re: file type not allowed in /usr/lib
Date: Sun, 07 Aug 2005 13:21:59
Message-Id: pan.2005.08.07.13.18.13.110970@cox.net
In Reply to: [gentoo-amd64] file type not allowed in /usr/lib by Will Briggs
1 Will Briggs posted <42F53B6D.1080908@××××××××××××××××××.au>, excerpted
2 below, on Sun, 07 Aug 2005 08:36:29 +1000:
3
4 > !!! ERROR: media-gfx/skencil-0.6.16 failed. !!! Function dyn_install,
5 > Line 1114, Exitcode 0 !!! File
6 > /var/tmp/portage/skencil-0.6.16/image///usr/lib/skencil-0.6.16/Lib/paxtkinter.so
7 > matches a file type that is not allowed in /usr/lib !!! If you need
8 > support, post the topmost build error, NOT this status message.
9 >
10 > So if anyone can help with a fix, please let me know.
11 >
12 > The _question_ relates to the fact that I've seen this sort of error a
13 > number of times, but by the time I come across it it's been bugged and
14 > fixed and the next emerge sync fixes it. Can someone let me know what
15 > the issue is here - (mainly so I can get a handle on hacking my own
16 > fixes when bug reports go unanswered) Why can't a .so file be placed in
17 > /usr/lib?
18 >
19 > I'm assuming there's some AMD64 specificity to this bug. Because a) it
20 > hasn't got the attention that x86 bugs get and b) its a /usr/lib issue
21 > and I'm assuming multilib might be at play somehow.
22
23 I'm repeating what Simon said, but sometimes it helps to get it said a
24 couple different ways, and between the two you get the understanding. =8^)
25 So, here goes...
26
27 The immediate user-level fix, as Simon says, is kill the
28 FEATURES=multilib-strict. That FEATURE is designed for testing for a
29 specific situation that works the way things are now, but will cause
30 serious issues when we go full LSB multilib (Gentoo-amd64 is kindof a
31 hybrid situation at present). Those that understand what's going on and
32 want to test for this issue can set that FEATURE and portage will die
33 whenever it hits and ebuild or upstream tarball that's making unwarranted
34 assumptions about the system library locations. Those who don't want the
35 hassle should either NOT set FEATURES=multilib-strict, or set
36 FEATURES=-multilib-strict, and the problem will go away as far as they are
37 concerned, because it works right now, even if it isn't quite right.
38
39 Here's the background. As Simon explained, in ordered to be able to have
40 32-bit and 64-bit copies of the same library, they need to be kept in
41 different directories. Traditionally, of course, the location has always
42 been lib, /lib, /usr/lib, etc. Now, if there are going to be two library
43 locations, separated by bitness, there are two ways to go. Other archs
44 previously have gone both ways, some one way, some the other. The old
45 normal lib location can remain 32-bit, making it easier for legacy 32-bit
46 programs some of which might be binary-only and therefore not easily
47 modified, to continue to find their libraries and the like, with 64-bit
48 libs then put in lib64, if the one way is chosen. If the other way is
49 chosen, the old lib location remains the system "main" bitness location,
50 64-bit on a normal mainly 64-bit distribution, with 32-bit then being
51 located in lib32. Therefore, one way, you have a 32-bit lib and also have
52 lib64, the other, you have a 64-bit lib and also have lib32. One makes it
53 easier for 32-bit legacy apps that might be difficult to change if they
54 are binary-only, the other makes it easier (or at least more "natural")
55 for the system's main 64-bit libraries, so both have their good and bad
56 points.
57
58 As it happens, Gentoo started its amd64 project before there was an agreed
59 amd64 standard, and originally chose a 64-bit lib, with lib32 as well. In
60 addition to the "native" lib logic explained above, this is the way ia64
61 (Intel's Itanium aka "Itanic") handled things, so it did seem totally
62 logical.
63
64 Then they make the standard (LSB/FHS, that's Linux Standard Base, and File
65 Hierarchy Standard) for amd64, and turn the Gentoo table on its head!
66
67 Most of the commercial distributions decide to go with a 32-bit lib and
68 adding lib64, aiding compatibility with binary-only 32-bit apps, reasoning
69 that 64-bit is new and will require certain other changes anyway, so it's
70 easier to just make the change to lib64 at the same time and leave the
71 legacy location well enough alone, avoiding trouble in 32-bit land.
72 Additionally, this can be seen as logical as contrasted with ia64, because
73 with ia64, 64-bit is the ONLY real native bitness, 32-bit being ALWAYS
74 emulated, and slower, so it only makes sense to make lib the "native"
75 64-bit libs, with 32-bit libs relegated to the secondary lib32 location.
76 amd64, OTOH, is actually FULL DUAL BITNESS IN HARDWARE, so whether 64-bit
77 or 32-bit is "more native" really depends entirely on the approach taken
78 by the individual OS/distribution platform, NOT the hardware. Thus, the
79 legacy issues that amd64 has both the blessing and the curse of being able
80 to deal with, simply weren't there for ia64, so while lib can be argued
81 both ways for amd64, the choice was really rather clear for ia64.
82
83 So... Gentoo quickly found itself going one way, while pretty much all of
84 the rest of the Linux world had settled on going the other way, with the
85 LSB/FHS multilib standard for amd64. Now, Gentoo is primarily open
86 source, and there's certainly no law saying we /have/ to do it like
87 everyone else does, so we /could/ have simply continued doing things the
88 way we had been doing them. However, there are two very good reasons to
89 change, despite the temporary confusion and pain it brings, while we are
90 in-process.
91
92 First, there's the binary compatibility issue, both with legacy apps and
93 moving forward. It's simply harder to get binaries from other sources to
94 work, when they are designed with one set of assumptions about locations,
95 but installed on a system with a rather different set of assumptions. As
96 I said, there's the 32-bit legacy thing, but consider continuing effect
97 going forward, as well. If we stayed the way we are, every binary-only
98 installation a Gentoo-amd64 user ever made, including the new amd64
99 binaries, when they become common, would be a fight. Despite the temporary
100 confusion during the switch, therefore, switching will clearly make things
101 easier for every Gentoo-amd64 user as time moves forward.
102
103 Second, there's the upstream compatibility issue. It has been observed
104 that despite the freedom to modify that the FLOSS (free, libre, and open
105 source software) community not only allows but encourages, one of the
106 major forces keeping the Linux community from splitting into a bunch of
107 proprietary fiefdoms much as the proprietary UNIX community split, is the
108 unifying/streamlining effect of open source sharing efficiencies. While
109 there are the ever-present forces of differentiation, "my distribution is
110 better than yours because we have these features you don't" that split the
111 proprietary Unix community, the balancing force, the reason the same thing
112 doesn't happen in the open source community, is the fact that for the
113 mostly duplicated common code, it's ALWAYS more efficient to keep in line
114 with the rest of the community, so the maintenance and further development
115 efforts can continue to be shared, so each distribution only carries PART
116 of the burden, rather than ALL of it, as they do for anything proprietary
117 or non-standard they offer. Thus, while there are always differences in
118 the areas a distribution considers important and valuable enough to be
119 worth the extra cost to maintain and continue development, the differences
120 in OTHER "unimportant" areas tend to be rather small, because of the
121 economics forces favoring sharing the burden, which can only happen if the
122 differences in the area remain relatively small or non-existent. It's a
123 constant balancing act that by natural selection, continuously weeds out
124 the differences a distribution doesn't consider important enough to
125 support on its own.
126
127 Thus, the upstream compatibility issue resolves to this: the closer we
128 are to accepted LSB/FHS standard, the less work we will have to do making
129 changes so that open source packages which generally target the loose
130 standards, will work on Gentoo. Now, consider the fact that there's very
131 little disagreement that amd64 *IS* the successor to x86. What
132 maintenance issues we have now because we choose to do it our own way will
133 only CONTINUE to increase in the future, as amd64 becomes the default and
134 VERY widely assumed common platform, against which the changes necessary
135 for all other platforms are diffed. There's simply NO good reason to
136 continue to make all that extra work for ourselves, requiring entirely
137 unnecessary changes to each new version of each new package, from now,
138 almost certainly a good decade into the future, very likely a quarter
139 century into the future, if amd64 has the same run that x86 did, and
140 assuming of course Gentoo's around that long as well.
141
142 Together, these two reasons means the only /possible/ sensible alternative
143 is to bite that bullet, and exchange some temporary misery now, while the
144 conversion is in progress, for a /far/ more standards compliant multilib
145 setup, going forward.
146
147 That, then, is the background, how we came to be in the situation we are
148 in now, and why we are having to change things "in mid stream", as it
149 were. The logical next questions are where are we now, and what will it
150 take to get us where we want to be?
151
152 Currently, Gentoo-amd64 has just about finished moving 64-bit libs out of
153 lib. We have both a lib32, and a lib64, with lib being a symlink to
154 lib64, for those remaining packages (such as skencil, apparently) that
155 have so far fallen thru the cracks, and continue to make the early
156 Gentoo-amd64 assumption that lib is the 64-bit shared object location.
157 With 2005.1, I'm expecting FEATURES=multilib-strict will be the default,
158 to finally weed out as many of the few remaining back packages as
159 possible. With 2006.0, it's possible that lib -> lib64 symlink can
160 finally be broken, and any remaining packages then WILL get bugs filed,
161 when someone tries to use them and has issues. With luck, by 2006.1, it
162 should be safe to start doing basically the same thing with the lib32 ->
163 lib move, as we will have just got thru doing with the lib -> lib64 move.
164 First, there will be a symlink between the two, in another release or two,
165 the main packages will be changed and it'll be time to activate the
166 multilib-strict test for anything still ending up in lib32 instead of lib.
167 By 2007.0, therefore, if luck holds, that multilib-strict test can be the
168 default, to catch all the stragglers possible, and 2007.1 should then
169 hopefully be able to remove lib32, relegating it to the annuls of
170 Gentoo-amd64 history. (Those .1 mentions assume that Gentoo continues
171 with the twice-yearly releases, thus, they mean second-half.)
172
173 However, that's really only half the issue. The other half is portage,
174 which currently can't track 32-bit dependencies separate from its 64-bit
175 dependencies. We had hoped that portage would have dual-bitness support
176 by 2005.1, but that's now looking impossible, since the new portage
177 remains only in CVS, there hasn't yet been even the usual hard masked for
178 testing alpha snapshot releases, let alone the -preX versions, which would
179 be the first ones that could even theoretically leave hard mask testing,
180 for ~arch testing. Thus, it'll be 2006.0 at the earliest, before portage
181 will be able to handle dual-bitness tracking, keeping the 32-bit
182 dependencies separate from the 64-bit dependencies. Until then,
183 Gentoo-amd64 32-bit support will remain spotty at best, requiring users
184 either install from tarball, or use a 32-bit chroot with its own portage
185 tracking 32-bit dependencies, for pretty much anything beyond the core
186 system libraries (sandbox, gcc, glibc, now from-source supported, other
187 32-bit core libraries managed as binary-only packages or from the chroot).
188
189 So... back to your error and multilib-strict. So... suppose you've
190 decided to run multilib-strict and report the bugs you find. Since
191 portage's method of notifying you of a multilib-strict violation is to
192 die, how do you finish the installation once you've gotten the notice,
193 filed the bug if necessary, and still want the package, before the bug is
194 fixed?
195
196 Well, as mentioned, the simplest, but /not/ necessarily shortest, method,
197 would be to simply...
198
199 FEATURES=-multilib-strict emerge --oneshot <whatever.trouble.pkg>
200
201 (Note that --oneshot. Packages placing libraries incorrectly and
202 triggering this error will by definition mostly be libraries, that is,
203 dependencies, not applications you want listed in your world file. Thus,
204 the --oneshot, to emerge it without adding it to your world file.)
205
206 HOWEVER, multilib-strict errors will normally be triggered ONLY during the
207 (fake-)install phase -- when the package is doing the fake-install to its
208 tempdir image directory. It's at that point sandbox detects the attempt
209 to install a shared-object to lib, instead of lib64. The catch is, by
210 that time, the major work of the emerge, all the compilation stuff, has
211 already been done. The binaries should be perfectly fine, as they are the
212 ones that would normally be installed, if multilib-strict was off, and
213 would have been installed the way things worked before that feature was
214 ever added to portage. However, emerge just died, so it could report the
215 problem. Shouldn't there be a way to tell portage to go ahead and finish
216 the merge using the existing work, now that we know about the bug and have
217 presumably reported it if necessary, rather than starting ALL over again
218 with the package emerge, as the above command will do?
219
220 As it turns out, there /is/ such a way. "ebuild" is the command used to
221 step thru an emerge of a single package. You can call it specifically, to
222 merge a single package, or to step thru one step at a time (normally
223 fetch, unpack, compile, install, qmerge), and in fact, emerge itself calls
224 ebuild to handle each individual package, one at a time. I'm not going to
225 go into detail on ebuild here, because it's all covered quite well in the
226 Gentoo Handbook and in the ebuild (1) (5) manpages. However, that's the
227 command you use. HOWEVER, you DO have to tweak one little thing, first,
228 to tell portage not to worry about that multilib-strict that you've
229 already dealt with.
230
231 Emerge dies with the multilib-strict error, as mentioned, during the
232 install step. As mentioned, the compile is already done, the binaries
233 sitting in the tempdir work tree, ready to be moved over to the image dir,
234 during the install phase. Portage will also, by that point, have created
235 a number of additional files in the package's working tempdir, one of
236 which contains the FEATURES line, which we have to modify, removing the
237 "multilib-strict" portion, so ebuild won't trigger once again on it, once
238 it gets to that point. The file is
239 $PORTAGE_TMPDIR/portage/<packagename-version>/temp/environment . Open
240 that in your favorite text editor and edit the FEATURES line, removing the
241 multilib-strict. Save the file. NOW you can issue your ebuild <pkg>
242 merge command, and it should quickly figure out the compile step is done,
243 and jump back into the install step, completing it and then finishing the
244 merge.
245
246 Whether it's worth the hassle of loading that file in your editor,
247 removing the multilib-strict, saving, and running ebuild to finish the
248 merge, against simply issuing the emerge command listed above, but going
249 thru the whole thing including the compile step again, will probably
250 depend on how big the package is. For something taking less than five
251 minutes to emerge from start to finish, it's not worth the hassle, but it
252 might be, if that compile step takes say an hour...
253
254 --
255 Duncan - List replies preferred. No HTML msgs.
256 "Every nonfree program has a lord, a master --
257 and if you use the program, he is your master." Richard Stallman in
258 http://www.linuxdevcenter.com/pub/a/linux/2004/12/22/rms_interview.html
259
260
261 --
262 gentoo-amd64@g.o mailing list

Replies

Subject Author
Re: [gentoo-amd64] Re: file type not allowed in /usr/lib Simon Stelling <blubb@g.o>
Re: [gentoo-amd64] Re: file type not allowed in /usr/lib Jeremy Huddleston <eradicator@g.o>