Google Summer of Code - Jigsaw - Report 5 (final) -------------------------------------------------
The goal of this Google Summer of Code at Debian was to package Jigsaw (the modularized JDK that will be shipped with JDK8). I tried to do everything I can to get the job done. Sadly, I haven't completed the packaging task. I have done several tasks such as compiling Jigsaw, understanding how it works, writing examples, packaging 2 dependencies, fixing and running tests and finally starting to package Jigsaw. The beginning of this year's GSoC consisted in getting the source code of Jigsaw and trying to compile it. I also rebuilt OpenJDK 6 and OpenJDK 7 packages to get used to the way they are packacged. This was not the hardest thing I had to do. After few hours, I was able to compile Jigsaw and to know what is needed to do so. Jigsaw is still a big piece of code so it takes time to compile. On my own machines it takes more than 2 hours but Tom Marble gave me an access to a more powerfull computer so I was able to compile Jigsaw in 15 minutes. Being able to run the tests was a big part of the work. Running the tests of Jigsaw is important because if the tests pass it means that Jigsaw will work as expected once it is installed. I took a lot of times to make sure that there are as many tests that pass as possible. Running the tests is a very long process, even longer than the build process but it also needs some piece of softwares. That is how I started to work and JT Harness and JT Reg. JT Reg provides two binaries "jtreg" and "jtdiff" which are used to run the tests. JT Harness is a library used by JT Reg. There are also tests that require JUnit. The hackers of IcedTea helped me a lot for this work. So I finally created a patch to fix some tests that did not pass due to some unreachable hosts. The IcedTea project was aware of that so they provide their own hosts (which we can reach). Creating JT Harness and JT Reg packages took me more time than I thought. I had to learn what javahelper is and how it works. Packaging JT Reg was more complicated because I had to generate man pages for the 2 binaries. I think that I spent too much time on this. Even if I had already do some packaging work before this GSoC, I learnt several things which I haven't see in Debian packaging before. I also spent some time to write examples which use Jigsaw. This is how I wrote an example of a module to see how to create and install it. It helps to understand how things work and also how Jigsaw in general works. It's also a good way to know that Jigsaw is working properly even if the tests are made for this. During a week, I had the pleasure to attend DebConf 11 at Banja Luka. It was really fun to meet the Debian community and especially the GSoC mentors and administrators. It was a good way to learn a lot about Debian, to work with Tom Marble and Sylvestre Ledru and also to have fun. Meeting all those smart people is really a great experience. DebConf 11 was also a place when I was able to work (at one of the hacklabs or at the hotel). Tom, Sylvestre and I gave a talk about our GSoC project[2]. This talk is about what I was done so far and what Jigsaw is. The slides and a video are available so don't hesitate to take a look at them. - Here is what happened since the last report After DebConf I started to work on packaging Jigsaw. This is a complex task for me because it is a complicated piece of software. Sylvestre created a Git repository[1] so we can track the progress of the packaging. After studying the OpenJDK 7 packaging, I decided to create a new debian/ directory from scratch. I think that it is easier to re-think the packaging of OpenJDK. Of course the current packages are a source of inspiration. The build system of Jigsaw is supposed to generate Debian packages for each modules when using the "modules" target of the main makefile. Actually, it doesn't work with the current source code. So I decided to fix this before trying to make my own packages. Only one line is the cause of the problem. So I started by editing the file: - jdk/src/share/classes/org/openjdk/jigsaw/cli/Packager.java This file contains a method called translateVersion(String) which returns a string. This methode is quite simple. It just replaces all - characters by the _ character. This is bad. I tried a simple fix by replacing all - characters by a dot and it worked. So here is what the method looked like after being patched. private String translateVersion(String v) { return v.replaceAll("-", "."); } I have sent a mail to the jigsaw-dev mailing list to know why people wanted to use the _ character, which is illegal in Debian but you know that, in the version string. After recompiling the code building the Jigsaw modules started to build things I had nerver see such as Debian package for each modules and 2 new images called "jdk-module-image" and "jre-module-image". These images are like the 2 images built when compiling the current OpenJDK but the module images are as you can guess images when all modules are installed. This gives me a good clue to know how the Jigsaw directory should look like once modules are installed. Debian packages being built by the Jigsaw build system, I took a look at them. I didn't not expect such a result. Everything is installed in /usr/local/jigsaw/ and that's not want we want. But still, studying these packages is interesting to know what Oracle wanted to do and it can give us some pointers to what we have to do to install the modules. The preinst, postint and prerm scripts are interesting to read. The debian/ directory in the Git repository is a copy of the OpenJDK 7 debian/ directory package. There is a second directory called debian-wip/ which is the directory I am working on. The debian/rules file was the most impressive file in all previous OpenJDK package. Mine is much more simple to understand. There are only few environment variables which are set and then it is just several overrides that call make as expected by the Jigsaw build system. #!/usr/bin/make -f # Some export and unexport not interesting here dh_override_auto_configure: $(MAKE) sanity java -version 2>&1 | grep "java -version \"1.7" ; \ if [ $$? -eq 1 ] ; then echo "OpenJDK 7 needed to build" ; \ exit 1 ; fi dh_override_auto_build: $(MAKE) all $(MAKE) modules override_dh_auto_test: xvfb-run -e xvfb-errors -a -s -ac $(MAKE) test -k %: dh $@ Basically, we run "make sanity" to ensure our environment is clean to build Jigsaw, then we check that OpenJDK 7 is installed (because Jigsaw is now in sync with JDK8). Then we build, we build the modules and after that we run the tests using Xvfb which is required for graphical user interface tests. The debian/control file lists a lot of Debian binary packages to build (one for each modules plus few other). Creating the debian/ directory for packaging Jigsaw consist in using all the previous work I have done before. So there is several patches which are applied before trying to build Jigsaw. These patches are about differents things - 01_jpkg_fix.patch: this one is the fix so jpkg can generate .deb. - 02_jtreg_binary.patch: this one is used to locate jtreg and jtdiff. - 03_hosts_tests.patch: this one changes the hosts to reach for testing. - 04_junit_jar.patch: this one is used to locate the junit JAR file. - 05_disable_tests.patch: this one is used to disable tests that don't pass yet (about 15 tests). All those patches have been made using all the work I have done before trying to package Jigsaw. This Google Summer of Code was not long enough for me to finalize the package of Jigsaw. The code is public (of course) so anybody can help us to conclude this work. I was already involved in Debian before doing this GSoC and I plan to keep doing some work for Debian after. I am really motivated to continue the work I started on Jigsaw. If you want to help, Sylvestre created a IRC channel to talk about Jigsaw, feel free to join us (#debian-jigsaw on irc.debian.org). Finally, I would like to thank my mentors Tom Marble and Sylvestre Ledru for their help and for answering to all the questions I have asked. I hope to finish the Jigsaw packaging after this GSoC with them and maybe with other. I'm still really interested in modularizing Java for Debian so I looking forward to this. See you around. [1] http://anonscm.debian.org/gitweb/?p=pkg-java/jigsaw.git [2] http://penta.debconf.org/dc11_schedule/events/718.en.html
signature.asc
Description: Digital signature