The jdk install image can be located anywhere, but cannot be split up.
All the executables and shared libraries have appropriate RUNPATH/
RPATH entries using the $ORIGIN feature
so that at runtime, it locates itself and locates all other shared
libraries from that location.
It can be built anywhere and installed anywhere, and these locations
don't have to be the same place.
The jar files are found in a similar 'relative' way, so as long as you
don't try and split things up, it should work fine.
You can't just move the java executable around and expect it to find
everything else.
In general, the jdk image should not be broken up, it represents a
tight unit that is known to work together and
the entire unit represents a particular jdk release. A system can have
any number of jdk releases installed on it
and these are all separate units.
It is the jdk8 release that has a modularization plan, which should
address some of this.
A few additional comments below...
On Jan 2, 2011, at 3:17 PM, Shea Levy wrote:
Hi all,
I've just successfully built openjdk6, and am wondering about the
best way to install it on my system, given that the /opt prefix is
no longer obviously appropriate for the build. I have an install
that works for now, but there are aspects I'm unhappy with. I am on
a Linux From Scratch system, so I install everything into /usr (http://www.linuxfromscratch.org/blfs/view/svn/introduction/position.html
), but everything that follows should apply to /usr/local.
My set up for now:
I've copied build/linux-i586/bin/* to /usr/bin. No problems there.
No you have problems already, this will not work.
And the image you really want is the build/linux-i586/j2sdk-image
I've copied build/linux-i586/lib/* to /usr/lib, but upon review I
think it probably belongs in a separate /usr/lib/java/ since there
aren't any .so files in the base of build/linux-1586/lib. If I try
that, running /usr/bin/java complains of being unable to find
libjli.so
Expected problem, you can't split up bin and lib files.
I've copied build/linux-i586/classes/ to /usr. This is the most
disconcerting, as I'd rather not add to the root of /usr and these
files seem perfectly suited to fit in /usr/lib/java. If I try moving
it there, running /usr/bin/java complains of having no class
definition for Object.
Don't use the classes directory, it's just a temp area where the jar
files are built from.
I've copied build/linux-i586/j2sdk-image/man/man1/* to /usr/share/
man/man1. No problems there, though it would be nice if there were a
share directory in build/linux-i586/
I've copied build/linux-i586/include/* to /usr/include/java. No
problems there.
I've copied build/linux-i586/docs/* to /usr/share/doc/openjdk-6-20b
Output of ldd /usr/bin/java:
linux-gate.so.1 => (0xb77b6000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7793000)
libjli.so => /usr/bin/../lib/i386/jli/libjli.so (0xb778a000)
libdl.so.2 => /lib/libdl.so.2 (0xb7786000)
libc.so.6 => /lib/libc.so.6 (0xb7626000)
/lib/ld-linux.so.2 (0xb77b7000)
System.getProperty("sun.boot.class.path"):
/usr/lib/resources.jar:/usr/lib/rt.jar:/usr/lib/sunrsasign.jar:/usr/
lib/jsse.jar:/usr/lib/jce.jar:/usr/lib/charsets.jar:/usr/classes
1. Am I missing any important files if that's all I bring over from
build/linux-i586/ ?
It's a combination of the wrong files (use j2sdk-image) and then
splitting them up which you should not do.
2. Am I right that some of these file locations aren't the most
appropriate given Linux standards?
Don't know how to answer that given the answer to 1.
3. For build/linux-i586/lib: I could manually relink all of the
relevant binaries to the new library locations. Would there be any
problems aside from linking in moving those files to /usr/lib/java?
Is there a better way than manual relinking to specify that those
files lie in a different directory (e.g. some sort of ALT env
variable, or a simple modification to a Makefile?)
Don't know what that question means.
3. For build/linux-i586/classes: I could globally alias java to java
-Xbootclasspath:whatever, but that's ugly. I'm pretty sure there has
to be some Makefile I could edit to change the built in
bootclasspath, since build/linux-i586/j2sdk-image/bin/java looks
in ../jre/classes, but I'm not sure where to start looking. What
Makefile would I need to modify? Or is there an env variable I could
set?
4. In general, are there plans to autotool the build or add an
install target to the main Makefile?
Nope.
-kto
Cheers,
Shea Levy