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


Reply via email to