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 |