OpenJDK - Java 7 - mit Ubuntu kompilieren
Java, Linux/OpenSource, ubuntuusers.de 24 July 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 moreSchaut 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 hgforestDiese 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-devUnd checkt per mercurial-forest die Sourcen fuer OpenJDK aus:
hg fclone http://hg.openjdk.java.net/jdk7/jdk7 jdk7Da 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 sanityDa sollten keine Fehler zu sehen sein und gibt dann den "make" Befehl (dauert bei mir rund 40 Minuten):
makeUnd kann es dann aus dem aktuellen Verzeichnis testen ob "java" vorhanden ist:
build/linux-amd64/bin/java -versionBei 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

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.
die oracle builds http://jdk7.java.net/download.html haben das gleiche Problem.
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.
Ja genau - das ist ja gerade der Grund, dass ich das selber bauen möchte :)
Das habe ich auch gesehen, das war die comdirekt bank - bei mir ist es (mal wieder) die Apobank.