A native 64bit java plugin java from Sun
By Jean-Christophe Dubacq on Wednesday 28 January 2009, 12:06 - Geeky things - Permalink
L'un des bugs les plus longs à résoudre et les plus commentés de java aura sans doute été celui qui concerne l'absence de plugin permettant l'intégration de java dans les navigateurs web en 64 bits.
Un peu de contexte

Vous vous souvenez peut-être des premières publicités pour le langage Java ; pour moi, c'était irréductiblement associé aux applets, ces petites applications que l'on pouvait faire tourner dans son navigateur NCSA Mosaic (ou dans HotJava) (en particulier Duke en train de faire des pitreries).
Mais si vous êtes en 64 bits sur votre ordinateur, il est fort possible que vous ne puissiez pas l'admirer. Le plugin d'origine de java n'utilisait pas l'API NPAPI (oui, c'est un exemple de RAS syndrome), ce qui empêchait d'utiliser nspluginwrapper, l'adaptateur de plugins 32 bits dans un navigateur 64 bits, ce qui était la solution recommandée pour d'autres plugins propriétaires, comme Flash (ce n'est plus le cas).
Quelles étaients les autres solutions ? Je n'ai jamais trouvé que la solution du chroot 32 bits (une installation plus ou moins complète du système en 32 bits à l'intérieur du système 64 bits) était une bonne solution (j'ai une notion de bonne qui inclut une certaine élégance). C'était pourtant la seule à fonctionner correctement.
Une vieille version de Java 1.4.2 faite par Blackdown (j'utilisais la version empaquetée par François Boisson) fonctionnait... parfois. Mais elle était peu compatible avec l'installation concurrente d'autres versions de Java, ce qui posait de plus en plus de problèmes. Et certaines applets ne fonctionnaient pas, nécessitant un Java plus récent. C'était un plugin 64 bits natif.
Des rumeurs traînent sur un plugin icedtea (version libérée du compilateur Sun), sur le plugin livré avec gcj (un compilateur java complètement séparé de celui de Sun)... J'ai essayé un peu tout, y compris avec des paquets Ubuntu ou natifs. Non, ça ne marchait pas, ou alors ça ne s'agençait pas bien avec d'autres paquets...
Enfin, courant décembre est apparu une version de développement de l'environnement de développement de Sun JDK6 (sous licence propriétaire, alors que le JDK7 est maintenant sous licence libre) (je passe les détails, c'est un peu compliqué car il existe aussi une version du JDK6 qui est libre mais dérivée du JDK7 ; il reste que cette version early access est sous licence non-libre). Et l'un des changements introduits est l'apparition d'un plugin 64 bits natif, qui ne nécessite donc aucune contorsion pour fonctionner (à part l'installer, ce qui on va le voir n'est pas si simple...)
Et depuis, je retrouve les applets java fonctionnelles et je respire enfin !
Je détaille donc ici la procédure que j'ai utilisé pour fabriquer un paquet installable sous Debian sid/unstable qui installe cette version de Java et le plugin avec les outils Debian (notamment les fichiers gérés par dpkg). L'installation proposée par Sun (en dehors du système, ou au milieu de celui-ci mais sans être géré officiellement) doit bien marcher, elle est décrite un peu partout sur Internet et honnêtement se passe de commentaires.
Procédure pour générer un paquet debian
C'est livré un peu « brut de fonderie », avec la procédure utilisée fin décembre 2008. Elle est susceptible d'imperfections (par exemple, je vois qu'il y a maintenant une build b03, qui sera sans doute mieux que la b02). J'ai tout fait dans un pbuilder vide, pour être certain de n'utiliser rien de spécifique à mon système.
pbuiler update && pbuilder loginecho 'deb http://ftp.fr.debian.org/debian sid main contrib' > /etc/apt/sources.listapt-get updateapt-get install java-package wget vim(ou votre éditeur préféré)wget http://www.java.net/download/jdk6/6u12/promoted/b02/binaries/jdk-6u12-ea-bin-b02-linux-amd64-08_dec_2008.binvim +101 /usr/share/java-package/sun-j2sdk.sh- Ajouter: (autour de la ligne 101, donc)
"jdk-6u"[0-9][0-9]"-linux-x64.bin") # SUPPORTED
j2se_version=1.6.0+update${archive_name:6:2}${revision}
j2se_expected_min_size=130
found=true
;; vim /usr/share/java-package/sun-j2sdk1.6/install- Enlever les sections qui concernent firefox et netscape, et enlever ns7/ dans mozilla et iceweasel en mettant
$plugin_dir/libnpjp.soà la place - Remplacer la définition de
plugin_dirpar: plugin_dir="$j2se_base/jre/lib/$arch_dir"vi +15 /usr/share/java-package/j2sdk.sh- Remplacer le
RecommendsparSuggests. Et ligne 16, ajouter à la fin :, sun-java${j2se_release:3:1}-jre, sun-java${j2se_release:3:1}-jdk mv jdk-6u12-ea-bin-b02-linux-amd64-08_dec_2008.bin tmp/jdk-6u12-linux-x64.binuseradd jcdubacqcd /tmpsu -c 'fakeroot make-jpkg --full-name "Jean-Christophe Dubacq" --email jcdubacq1@free.fr --revision 1 jdk-6u12-linux-x64.bin' jcdubacqcp sun-j2sdk1.6_1.6.0+update12-1_amd64.deb /usr/src/packages/(ou n'importe quel endroit visible depuis le pbuilder et votre distribution principale)
C'est fini ! Si vous avez des commentaires sur la procédure, n'hésitez pas. J'ai hésité à soumettre des bugs pour les multiples petits problèmes de java-package soulevés dans cette construction, mais j'ai l'impression que ce programme est un peu obsolète, et je ne voudrais pas en soulever la poussière pour une version qui n'a pas vocation à être très perenne (mais utile en attendant un openJDK7 pleinement fonctionnel, avec plugin 64 bits !)
Ce paquet a été fait avec mes moyens, je ne suis pas spécialiste de l'empaquetage java (juste utilisateur du compilateur de temps en temps et des applets un peu aussi). Je suis preneur de procédures plus propres et plus complètes. Vu la taille des paquets générés (plusieurs dizaines de Mo), je ne les mets pas à disposition, c'est un peu gros pour mon petit site...
Comments
Le paquet icedtea6-plugin disponible dans experimental permet d'avoir ce plugin en amd64 sans problème (testé avec Iceweasel).
Par contre, je crois (mais ne suis plus certain) qu'il m'a fallu créer le lien à la main:
/usr/lib/iceweasel/plugins/IcedTeaPlugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/IcedTeaPlugin.so
@++
Julien
Well done.it works fine.
/usr/lib/j2sdk1.6-sun/jre/lib/amd64/libnpjp2.so -> ~/.mozilla/plugins/libnpjp2.so