[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mpkg-j2se and sun java 1.5 beta2


I've just discovered that j2se-package is now in unstable under the name of mpkg-j2se. So I tested it, first with jdk-1_5_0-rc-linux-i586.bin but mpkg-j2se is not compatible with java 1.5 rc. So I tried it with jdk-1_5_0-beta2-linux-i586.bin. mpkg-j2se works with this version. The problem is, as Hubert Schmidt told me earlier, when run as root the java 1.5 beta 2 installer puts a lot of files in /usr/share. If you did not pay attention to this, then try :

1° Make sure you run in user mode, and your user has no write access to /usr/share 2° (user mode shell prompt) # fakeroot mpkg-j2se /path/to/jdk-1_5_0-beta2-linux-i586.bin

Now watch all error messages displayed, messages such as :

/home/robert/downloads/jdk-1_5_0-beta2-linux-i586.bin: line 247: /etc/mailcap: Permission denied mkdir: Cannot create directory `/usr/share/icons/HighContrast/48x48': Permission denied mkdir: Cannot create directory `/usr/share/icons/HighContrastInverse/48x48': Permission denied mkdir: Cannot create directory `/usr/share/icons/LowContrast/48x48': Permission denied cp: cannot create regular file `/usr/share/pixmaps/sun-java.png': Permission denied
(... and lots more error messages like this ...)

I did not know how to overcome this problem until I realized that Sun Java installers were nothing more than zipfiles with more data in them (the installation script and maybe the license agreement but nothing really essential to install java correctly), so it was possible to extract the content of the archive with unzip. Once all the files are unzipped, you are almost done but for java >= 1.4 you have to extract every file with the extension .pack to the same filename with the extension .jar (a binary unpacker included in the java installer archive does the job, it is deleted when installation is completed for java <= 1.5 beta 1). Finally, for java >= 1.5 beta 1, there is also something new : the Class Data Sharing Archive [1]. This file is not extracted from the archive but generated from scratch after extraction is completed. If you run twice the java installer, you'll most likely end with two different |classes.jsa files. So after all this reverse engineering, I've come with this small script. Note that this script only works when run in an empty directory (it was made to be integrated with mpkg-j2se, formerly j2se-package). Well, I've tried several Sun Java versions from 1.3 to 1.5 rc with java-extract.sh and using the standard installer run as fakeroot, and diff reports only a difference in classes.jsa only for java 1.5 (the class data sharing archive that I explained above). Well, now I don't know exactly if this way of extracting the java data is legal (I did not manage to display the license agreement before starting the extraction) and it seems a bit inspired by the "ancient art of cracking ;-)". I have also integrated javaextract.sh in a custom version of j2se-package [2], as I have already posted in this mailing list.

So my question is : "what are you going to do to overcome the problem of all those files in /usr/share ?". Isn't it a release critical bug too ? IIRC, java 1.5 beta 1 also puts files in /usr/share when run as root, does that mean mpkg-j2se shouldn't support java >= 1.5 beta 1 ?


Robert Derochette
[1] http://java.sun.com/j2se/1.5.0/docs/guide/vm/class-data-sharing.html
[2] http://www.student.montefiore.ulg.ac.be/~derochet/index.php (source available directly at http://www.student.montefiore.ulg.ac.be/~derochet/source/j2se-package_0.9b.tar.gz).

Attachment: javaextract.sh
Description: Bourne shell script

Reply to: