5/18/10

Mettre à jour le JDK Java sur Debian Lenny



C'est une vidéo en live, je n'ai pas réalisé de montage. Du coup, comme il s'agit d'une vieille machine de test, je suis désolé pour le passage concernant la construction du paquet qui est un peu long. :/ J'espère juste que votre machine est plus rapide que mon vieux bousin :)

Si vous avez déjà installé la version Java fournie par la distribution (cf 1. & 2.), vous pouvez directement vous rendre au point 3.


1. Modifier son sources.list

Avant de commencer, il faut d'abord s'assurer qu'on a accès aux dépôts complémentaires (les paquets Java sont dans non-free et java-package est dans contrib). Modifiez votre /etc/apt/sources.list en conséquence.

deb http://ftp.fr.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
On update ses sources :
# apt-get update


2. Installer le JDK 6 Debian

Pour maintenir Java, on va s'appuyer sur certains fichiers fournis par l'installation standard de la Debian. Dans un premier temps, on va donc installer le JDK 6 Java classiquement. A ce jour, c'est l'update 12 qui sera installée via le dépôt non-free.

# apt-get install sun-java6-{jdk,plugin}
# update-java-alternatives -s java-6-sun
Pour contrôle :
$ java -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)

On vérifie que c'est fonctionnel en se rendant sur java.com.


3. Générer et installer le dernier JDK

a. On récupère le dernier JDK chez Sun (Oracle). Rien de particulier à ce niveau, il suffit de se laisser guider.

b. On installe ensuite le paquet java-package

# apt-get install java-package

c. Avant de pouvoir générer le paquet contenant la mise à jour, on va corriger un fichier qui pose soucis sur Lenny car il ne prend pas en compte plus de 9 update pour Java 6 (c'est balot :/).

# vi +48 /usr/share/java-package/sun-j2sdk.sh
et modifier la ligne comme suit :
"jdk-6u"[0-9][0-9]"-linux-i586.bin") # SUPPORTED
Modification de la ligne 49 :
j2se_version=1.6.0+update${archive_name:6:2}${revision}
Suivant votre architecture, vous serez amenés à modifier les lignes 91-92 (pour amd64) ou 96-97 (pour x64).

d. On passe maintenant en mode utilisateur et on génère la paquet à partir des sources du téléchargement

$ fakeroot make-jpkg /chemin_vers_jdk_sun/jdk-6u20-linux-i586.bin

e. On repasse en root et on installe le paquet généré

# dpkg -i sun-j2sdk1.6_1.6.0+update20_i386.deb


4. Finaliser l'installation

Malheureusement, le paquet généré à l'aide de java-package ne permet pas d'utiliser tel quel update-java-alternatives. Il faut donc procéder à quelques aménagements.

a. On link notre nouveau JDK dans /usr/lib/jvm

# cd /usr/lib/jvm
# ln -s /usr/lib/j2sdk1.6-sun j2sdk1.6-sun

b. update-java-alternatives a besoin de son fichier .jinfo. Comme il n'est pas généré automatiquement par l'installation de notre paquet 'maison', on va le créer en s'appuyant sur celui qui existe pour java-6-sun

# cat .java-6-sun.jinfo|sed -e 's/java-6-sun[0-9\.-]*/j2sdk1.6-sun/'|sed -e 's/java-6-sun/j2sdk1.6-sun/'|sed -e 's/63/65/' > .j2sdk1.6-sun.jinfo

c. update-java-alternatives positionne l'alternative mais ne la crée pas. On doit donc préalablement créer les alternatives. Cela peut être très fastidieux compte tenu du nombre d'alternatives à créer pour Java. Il est finalement plus rapide et confortable d'utiliser un script créé pour l'occasion :

#!/bin/sh
# install-alternatives-for-java-package.sh
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# modifier jdiralias pour les futures version de Java (1.7 ?)
jdiralias=j2sdk1.6-sun
######################

priority=65
basedir=/usr/lib/$jdiralias
basediralias=/usr/lib/jvm/$jdiralias
jre_tools='ControlPanel java java_vm javaws jcontrol keytool pack200 policytool rmid rmiregistry unpack200 orbd servertool tnameserv'
jdk_tools='HtmlConverter appletviewer apt extcheck idlj jar jarsigner java-rmi.cgi javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc'
browser_dirs='xulrunner-addons firefox iceape iceweasel mozilla midbrowser xulrunner'
PLUGIN=libnpjp2.so
PLUGINPTH=/usr/lib/jvm/$jdiralias/jre/lib/i386/$PLUGIN

for i in $jre_tools; do
    update-alternatives \
        --install \
        /usr/bin/$i \
        $i \
        $basediralias/jre/bin/$i \
        $priority 
done

for i in $jdk_tools; do
    update-alternatives \
        --install \
        /usr/bin/$i \
        $i \
        $basediralias/bin/$i \
        $priority 
done

for browser_dir in $browser_dirs; do
    if [ $browser_dir = xulrunner-addons ]; then
        browser=xulrunner-1.9
    else
        browser=$browser_dir
    fi
    update-alternatives --quiet --install \
        /usr/lib/$browser_dir/plugins/libjavaplugin.so \
        $browser-javaplugin.so \
        $PLUGINPTH \
        $priority
done

    update-alternatives \
        --install \
        /usr/bin/jexec \
        jexec \
        $basediralias/jre/lib/jexec \
        $priority 

exit 0

d. On lance le scipt qui va créer les alternatives à notre place :

# ./install-alternatives-for-java-package.sh

e. Finalement, on utilise update-java-alternatives pour mettre à jour les alternatives avec notre nouveau JDK :

# update-java-alternatives -s j2sdk1.6-sun
$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

Tout cela peut paraître un peu long pour une mise à jour mais il n'en est rien (la vidéo le démontre puisqu'il faut moins de 10mn pour tout installer). De plus, pour les prochaines mises à jour, on pourra s'arrêter au 3. (tout le 4. devenant inutile tant qu'on ne passe pas à un Java 7 :p).

En résumé, des efforts minimes pour tenir à jour proprement son JDK "à la Debian".

1 Commentaire

Jordan a dit...

Merci bien :-)

Post a Comment