Fwd: Re: A More FHS-Compliant JDK Install

Shea Levy shea at shealevy.com
Mon Jan 3 01:08:40 UTC 2011



Whoops, forgot to reply-all.

-------- Original Message -------- 

 
		Re: A More FHS-Compliant JDK Install

  		Sun, 02 Jan 2011 17:06:44
-0800

  		Shea Levy 

  		"Lussier, Denis" 

Hi Luss, 

My understanding
(based on similar reasoning to the section of
http://lists.netisland.net/archives/plug/plug-2006-01/msg00132.html [1]
which starts "I recall a standard on this that I once read.") is that /opt
is is better suited for binary distributions and /usr(/local) is more
appropriate for packages built on the system. Additionally, installing in
/usr(/local) means no need to change $PATH, no need to add custom
directories for linkers to look for, and probably (eventually) no need for
env variables like $JAVA_HOME. I may be completely off-base here, though,
I'm far from an expert in file system standards (though if I'm wrong, I
have no idea what differentiates /opt and /usr). 

Cheers,
 Shea 

On Sun,
2 Jan 2011 19:55:53 -0500, "Lussier, Denis" wrote:  

Hi Shea, I am sorry
for my ignorance, but... why is /opt not an appropriate location for
OpenJDK?? OpenSCG's installer binaries for OpenJDK 6 are built on CentOS 4,
install in a directory under /opt (when installed as root). They seem to
work fine in all the modern Linux Distro's without doing anything
funky/extra with LIB files. I believe this is similar to how Oracle builds
their commercial JDK bu ilds, but, perhaps I am naive. :-) --Luss 
http://openscg.org [2]

 On Sun, Jan 2, 2011 at 6: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
[4]), 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. 

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 

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. 

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/ ? 

2. Am I right that some of these file locations
aren't the most appropriate given Linux standards? 

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?) 

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?


Cheers, 

Shea Levy     

 

Links:
------
[1]
http://lists.netisland.net/archives/plug/plug-2006-01/msg00132.html
[2]
http://openscg.org
[3] mailto:shea at shealevy.com
[4]
http://www.linuxfromscratch.org/blfs/view/svn/introduction/position.html
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/build-dev/attachments/20110102/6c577166/attachment.html>


More information about the build-dev mailing list