Wow. Great detective work.
I'm sure there's a way to put dependency requirements into an RPM....
although I am probably closer to understanding guage theory on principal
fibre bundles than knowing how to properly mangle a spec file. :-p
So who gets to update the rpm? The Free Software Foundation, Sun, Red
Hat, or Troy? :-) :-) :-)
-Dave
David Gore, Ph.D. <HAT> Beam-line
Scientist </HAT>
Research Assist. Professor of Physics <HAT> Beam-line Operations
Manager </HAT>
Illinois Institute of Technology <HAT> Visiting Experimenter
Support </HAT>
V (630) 252 0547 [02:76:00:FC:02:23] <HAT> Computer
Administrator </HAT>
F (630) 252 0545 [02:76:00:FC:02:21] <HAT> Safety
Officer </HAT>
http://www.bio.aps.anl.gov/~dgore "Multi religiosi, pauci leones"
GPG PUBLIC KEY FINGERPRINT: 08D9 003D 3F57 FEEF B9F5 1D2E 657E 88C0 FE83
191C
"If your VCR is still blinking '12:00,' Linux is probably not the right
answer."
Jon Peatfield wrote:
On Tue, 29 May 2007, Glenn Morris wrote:
FWIW, I had these links in / after an install as well (but only one on
machine out of five so far). Looks like the culprit can only be
java-1.4.2-gcj-compat-devel, but I can't see how.
How about this as an explanation...
$ mkdir -p /tmp/foo && cd /tmp/foo
$ ls -al
total 12
drwxr-xr-x 2 jp107 other 4096 May 28 13:16 ./
drwxrwxrwt 29 root root 8192 May 31 01:12 ../
$ ln -sf `gcj -print-file-name=include/jawt_md.h`
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/include/linux/jawt_md.h
-bash: gcj: command not found
$ ls -al
total 12
drwxr-xr-x 2 jp107 other 4096 May 31 01:24 ./
drwxrwxrwt 29 root root 8192 May 31 01:12 ../
lrwxrwxrwx 1 jp107 other 59 May 31 01:24 jawt_md.h ->
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/include/linux/jawt_md.h
that ln is from the postinstall scriptlett, if it gets run while gcj
isn't available it drops the bad link in . which is probably / during
install.
I wonder if any scriptlet errors (during the install) get logged
somewhere useful like anaconda.log...
$ rpm -qp java-1.4.2-gcj-compat-devel-1.4.2.0-40jpp.112.i386.rpm
--scripts| grep -A2 ln
ln -sf \
`gcj -print-file-name=include/jni.h` \
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/include/jni.h
--
ln -sf \
`gcj -print-file-name=include/jni_md.h` \
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/include/linux/jni_md.h
--
ln -sf \
`gcj -print-file-name=include/jawt.h` \
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/include/jawt.h
--
ln -sf \
`gcj -print-file-name=include/jawt_md.h` \
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/include/linux/jawt_md.h
So that explains how/why it can happen, but doesn't really provide a fix.
This rpm seems to be broken in other ways; eg an install creates the
directory /usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/include and populates
it with links, but they are not registered as belonging to the
package, and are not removed by an uninstall.
It presumably adds the links in the postinstall 'cos it doesn't know
what they will point at (depends on gcj). Maybe marking them as
shadow would do the right thing on an uninstall -- but it could at
least rm them in the postuninstall since it does know the link-names...
Is there a simple way to require that package to be installed after
whatever is providing gcj (if anything)?