Java 8 installieren

Diese Beschreibung bezieht sich auf Debian Wheezy

detlef@detlef:~$ date
Do 17. Jul 16:21:47 CEST 2014
detlef@detlef:~$ 

detlef@detlef:~/$ uname -a
Linux detlef 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux
detlef@detlef:~$ 

Welche Javaversion ist installiert?

Das ist leicht zu ermitteln.
root@detlef:~> java -version 
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
root@detlef:~/$ 
OK, also noch kein Java 8

Zunächst müssen wir uns die aktuelle Javaversion von Oracle holen.
die Anlaufstelle dafür:
www.oracle.com/technetwork/java/javase/downloads/index.htm
Hier finden wir was wir begehren.
Hier ist auch ein Link die Installationanweisungen die wir dann später benötigen




Ein Klick auf Java Download bringt zur nächten Seite auf der wir
a) die Lizenz akzeptieren müssen und
b) das für unser System spezifische File zum Download aussuchen.



Für mein System "Debian Wheezy" Linux 64 existiert ein .rpm und ein tar.gz Archiv
Ich entscheide mich für das tar.gz

Da ich jetzt weiss, welches Archiv ich installieren will klicke ich mich von der vorherigen Seite über mehrere Seiten zu der Installationsanweisung von Oracle
http://docs.oracle.com/javase/8/docs/technotes/guides/install/linux_jdk.html

Ausschnitt der Oracleseite

Installation of the 64-bit JDK on Linux Platforms

This procedure installs the Java Development Kit (JDK) for 64-bit Linux, using an archive binary file (.tar.gz).

These instructions use the following file:

jdk-8uversion-linux-x64.tar.gz

    Download the file.

    Before the file can be downloaded, you must accept the license agreement. 
    The archive binary can be installed by anyone (not only root users), in any location that you can write to. 
    However, only the root user can install the JDK into the system location.

    Change directory to the location where you would like the JDK to be installed, then move the .tar.gz 
    archive binary to the current directory.

    Unpack the tarball and install the JDK.

    % tar zxvf jdk-8uversion-linux-x64.tar.gz

    The Java Development Kit files are installed in a directory called jdk1.8.0_version in the current directory.

    Delete the .tar.gz file if you want to save disk space.


Wunderbar, aber wo liegt mein Java?

Java Speicherort ermitteln

Wenn man nur sporadisch als sysadmin fungiert, da die Hauptsache die Entwicklung ist, muss man erst einmal ermitteln wo Java installiert ist.



root@detlef:~> whereis java
java: /usr/bin/java /usr/bin/X11/java /usr/share/java /usr/share/man/man1/java.1.gz
root@detlef:~> ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Jan  2  2013 /usr/bin/java -> /etc/alternatives/java
root@detlef:~> ll /etc/alternatives/java
lrwxrwxrwx 1 root root 37 Nov 28  2013 /etc/alternatives/java -> /usr/lib/jvm/jdk1.7.0_45/jre/bin/java


Wir kennen jetzt also die Version: 1.7.0_45
und das Verzeichnis /usr/lib/jvm/jdk1.7.0_45

root@detlef:~> cd /usr/lib/jvm
root@detlef:/usr/lib/jvm>

root@detlef:~> ll /usr/lib/jvm
insgesamt 12
lrwxrwxrwx 1 root   root     11 Nov 28  2013 default-java -> jdk1.7.0_45
lrwxrwxrwx 1 root   root     20 Okt 17  2012 java-1.6.0-openjdk-amd64 -> java-6-openjdk-amd64
drwxr-xr-x 5 root   root     47 Jan  2  2013 java-6-openjdk-amd64
drwxr-xr-x 3 root   root     16 Jan  2  2013 java-6-openjdk-common
drwxr-xr-x 5 root   root     36 Jan  2  2013 java-7-openjdk-amd64
drwxr-xr-x 8 uucp      143 4096 Nov 28  2013 jdk1.7.0_45
drwxr-xr-x 6 detlef detlef 4096 Okt  8  2013 jre1.7.0_45

Hallo, da liegt noch eine alte Javaversion rum.
Das ist ein Sicherheitsrisiko.
Was liegt im Downloadverzeichnis?
root@detlef:/usr/lib/jvm> ls -l ~detlef/download/java
insgesamt 600016
-rw-r--r-- 1 detlef detlef  21220755 Nov 28  2013 javafx_samples-2_2_45-linux.zip
-rw-r--r-- 1 detlef detlef  96272413 Mai  8  2013 jdk-7u21-linux-x64.tar.gz
-rw-r--r-- 1 detlef detlef  33617920 Nov 28  2013 jdk-7u45-linux-x64-demos.tar
-rw-r--r-- 1 detlef detlef 138094686 Nov 28  2013 jdk-7u45-linux-x64.tar.gz
-rw-r--r-- 1 detlef detlef 159019376 Jul 16 19:34 jdk-8u11-linux-x64.tar.gz
-rw-r--r-- 1 detlef detlef  46842143 Nov 28  2013 jre-7u45-linux-x64.tar.gz

root@detlef:/usr/lib/jvm> md5sum ~detlef/download/java/jdk-8u11-linux-x64.tar.gz 
13ee1d0bf6baaf2b119115356f234a48  /home/detlef/download/java/jdk-8u11-linux-x64.tar.gz
root@detlef:/usr/lib/jvm> 

root@detlef:/usr/lib/jvm> 


Auch im Downloadverzeichnis können noch alte Versionen entsorgt werden, um Plattenplatz freizugeben.

Unser tar-Archiv jdk-8u11-linux-x64.tar.gz scheint angekommen zu sein.
Leider war auf der Downloadseite keine md5sum angegeben, so dass wir nicht auf übertragungsfehler prüfen können.
Trotzdem habe ich mal die md5sum ermittelt.

Wir wollen jetzt unser Archiv entpacken. Wichtig ist, dass wir uns im Zielverzeichnis /usr/lib/jvm befinden.
Falls wir erst noch testen wollen was im Archiv ist und welches Unterverzeichnis angelegt wird, sollten wir den tar erst mit der Option t

root@detlef:/usr/lib/jvm>
tar -tvzf ~detlef/download/java/jdk-8u11-linux-x64.tar.gz 

  Den Output habe ich mir und Ihnen erspart, wenn sie die Option v (verbose) weglassen kommt auch keiner.

root@detlef:/usr/lib/jvm>
tar -xvzf ~detlef/download/java/jdk-8u11-linux-x64.tar.gz

Jetzt sollten wir nachschauen, ob user neues Verzeichnis angelegt wurde.
Ggf ändern wir noch mit chown -R root:root jdk1.8.0_11 Owner und Group aller Files


root@detlef:/usr/lib/jvm> ll
insgesamt 16
lrwxrwxrwx 1 root   root     11 Nov 28  2013 default-java -> jdk1.7.0_45
lrwxrwxrwx 1 root   root     20 Okt 17  2012 java-1.6.0-openjdk-amd64 -> java-6-openjdk-amd64
drwxr-xr-x 5 root   root     47 Jan  2  2013 java-6-openjdk-amd64
drwxr-xr-x 3 root   root     16 Jan  2  2013 java-6-openjdk-common
drwxr-xr-x 8 uucp      143 4096 Nov 28  2013 jdk1.7.0_45
drwxr-xr-x 8 uucp      143 4096 Jun 17 02:40 jdk1.8.0_11
drwxr-xr-x 6 detlef detlef 4096 Okt  8  2013 jre1.7.0_45

Jetzt müssen wir noch den Symbolischen Link löschen und dann neu eintragen.
root@detlef:/usr/lib/jvm> rm default-java

root@detlef:/usr/lib/jvm> ln -s jdk1.8.0_11 default-java
root@detlef:/usr/lib/jvm> ll dk1.8.0_11 default-java
lrwxrwxrwx 1 root   root     11 Jul 16 19:50 default-java -> jdk1.8.0_11

Wars das?
root@detlef:/usr/lib/jvm> java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
OK: da fehlt noch was der Link in alternatives muss auch noch umgesetzt werden

root@detlef:/usr/lib/jvm> ll /etc/alternatives/java
lrwxrwxrwx 1 root root 37 Nov 28  2013 /etc/alternatives/java -> /usr/lib/jvm/jdk1.7.0_45/jre/bin/java
root@detlef:/usr/lib/jvm> cd /etc/alternatives

root@detlef:/etc/alternatives> rm java
root@detlef:/etc/alternatives> ln -s /usr/lib/jvm/jdk1.8.0_11/jre/bin/java  java
root@detlef:/etc/alternatives> ll java
lrwxrwxrwx 1 root root 37 Jul 16 19:56 java -> /usr/lib/jvm/jdk1.8.0_11/jre/bin/java
root@detlef:/etc/alternatives> java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
root@detlef:/etc/alternatives>

OK: jetzt sollte alles klar sein oder?
Nein, es gibt noch mehr zu kontrollieren.
ist evtl in ~/.bashrc JAVA_HOME definiert worden
less ~username/.bashrc  zeigt  unter anderem
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45/bin/java
das sollte geändert werden auf
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_11/bin/java



Sicherheitsrisiko alte Javaversion

Auf der Anwenderseite , z.B. bei Eclipse ist das Icon in der Taskleiste oder auf dem Desktop ein weiterer Kandidat.
Hier kann für den Programmaufruf gezielt die Java-VM angegeben werden.
Das kann sinnvoll sein, wenn Sie nur für eclipse das neueste Java oder ein älteres Java verwenden wollen.



Hier ist die jvm direkt angegeben und hebelt alle anderen Links aus.
Dort könnte auch noch auf die jdk1.7.0_45 zugegriffen werden.
/opt/eclipse/eclipse -vm /usr/lib/jvm/jdk1.7.0_45/jre/bin/java
Aus diesem Grund sind alte Javaversionen, die Sicherheitsmängel haben und durch neue Versionen ersetzt wurden,
ein Sicherheitsrisiko. Denn eine Applikation kann dann immer noch mit der alten Version arbeiten und das Leck ausnutzen.



Ich hoffe diese Beschreibung hilft dem einen oder anderen.