OpenJDK – Java 7 – mit Ubuntu kompilieren
Java, Linux/OpenSource, ubuntuusers.de Juli 24th, 2011Ich habe ein merkwuerdiges SSL Problem mit Java 7 (Build 147, dem Release Candidate) im Zusammenhang mit Online-Banking und Jameica/Hibiskus:
Caused by: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:873) at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:804) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1319) ... 19 more
Schaut man sich dazu den Source Code an, sieht man schnell, dass leider die verursachende Exception verschluckt wird. (Das kommt davon, wenn Committer und Reviewer identisch sind…)
Meine Idee war also, OpenJDK selber zu bauen und da ggf. besseres Logging einzubauen. Die im Internet veröffentlichten Anleitungen sind alle ein paar Jahre alt und nicht mehr ganz korrekt, daher hier meine Ergebnisse zum Nachmachen.
Ich habe Ubuntu als System verwendet, dort ist eine Übersetzung von OpenJDK / Java 7 sehr einfach.
OpenJDK wird mittels Mercurial verwaltet, zur Hierarchiebildung wird die Mercurial Forest extension benötigt (und Mercurial). Ist das „mercurial“ Paket bereits installiert so kann man die Forest extension einfach herunterladen:
hg clone http://bitbucket.org/pmezard/hgforest-crew hgforest
Diese muss nun in die .hgrc
eingetragen werden: (das „….“ durch den Pfad zum Download ersetzen)
[extensions] forest=......hgforest/forest.py fetch=
Danach installiert man die Build Abhängigkeiten:
sudo apt-get install build-essential gawk libasound2-dev libfreetype6-dev libcups2-dev libxt-dev libx11-dev libxtst-dev libxrender-dev
Und checkt per mercurial-forest die Sourcen fuer OpenJDK aus:
hg fclone http://hg.openjdk.java.net/jdk7/jdk7 jdk7
Da beim späteren Build noch Java Abhängigkeiten heruntergeladen werden müssen, hab ich noch folgendens in die Ant Konfiguration eingesetzt: ~/.antrc
ANT_OPTS=”$ANT_OPTS -Dallow.downloads=true”
Für den build benötigt man ein existierendes Java, und setzt folgenden Umgebungsvariablen:
export ALT_BOOTDIR=/usr/lib/jvm/java-6-sun unset JAVA_HOME export LANG="C" make sanity
Da sollten keine Fehler zu sehen sein und gibt dann den „make“ Befehl (dauert bei mir rund 40 Minuten):
make
Und kann es dann aus dem aktuellen Verzeichnis testen ob „java“ vorhanden ist:
build/linux-amd64/bin/java -version
Bei mir sieht das dann folgendermassen aus:
openjdk version "1.7.0-internal" OpenJDK Runtime Environment (build 1.7.0-internal-tkruse-b00) OpenJDK 64-Bit Server VM (build 21.0-b17, mixed mode)
Fertig.
(Ja man benötigt wirklich keine „binary plugs“ o.a“. mehr!)
Update: Für Ubuntu 12.04 benötigt man folgende Pakete:
libcups2-dev, libfreetype6-dev, liboss4-salsa-dev
Und muss (Stand Mai 2012) auch wegen der neueren Kernelversion als die bei OpenJDK bekannten eine Environment Variable setzen:
export DISABLE_HOTSPOT_OS_VERSION_CHECK=ok
Juli 24th, 2011 at 21:54
Kannst du den Bug von https://bugs.launchpad.net/ubuntu/+source/openjdk-7/+bug/814306 bestätigen?
Die Bibliothek libsoftokn3.so (aus dem Paket libnss3, Network Security Service library) ist in der openjdk-7-b147 von den Natty-Paketquellen falsch verlinkt. Das könnte im Zusammenhang mit deinem Problem stehen.
Juli 25th, 2011 at 00:49
die oracle builds http://jdk7.java.net/download.html haben das gleiche Problem.
Juli 25th, 2011 at 09:20
An der Loesung dieses Problems bin ich auch sehr interessiert 😉
Ein User hatte mir die Fehlermeldung naemlich auch schon geschickt. Allerdings hatte ich da nicht rausfinden koennen, was der Grund fuer diesen Fehler ist: Also ob Java 7 die Zertifikate jetzt strenger prueft und die Fehlermeldung korrekt ist (das Server-Zertifikat also tatsaechlich ungueltige Eigenschaften besitzt) oder ob es sich um einen Bug in Jameica oder Java handelt.
Juli 25th, 2011 at 09:58
Ja genau – das ist ja gerade der Grund, dass ich das selber bauen möchte 🙂
Juli 25th, 2011 at 09:59
Das habe ich auch gesehen, das war die comdirekt bank – bei mir ist es (mal wieder) die Apobank.