OpenJDK – Java 7 – mit Ubuntu kompilieren
Geschrieben von everflux am 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
Neue Kommentare